.data nl: .asciiz "\n" .text .globl __start __start: li $v0, 5 # read_int syscall # v0 <- n move $a0, $v0 jal fib move $a0, $v0 jal writeln j Fin fib: ble $a0, 1, fib_01 # si n = 1 ou n = 0 sub $sp, $sp, 12 # trois mots sw $ra, 0($sp) # on sauve ra sw $a0, 4($sp) # et a0 sub $a0, $a0, 1 # a0 <- n-1 jal fib # v0 <- fib(n-1) sw $v0, 8($sp) # on sauve fib(n-1) lw $a0, 4($sp) # on restaure n sub $a0, $a0, 2 # a0 <- n-2 jal fib # v0 <- fin(n-2) lw $a0, 8($sp) # on restaure fib(n-1) add $v0, $v0, $a0 # v0 <- fib(n) lw $ra, 0($sp) # on restaure ra add $sp, $sp, 12 # on ajuste la pile j $ra # retour a l'appelant fib_01: li $v0, 1 j $ra writeln: li $v0, 1 # la primitive print_int syscall li $v0, 4 # la primitive print_string la $a0, nl # le retour a la ligne syscall j $ra Fin: