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 $t0, 1 # chargement de la valeur 1 dans le registre $t0
- beq $t0, $a0, is_base # test si le parametre == 1 ($a0 == 1) dans ce cas on branche à is_one
- blez $a0, is_base # test si le paramètre <= 0 ($a0 <= 0 | c'est le cas $a0 == 0 qui nous interresse) dans ce cas on branche à is_one
- addiu $sp, $sp, -8
- sw $t0, 0($sp) # sauvegarde de fibo(n-2) sur la pile (i.e fibo(0) ici)
- sw $t0, 4($sp) # sauvegarde de fibo(n-1) sur la pile (i.e fibo(1) ici)
- li $t2, 1 # compteur de la boucle while
- while: # label de la boucle while
- beq $t2, $a0, end_while # si le compteur == paramtre i.e $t2 == $a0, on a fini donc on branche end_while pour sortir de la boucle
- lw $t0, 0($sp) # chargement de fibo(n-2)
- lw $t1, 4($sp) # chargement de fibo(n-1)
- add $v0, $t0, $t1 # on trouve fibo($t1)
- sw $t1, 0($sp) # mise a jour de fibo(n-2) (il doit mtn valoir $t1)
- sw $v0, 4($sp) # mise a jour de fibo(n-1) (il doit mtn valoir $v0)
- addiu $t2, $t2, 1 # incrémentation du compteur
- j while # fermeture de la boucle (branchement a while:)
- end_while:
- addiu $sp, $sp, 8 # deplacement du pointeur de pile a sa position initial
- jr $ra
- is_base:
- li $v0, 1 # charge 1 dans le registre pour la valeur de retour $v0
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement