Supongamos CS: código, DS: datos
Segmento de datos
Base de datos de búfer 10
DB?
DB 10 DUP(?)
¿Resultado DW?
Result_Display DB 10 DUP(?)
Fin de los datos
Segmento de código
Inicio:
MOV AX, DATOS
MOV DS, AX
LEA DX, BUFF
MOV, 0AH
INT 21H
MOV di, 0
l0:; ¿De cuántos números consta un * * *?
Puntero de bytes CMP DS: [DI 2], 0DH
JZ Go
DI de empresa
JMP 10
Ir a:; Calcular el enésimo número de Fibonacci y convertir la cadena numérica a un número decimal.
MOV BL, 10
MOV AX, 1
MOV Si, Di; útil para determinar si la entrada tiene un solo número.
DI MOV·CX
L2: Empujando el hacha
Subbyte PTR DS: [DI 1], 30H
Sección Varias palabras puntero DS: [DI 1]
Agregar resultado, AX
Barril explosivo
MUL BL
2 de diciembre
p >Bucle L2
; Hay dos situaciones: 1. La entrada es 1; 2. La entrada no es 1
CMP SI, 1
JNZ L7
Resultado del puntero de bytes CMP, 1
<. p>JNZ L7MOV AX, resultado
JZ L4
MOV AX, 1
MOV·BX, 0
MOV·CX, resultado
Diciembre CX
L3:; El enésimo número de Fibonacci se almacena en AX.
Empuja el hacha
Añade el hacha, BX
Pop·BX
Lazo L3
L4:
;Muestra este número de Fibonacci
MOV DX, 0
LEA SI, se muestra el resultado
MOV DX, 0; DI para expresar cuantos numeros hay en un * * *?
L5:
MOV CX, 10
Llamar DIVDW
Agregar CL, 30H
MOV DS: [SI], CL
Valor máximo de CMP, 0
JZ·L6
Empresa SI
Empresa DI
JMP L5
L6:
MOV Ministro de Defensa, Ministro de Defensa
MOV, 2
INT 21H
p>CMP DI, 0
Está bien JZ
4 de diciembre
2 de diciembre
JMP·L6 p>
Bien:
MOV axe, 4C00H
INT 21H
; Parámetro: (AX)=tipo DWORD Los 16 bits inferiores de datos.
; (DX)=Datos altos de 16 bits de tipo DWORD.
(CX)=Divisor
Devuelve: (DX)=los 16 bits altos del resultado, y (AX)=los 16 bits bajos del resultado.
(CX)=remainder
¡Dividir 32 bits entre 16 bits puede evitar el desbordamiento!
div dw:; Comienza la definición de la subrutina, su función es separar números.
Empujando el Hacha
MOV AX, DX
MOV DX, 0
División CX
MOV· BX, AX
BLASTER
División CX
MOV CX, DX
BX MOV DX
RET Fin de definición de subrutina
Fin del código
Fin del inicio