Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ES 3
- .text
- .globl main
- ### MAIN ###
- main:
- add $v0,$0,$0 #inizializzo $v0
- add $a0,$0,$0 #inizializzo $a0
- addi $a0,$a0,5 #pone n in $a0.
- jal fibonacci #chiama fibonacci.
- jr $ra
- result:
- add $t0,$v0,$zero #salva il risultato in $t0.
- add $a0,$t0,$zero #pone il contenuto di $t0 in $a0.
- jr $ra
- ### FINE MAIN ###
- ### FUNZIONE fibonacci(n)###
- fibonacci:
- addi $sp,$sp,-16 #alloca lo stack frame da 16 byte per fibonacci(n)
- sw $ra, 0($sp) #carica l’indirizzo di ritorno nello stack frame.
- sw $a0, 4($sp) #carica l’argomento $a0=n nello stack frame.
- beq $a0,$zero,caso_uguale_0 #salta a caso_uguale_0 se $a0=n=0. Base della ricorsione: fibonacci(0)=0.
- addi $t0,$zero,1 #$t0=1, usata come costante.
- beq $a0,$t0,caso_uguale_1 #salta a caso_uguale_1 se $a0=n=1. Base della ricorsione: fibonacci(1)=1.
- sub $a0,$a0,1 #$a0=($a0-1)=(n-1), argomento per la chiamata ricorsiva fibonacci(n-1).
- jal fibonacci #chiama fibonacci(n-1).
- sw $v0,8($sp) #carica $v0=fibonacci(n-1) nello stack frame di fibonacci(n).
- lw $a0,4($sp) #$a0=n
- sub $a0,$a0,2 #$a0=($a0-2)=(n-2), argomento per la chiamata ricorsiva fibonacci(n-2).
- jal fibonacci #chiama fibonacci(n-2).
- sw $v0,12($sp) #carica $v0=fibonacci(n-2) nello stack frame di fibonacci(n).
- lw $ra,0($sp) #ritorno.
- lw $t1,8($sp) #$t0=fibonacci(n-1).
- lw $t2,12($sp) #t1=fibonacci(n-2).
- add $v0,$t1,$t2 #$v0=fibonacci(n)=fibonacci(n-1)+fibonacci(n-2).
- addi $sp,$sp,16 #dealloca lo stack frame di fibonacci(n).
- jr $ra
- caso_uguale_1:
- addi $v0,$zero,1 #fibonacci(1)=1.
- lw $ra,0($sp) #ritorno.
- addi $sp,$sp,16
- jr $ra
- caso_uguale_0:
- addi $v0,$zero,0 #fibonacci(0)=0.
- lw $ra,0($sp) #ritorno.
- addi $sp,$sp,16 #dealloca lo stack frame di fibonacci(n).
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement