-
Notifications
You must be signed in to change notification settings - Fork 0
/
VanegasCamilo_Fibonacci.asm
88 lines (70 loc) · 2.76 KB
/
VanegasCamilo_Fibonacci.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
.data
prompt: .asciiz "Ingrese la cantidad de números de la serie Fibonacci: "
fib_msg: .asciiz "Serie Fibonacci: "
sum_msg: .asciiz "\nLa suma de los números es: "
newline: .asciiz "\n"
.text
.globl main
main:
# Pedir al usuario que ingrese cuántos números de la serie quiere generar
li $v0, 4 # Código de syscall 4: imprimir string
la $a0, prompt # Cargar el mensaje a mostrar
syscall
# Leer el número ingresado por el usuario
li $v0, 5 # Código de syscall 5: leer entero
syscall
move $t0, $v0 # Guardar el número en $t0 (número de elementos)
# Inicializar los primeros valores de la serie Fibonacci
li $t1, 0 # Primer valor de Fibonacci (fib(0))
li $t2, 1 # Segundo valor de Fibonacci (fib(1))
li $t3, 2 # Contador para la iteración (ya tenemos los dos primeros valores)
move $t4, $t0 # Guardar el número de elementos a generar en $t4
li $t5, 0 # Acumulador para la suma
# Mostrar el mensaje "Serie Fibonacci: "
li $v0, 4
la $a0, fib_msg
syscall
# Mostrar fib(0) (el primer número de la serie)
li $v0, 1 # Código de syscall 1: imprimir entero
move $a0, $t1 # Mostrar fib(0)
syscall
# Acumular fib(0) en la suma
add $t5, $t5, $t1
# Mostrar fib(1) (el segundo número de la serie)
li $v0, 1 # Código de syscall 1: imprimir entero
move $a0, $t2 # Mostrar fib(1)
syscall
# Acumular fib(1) en la suma
add $t5, $t5, $t2
# Ciclo para generar los siguientes números de Fibonacci
fib_loop:
beq $t3, $t4, print_sum # Si ya generamos la cantidad de números solicitada, salir del bucle
# Calcular el siguiente número de la serie
add $t6, $t1, $t2 # t6 = fib(i-2) + fib(i-1)
move $t1, $t2 # fib(i-2) = fib(i-1)
move $t2, $t6 # fib(i-1) = fib(i)
# Imprimir el número actual de Fibonacci
li $v0, 1 # Código de syscall 1: imprimir entero
move $a0, $t6 # Mostrar el número actual
syscall
# Acumular en la suma
add $t5, $t5, $t6
# Incrementar el contador
addi $t3, $t3, 1
j fib_loop # Repetir el ciclo
print_sum:
# Mostrar un salto de línea
li $v0, 4
la $a0, newline
syscall
# Mostrar el mensaje "La suma de los números es: "
li $v0, 4
la $a0, sum_msg
syscall
# Imprimir la suma acumulada
li $v0, 1 # Código de syscall 1: imprimir entero
move $a0, $t5 # Imprimir la suma
syscall
# Terminar el programa
li $v0, 10 # Código de syscall 10: terminar
syscall