Advertisement
Ferdinando_Ottaviani

Esercizio 3

Oct 30th, 2019
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. #ES 3
  2.  
  3. .text
  4. .globl main
  5.  
  6. ### MAIN ###
  7. main:
  8. add $v0,$0,$0 #inizializzo $v0
  9. add $a0,$0,$0 #inizializzo $a0
  10. addi $a0,$a0,5 #pone n in $a0.
  11. jal fibonacci #chiama fibonacci.
  12. jr $ra
  13.  
  14. result:
  15. add $t0,$v0,$zero #salva il risultato in $t0.
  16. add $a0,$t0,$zero #pone il contenuto di $t0 in $a0.
  17. jr $ra
  18. ### FINE MAIN ###
  19.  
  20. ### FUNZIONE fibonacci(n)###
  21. fibonacci:
  22. addi $sp,$sp,-16 #alloca lo stack frame da 16 byte per fibonacci(n)
  23. sw $ra, 0($sp) #carica l’indirizzo di ritorno nello stack frame.
  24. sw $a0, 4($sp) #carica l’argomento $a0=n nello stack frame.
  25.  
  26. beq $a0,$zero,caso_uguale_0 #salta a caso_uguale_0 se $a0=n=0. Base della ricorsione: fibonacci(0)=0.
  27.  
  28.  
  29. addi $t0,$zero,1 #$t0=1, usata come costante.
  30. beq $a0,$t0,caso_uguale_1 #salta a caso_uguale_1 se $a0=n=1. Base della ricorsione: fibonacci(1)=1.
  31.  
  32. sub $a0,$a0,1 #$a0=($a0-1)=(n-1), argomento per la chiamata ricorsiva fibonacci(n-1).
  33. jal fibonacci #chiama fibonacci(n-1).
  34.  
  35. sw $v0,8($sp) #carica $v0=fibonacci(n-1) nello stack frame di fibonacci(n).
  36. lw $a0,4($sp) #$a0=n
  37. sub $a0,$a0,2 #$a0=($a0-2)=(n-2), argomento per la chiamata ricorsiva fibonacci(n-2).
  38. jal fibonacci #chiama fibonacci(n-2).
  39.  
  40. sw $v0,12($sp) #carica $v0=fibonacci(n-2) nello stack frame di fibonacci(n).
  41.  
  42. lw $ra,0($sp) #ritorno.
  43. lw $t1,8($sp) #$t0=fibonacci(n-1).
  44. lw $t2,12($sp) #t1=fibonacci(n-2).
  45.  
  46. add $v0,$t1,$t2 #$v0=fibonacci(n)=fibonacci(n-1)+fibonacci(n-2).
  47.  
  48. addi $sp,$sp,16 #dealloca lo stack frame di fibonacci(n).
  49. jr $ra
  50.  
  51. caso_uguale_1:
  52. addi $v0,$zero,1 #fibonacci(1)=1.
  53. lw $ra,0($sp) #ritorno.
  54. addi $sp,$sp,16
  55. jr $ra
  56.  
  57. caso_uguale_0:
  58. addi $v0,$zero,0 #fibonacci(0)=0.
  59. lw $ra,0($sp) #ritorno.
  60. addi $sp,$sp,16 #dealloca lo stack frame di fibonacci(n).
  61. jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement