.text
.globl fib
fib:
sub $sp,
$sp, 12 #
Allouer le bloc d'activation
sw $ra, 8($sp) # Sauvergarder
l'adresse de retour
lw $t0, 12($sp) # Chargement de N
slt $t0, $t0, 2 # n < 2
beq $t0, $zero, fibgt
fiblt:
lw $t0, 12($sp) # return N
j fibend
fibgt:
lw $t0, 12($sp) # Chargement de N
sub $t0, $t0, 1 # N-1
sub $sp,
$sp, 4 # Push N-1
sw $t0, ($sp)
jal fib # Appel de fib
add $sp, $sp, 4
sw $v0, 4($sp) # temp1 <-- fib(n-1)
lw
$t0, 12($sp) # Chargement de N
sub $t0, $t0, 2 # N-2
sub $sp,
$sp, 4 # Push N-2
sw $t0, ($sp)
jal fib # Appel de fib
add $sp, $sp, 4
sw $v0, 0($sp) # temp2 <-- fib(n-2)
lw
$t0, 0($sp) # Chargement de temp2
lw $t0, 4($sp) # Chargement de temp1
add $t0, $t0, $t1 # return temp1 + temp2
fibend:
add $v0, $t0, $zero # Deplacer le resultat dans v0
lw $ra, 8($sp) # Chargement de l'adresse de retour
add $sp,
$sp, 12 # Liberer le bloc d'activation
jr $ra # Retour a l'appelant
.text
.globl main
main:
sub $sp,
$sp, 4 #
Allouer le bloc d'activation
sw $ra, ($sp) # Sauvergarder
l'adresse de retour
add $t0, $zero, 2
sub $sp, $sp, 4 # Push 2
sw
$t0, ($sp)
jal fib # Appel de fib
add $sp,
$sp, 4 # Liberer les parametres
add $v0, $zero, $zero # Valeur de retour
lw $ra, ($sp) # Chargement de l'adresse de retour
add $sp,
$sp, 4 # Liberer le bloc d'activation
jr $ra # Retour a l'appelant