Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- main:
- addiu $sp, $sp, -4 # on deplace le pointeur de pile de -4
- sw $ra, 0($sp) # on sauve l'adresse de retour dans la pile avec un offset de 0
- li $a0, 3 # on charge la valeur du parametre la fonction dans le registre $a0
- jal fact # appel de la fonction factorielle
- lw $ra, 0($sp) # on charge l'adresse de retour depuis la pile (offset 0)
- addiu $sp, $sp, 4 # on replace le pointeur de pile à sa position d'origine
- jr $ra
- fact:
- li $v0, 1 # on charge la valeur 1 dans $v0
- bne $a0, $v0, fact_gen # on test si $a0 != $v0 i.e si $a0 != 1 car dans ce cas la on est pas dans le cas de base donc on branche à fact_gen
- jr $ra # si on $a0 == 1, nous sommes dans le cas de base donc puisque 1! == 1, c'est fini on branche dans le main ligne 6
- fact_gen:
- addiu $sp, $sp, -8 # on deplace le pointeur de pile de -8
- sw $ra, 0($sp) # on sauve l adresse de retour dans la pile avec un offset de 0
- sw $a0, 4($sp) # on sauve le $a0 courant dans la pile avec un offset de 4
- addiu $a0, $a0, -1 # on soustrait 1 à $a0
- jal fact # on effectue l'appel rec. i.e fact($a0-1)
- lw $t0, 4($sp) # on charge la valeur de $a0 d avant l appel rec. (i.e la valeur de $a0 en entrant dans la fonction) dans le registre $t0 (offset 4)
- mul $v0, $v0, $t0 # on multiplie $v0 par $t0 et on sauve le resultat dans $v0 (i.e $v0 = $t0 * $v0 ou encore $v0 = $a0 * fibo($a0-1))
- lw $ra, 0($sp) # on charge l'adresse de retour depuis la pile (offset 0)
- addiu $sp, $sp, 8 # on replace le pointeur de pile à sa position d'origine
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement