.data mensaje: .asciiz "\n log2(fibonacci) = log(" mensaje2: .asciiz ") = " salto: .asciiz "\n" .text fibonacci: #$s0 -> para n = 1 addi $s0,$0,8 #Primeros dos terminos de la función (0,1) addi $s1,$0,0 addi $s2,$0,1 addi $t0,$0,16 #variable temporal para cambiar los valores en el ciclo $t2 = aux addi $t2,$0,0 j while #llamado a la función fibonacci while: slt $t1,$s0,$t0 #if i < 16 -> $t1=1 beq $t1,$0 done #if $t1 = 0 -> break addi $t2,$s2,0 #aux=f2 : llamado a la variable que guarda los datos add $s2,$s2,$s1 #f2 = f1 + f2 addi $s1,$t2,0 #t1 = valor guardado en variable aux jal log2_c #pasar valor f1 <- $s1 add $s0,$s0,1 #n = n + 1 j while #llamado al ciclo log2_c: addi $s3,$0,0 #x = 0 si solo si x<-$s3 addi $s4,$0,1 #y = 1 si solo si y<-$s4 j log2_c_while #revisar el ciclo anidado log2_c_while: slt $t3, $s4, $s1 #y < n si solo si if $s4 < $s1 then $t3 = 1 else $t3 = 0 beq $t3, $0, log2c_done add $s3,$s3,1 #x = x + 1 <-> $s3 = $s3 + 1 sll $s4,$s4,1 #y = y * 2 <-> $s4 = $s4 * 2 j log2_c_while log2c_done: #imprimir el termino de la sucesion log2_c(fibonacci($s2)) #imprimir mensaje, $s1, mensaje2, $s3 y salto #mensaje li $v0,4 la $a0,mensaje syscall #$s2 imprimir termino n de fibonacci li $v0,1 move $a0,$s1 syscall #mensaje2 li $v0,4 la $a0,mensaje2 syscall #$s3 imprimir el termino n evaluando en log2_c(n) li $v0,1 move $a0,$s3 syscall #mensaje2 li $v0,4 la $a0,salto syscall jr $ra #terminar de ejecutar la funcion #Terminar la ejecucion del programa done: li $v0,8 syscall