0% encontró este documento útil (0 votos)
7 vistas5 páginas

Generador de Fibonacci en Ensamblador

El documento es un programa en ensamblador que calcula y muestra los primeros 30 números de la serie de Fibonacci. Utiliza subrutinas para imprimir números en formato decimal y maneja operaciones de 32 bits para la suma de los números. El programa finaliza correctamente después de imprimir la serie.

Cargado por

danteytor
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas5 páginas

Generador de Fibonacci en Ensamblador

El documento es un programa en ensamblador que calcula y muestra los primeros 30 números de la serie de Fibonacci. Utiliza subrutinas para imprimir números en formato decimal y maneja operaciones de 32 bits para la suma de los números. El programa finaliza correctamente después de imprimir la serie.

Cargado por

danteytor
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Jonathan Alexis Angulo Guzmán 10/02/2025

.MODEL SMALL

.STACK 100H

.DATA

MSG DB 'Serie de Fibonacci (30 numeros):', 0DH, 0AH, '$'

FIB1 DW 0001H, 0000H ; Primer número de Fibonacci (1) (32 bits)

FIB2 DW 0001H, 0000H ; Segundo número de Fibonacci (1) (32 bits)

COUNT DW 1 ; Contador de iteraciones

.CODE

MAIN PROC

; Inicializar segmento de datos

MOV AX, @DATA

MOV DS, AX

; Mostrar mensaje de inicio

MOV DX, OFFSET MSG

MOV AH, 09H

INT 21H

; Mostrar primer número (1)

MOV AX, FIB1

CALL PRINT_NUM

; Mostrar segundo número (1)

MOV AX, FIB2

CALL PRINT_NUM

; Bucle para calcular los siguientes 28 números

MOV CX, 28 ; Ya imprimimos los primeros dos


Jonathan Alexis Angulo Guzmán 10/02/2025

FIB_LOOP:

; Sumar los dos números anteriores (manejo de 32 bits)

MOV AX, FIB1 ; Parte baja

MOV DX, FIB1+2 ; Parte alta

ADD AX, FIB2 ; Sumar parte baja

ADC DX, FIB2+2 ; Sumar con acarreo parte alta

; Mostrar resultado

CALL PRINT_NUM

; Actualizar valores de Fibonacci

MOV BX, FIB2 ; Guardar FIB2 en BX (parte baja)

MOV FIB1, BX ; Actualizar FIB1 (parte baja)

MOV BX, FIB2+2 ; Guardar FIB2 en BX (parte alta)

MOV FIB1+2, BX ; Actualizar FIB1 (parte alta)

MOV FIB2, AX ; Actualizar FIB2 (parte baja)

MOV FIB2+2, DX ; Actualizar FIB2 (parte alta)

LOOP FIB_LOOP

; Terminar el programa

MOV AH, 4CH

INT 21H

MAIN ENDP

; -------------------------------------------------
Jonathan Alexis Angulo Guzmán 10/02/2025

; SUBRUTINA PARA IMPRIMIR UN NÚMERO EN DECIMAL

; -------------------------------------------------

PRINT_NUM PROC

PUSH AX

PUSH BX

PUSH CX

PUSH DX

; Si el número es menor a 10, imprimir directamente

CMP AX, 10

JL PRINT_SINGLE

; Convertir número a ASCII y almacenarlo en pila

XOR CX, CX ; Limpiar contador

CONVERT_LOOP:

MOV DX, 0 ; Limpiar DX antes de la división

MOV BX, 10

DIV BX ; AX / 10, AL = cociente, DL = residuo (último dígito)

PUSH DX ; Guardar dígito en pila

INC CX ; Aumentar contador de dígitos

CMP AX, 0 ; Si AX == 0, salir

JNE CONVERT_LOOP

; Imprimir los dígitos en orden

PRINT_LOOP:

POP DX

ADD DL, '0' ; Convertir a ASCII

MOV AH, 02H


Jonathan Alexis Angulo Guzmán 10/02/2025

INT 21H

LOOP PRINT_LOOP

JMP PRINT_END

PRINT_SINGLE:

ADD AL, '0'

MOV DL, AL

MOV AH, 02H

INT 21H

PRINT_END:

; Imprimir espacio para separar los números

MOV DL, ' '

MOV AH, 02H

INT 21H

POP DX

POP CX

POP BX

POP AX

RET

PRINT_NUM ENDP

END MAIN
Jonathan Alexis Angulo Guzmán 10/02/2025

También podría gustarte