.data
prompt: .asciiz "Inserire un numero intero: "
output: .asciiz "Numero di Fibonacci: "

        .text
        .globl main
main:
        li $v0, 4
        la $a0, prompt
        syscall		# stampa la stringa
        
        li $v0, 5
        syscall		# legge l’intero

        
# calcola fibonacci(n)

        move $a0, $v0
        move $a1, $0
        jal  fib
        
# stampa il risultato ed esci
        move $a1, $v0  # salva il valore restituito da fib in a1
        li $v0, 4
        la $a0, output
        syscall

        move $a0, $a1
        li $v0, 1
        syscall

        li $v0, 10
        syscall
fib:
        addi $sp, $sp,-12
        sw   $ra, 8($sp)
        sw   $a0, 4($sp)	#salva i parametri in input
        sw   $a1, 0($sp)	#salva il risultato della precedente
					#chiamata di fib
        li   $t0, 1
        bgt  $a0, $t0, core	# se n> 1, continua, 
					# altrimenti restituisci n
        move $v0,$a0
        j    return

core:
        addi $a0, $a0,-1	# n -> n-1
        jal  fib			# chiama fib(n-1)
        move $a1, $v0		# salva fib(n-1) nello stack
        addi $a0, $a0,-1	# $a0 diventa n-2
        jal  fib			# esegue fib(n-2)
        add  $v0, $v0, $a1    # somma  fib(n-1) e fib(n-2) 

return:
        lw $ra, 8($sp)
        lw $a0, 4($sp)
        lw $a1, 0($sp)
        addi $sp, $sp, 12
        jr $ra


