Advertisement
Jobjob

Fibonacci récursif MIPS

May 24th, 2013
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. main:
  2. addiu $sp, $sp, -4 # deplacement du pointeur de pile -4
  3. sw $ra, 0($sp) # stockage de l adresse de retour dans la pile
  4.  
  5. li $a0, 5 # le registre $a0 est utilise pour le passage en parametre
  6.  
  7. jal fibo # appel de fibo
  8.  
  9. lw $ra, 0($sp) # chargement de l adresse de retour
  10. addiu $sp, $sp, 4 # deplacement du pointeur de pile a sa position initial
  11.  
  12. jr $ra
  13.  
  14. fibo:
  15. li $v0, 1
  16. bgtz $a0, is_one # on regarde si $a0 > 0 si c est le cas on branche a is_one:, sinon on est dans le cas $a0 = 0 donc cas de base => fibo($a0) = 1
  17. label:
  18. jr $ra
  19.  
  20.  
  21. is_one:
  22. bne $a0, $v0,fibo_gen # on regarde si $a0 != 1 si c est le cas on branche à fibo_gen car nous ne somme dans aucun des cas de bases
  23. beq $a0, $v0, label # sinon on branche à label car nous somme dans le cas de base fibo($a0) = 1
  24.  
  25. fibo_gen:
  26. addiu $sp, $sp, -12 # deplacement du pointeur de pile de -12
  27. sw $ra, 0($sp) # on enregistre l adresse de retour dans la pile avec un offset de 0
  28. sw $a0, 4($sp) # on enregistre la valeur de $a0 dans la pile avec un offset de 4
  29.  
  30. addiu $a0, $a0, -1 # on calcul la valeur pour l appel récursif 1 fibo($a0-1)
  31. jal fibo # appel recursif 1
  32.  
  33. sw $v0, 8($sp) # on sauve la valeur de retour du premier appel
  34.  
  35. lw $a0, 4($sp) # on charge la valeur de $a0 avant le premier appel
  36. addiu $a0, $a0, -2 # on calcul la valeur pour l appel recursif 2 fibo($a0 -2)
  37. jal fibo # appel recursif 2
  38.  
  39. lw $t0, 8($sp) # on charge la valeur de retour de l appel rec. 1 dans $t0
  40. add $v0, $v0, $t0 # on additionne $v0 (valeur de l appel rec 2) et $t0 (valeur de l appel rec. 1) et on sauve le resultat dans $v0
  41.  
  42. lw $ra, 0($sp) # on charge l adresse de retour depuis la pile (offset 0)
  43. addiu $sp, $sp, 12 # on replace le pointeur de pile a sa position initial
  44.  
  45. jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement