Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- main:
- addiu $sp, $sp, -4 # deplacement du pointeur de pile -4
- sw $ra, 0($sp) # stockage de l adresse de retour dans la pile
- li $a0, 5 # le registre $a0 est utilise pour le passage en parametre
- jal fibo # appel de fibo
- lw $ra, 0($sp) # chargement de l adresse de retour
- addiu $sp, $sp, 4 # deplacement du pointeur de pile a sa position initial
- jr $ra
- fibo:
- li $v0, 1
- 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
- label:
- jr $ra
- is_one:
- 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
- beq $a0, $v0, label # sinon on branche à label car nous somme dans le cas de base fibo($a0) = 1
- fibo_gen:
- addiu $sp, $sp, -12 # deplacement du pointeur de pile de -12
- sw $ra, 0($sp) # on enregistre l adresse de retour dans la pile avec un offset de 0
- sw $a0, 4($sp) # on enregistre la valeur de $a0 dans la pile avec un offset de 4
- addiu $a0, $a0, -1 # on calcul la valeur pour l appel récursif 1 fibo($a0-1)
- jal fibo # appel recursif 1
- sw $v0, 8($sp) # on sauve la valeur de retour du premier appel
- lw $a0, 4($sp) # on charge la valeur de $a0 avant le premier appel
- addiu $a0, $a0, -2 # on calcul la valeur pour l appel recursif 2 fibo($a0 -2)
- jal fibo # appel recursif 2
- lw $t0, 8($sp) # on charge la valeur de retour de l appel rec. 1 dans $t0
- 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
- lw $ra, 0($sp) # on charge l adresse de retour depuis la pile (offset 0)
- addiu $sp, $sp, 12 # on replace le pointeur de pile a sa position initial
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement