PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS datos segment a DW 0 b DW 0 c DW 0 Temp DW 0 ZeroIzq DW 0 Convierte DW 10000,1000,100,10,1 linefeed DB 13,10,'$' InicioProg DB 'Serie de Fibonacci V2.',13,10,'$' Peticion DB 'Dame el n£mero de elementos de la serie(1-25): ','$' Buffer
DB 32,32,'$'
Longitud DW 0 Tecla
DB 0
FinProg DB 13,10,'Fin de programa.',13,10,'$' datos ends
PILA SEGMENT STACK PILA ENDS
CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA Inicio: MOV
AX,datos
MOV
DS,AX
MOV
AH,0 ;Borrar Pantalla
Dr. Miguel Angel Muñoz Alvarado
1 de 9
PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS MOV INT
AL,2 10h
MOV
AH,09h
LEA
DX,InicioProg
INT
21h
MOV
AH,09h
LEA
DX,Peticion
INT
21h
CALL
Entrada
MOV
AH,09h
LEA
DX,linefeed
INT
21h
MOV
a,0
MOV
b,1
CMP
CX,0
JE
Final
CMP JE DEC
CX,1 Final1 CX
Ciclo: MOV
AX,a
MOV
BX,b
ADD
AX,BX
MOV
c,AX
PUSH CX CALL PrintA
Dr. Miguel Angel Muñoz Alvarado
2 de 9
PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS POP
CX
MOV
AX,b
MOV
a,AX
MOV
AX,c
MOV
b,AX
LOOP Ciclo
; Si no se han completado los ciclos indicados
Final1: CALL PrintA Final: MOV MOV INT
DX,OFFSET FinProg 21h
MOV INT
AH,09h
AH,4Ch ; Terminar programa y volver a DOS 21h
RET
Entrada Proc Near IniEnt: MOV
Longitud,0
MOV
Buffer,32 ; Pon espacios en el Buffer
MOV
Buffer+1,32
CicloEnt: MOV
AH,02h
MOV
BH,0
MOV
DH,1
MOV
DL,47
INT MOV
10h ; Gotoxy AH,09h
Dr. Miguel Angel Muñoz Alvarado
3 de 9
PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS LEA
DX,Buffer
INT
21h
MOV INT
AH,07h ; Entrada de car cter sin eco en pantalla 21h
CMP JG
AL,39h ; ¨Es mayor que 9? CicloEnt
CMP JE
AL,0dh ; ¨Es Enter? FinEntrada
CMP JNE
AL,08h ; ¨Es BackSpace? Sigue
CMP JNE
Longitud,0 QuitaCar
MOV JMP
Buffer,32 CicloEnt
QuitaCar: LEA
BX,Buffer
MOV
SI,Longitud
MOV
DL,32
MOV
[BX+SI],DL ; Rellena con espacios
DEC
Longitud
JMP
CicloEnt
Sigue: CMP JL CMP JE
AL,30h ; ¨Es menor que 0?
CicloEnt Longitud,2 CicloEnt
Dr. Miguel Angel Muñoz Alvarado
4 de 9
PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS ; Aqu¡ ya es un n£mero entre 0 y 9, y son solo dos caracteres LEA
BX,Buffer
MOV
SI,Longitud
MOV
[BX+SI],AL ; Pone la tecla en el Buffer
INC
Longitud
JMP
CicloEnt
AyudaSalto: JMP
IniEnt
FinEntrada: CMP JE
Longitud,0 IniEnt
; Convertimos a binario CMP JE MOV
Longitud,1 ConvierteUno AL,Buffer
SUB
AL,30h
MOV
BL,10
MUL
BL
CMP
AH,0
JNE
AyudaSalto
ADD
AL,Buffer+1
SUB
AL,30h
CMP
AL,25
JG MOV
AyudaSalto CL,AL
Dr. Miguel Angel Muñoz Alvarado
5 de 9
PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS MOV
CH,0
RET
ConvierteUno: MOV
AL,Buffer
SUB
AL,30h
MOV
CL,AL
MOV
CH,0
RET Entrada EndP
PrintA Proc Near MOV
ZeroIzq,0
MOV
BX,OFFSET Convierte
MOV
DI,0
MOV
AX,a
MOV
Temp,AX
CicloPrint: MOV
AX,Temp
MOV
DX,0
MOV
CX,[BX+DI]
DIV
CX
MOV
Temp,DX ; Guarda el residuo en Temp
ADD
AX,48 ; 48=ASCII del 0. En AX est el resultado de la divisi¢n
CMP
AL,48 ; ¨Es cero?
Dr. Miguel Angel Muñoz Alvarado
6 de 9
PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS JE
Imprime
MOV
ZeroIzq,1 ; Si no fue cero,
; hay que desactivar la bandera de cero a la izquierda Imprime: CMP JZ
ZeroIzq,0 NoImprimir
MOV
DL,AL ; En AL est el c¢digo a imprimir
MOV
AH,02h ; Servicio de imprimir caracter
INT
21h
NoImprimir: INC
DI
INC
DI
CMP JL
DI,8 CicloPrint
MOV
ZeroIzq,1 ; Para que el £ltimo cero si imprima
CMP
DI,8
JE
CicloPrint ; Imprimir tambi‚n el valor en hexadecimal
MOV
DL,'=' ; Igual a
MOV
AH,2 ; Imprimir caracter
INT
21h
MOV
DL,' ' ; Espacio
MOV
AH,2 ; Imprimir caracter
INT
21h
MOV
BX,a
MOV
AL,BH ; Primer d¡gito hexadecimal
Dr. Miguel Angel Muñoz Alvarado
7 de 9
PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS CALL PrintHexa MOV
AL,BL
CALL PrintHexa MOV
DL,'h' ; Indica hexadecimal
MOV
AH,2 ; Imprimir caracter
INT
21h
MOV
AH,09h ; Imprimir salto de l¡nea y return.
MOV
DX,OFFSET linefeed
INT
21h
RET PrintA EndP
PrintHexa Proc Near PUSH AX AND
AL,240
SHR
AL,1
SHR
AL,1
SHR
AL,1
SHR
AL,1
CALL PrintHexaChar POP
AX
AND
AL,0Fh
CALL PrintHexaChar RET PrintHexa EndP
Dr. Miguel Angel Muñoz Alvarado
8 de 9
PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS
PrintHexaChar Proc Near CMP JGE
AL,0Ah Letra
ADD
AL,30h
MOV
DL,AL
MOV
AH,2
INT
21h
RET Letra: ADD
AL,37h
MOV
DL,AL
MOV
AH,2
INT
21h
RET PrintHexaChar EndP
codigo ends END Inicio
Dr. Miguel Angel Muñoz Alvarado
9 de 9