#funcion fib fib: #$s0 -> n (terminos fibonacci) asumiento arranca en n=1 #[addi $s0 $0 0 => I(op:8(addi) rs:0(0) rt:16(s0) immed:0x00000000)] addi $s0,$0,0 #Primeros dos terminos de la función fibonacci $s1=0, $s2=0 #0x20110000 [addi $s1 $0 0 => I(op:8(addi) rs:0(0) rt:17(s1) immed:0x00000000)] addi $s1,$0,0 #f1=0 <- $s1 #0x20120001 [addi $s2 $0 1 => I(op:8(addi) rs:0(0) rt:18(s2) immed:0x00000001)] addi $s2,$0,1 #f2=1 <- $s2 #variable temporal para hacer el cambio de valores en el ciclo $t2=aux #0x200a0000 [addi $t2 $0 0 => I(op:8(addi) rs:0(0) rt:10(t2) immed:0x00000000)] addi $t2,$0,0 #ir a el ciclo fib(n=1... 16) #program counter, linea (direccion) donde se guarda la etiqueta while: while: #cabecera del ciclo #beq $s0,8 done #7 la ultima iteracion #hacer los prints li $v0,4 la $a0,mensaje_1 syscall #imprimir n li $v0,1 move $a0,$s0 syscall li $v0,4 la $a0,mensaje_2 syscall #$s2 imprimir termino n de fibonacci li $v0,1 move $a0,$s1 syscall #actualizar los valores de los ultmos dos terminos de fibonacci tal como el pseudocodigo #0x224a0000 [addi $t2 $s2 0 => I(op:8(addi) rs:18(s2) rt:10(t2) immed:0x00000000)] addi $t2,$s2,0 #aux=f2 : se usa la variable auxiliar #0x02519020 [add $s2 $s2 $s1 => R(op:0(add) rs:18(s2) rt:17(s1) rd:18(s2) sh:0 func:32)] add $s2,$s2,$s1 #f2=f1+f2 #0x21510000 [addi $s1 $t2 0 => I(op:8(addi) rs:10(t2) rt:17(s1) immed:0x00000000)] addi $s1,$t2,0 #t1=aux #0x22100001 [addi $s0 $s0 1 => I(op:8(addi) rs:16(s0) rt:16(s0) immed:0x00000001)] addi $s0,$s0,1 #n=n+1 j while #repetir el ciclo done: