Sunteți pe pagina 1din 9

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 nmero 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 MOV MOV AX,datos DS,AX AH,0 ;Borrar Pantalla

Dr. Miguel Angel Muoz Alvarado

1 de 9

PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS MOV INT MOV LEA INT MOV LEA INT CALL MOV LEA INT MOV MOV CMP JE CMP JE DEC AL,2 10h AH,09h DX,InicioProg 21h AH,09h DX,Peticion 21h Entrada AH,09h DX,linefeed 21h a,0 b,1 CX,0 Final CX,1 Final1 CX AX,a BX,b AX,BX c,AX

Ciclo: MOV MOV ADD MOV

PUSH CX CALL PrintA

Dr. Miguel Angel Muoz Alvarado

2 de 9

PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS POP MOV MOV MOV MOV CX AX,b a,AX AX,c b,AX ; Si no se han completado los ciclos indicados

LOOP Ciclo

Final1: CALL PrintA Final: MOV MOV INT MOV INT RET AH,09h DX,OFFSET FinProg 21h AH,4Ch ; Terminar programa y volver a DOS 21h

Entrada Proc Near IniEnt: MOV MOV MOV CicloEnt: MOV MOV MOV MOV INT MOV AH,02h BH,0 DH,1 DL,47 10h ; Gotoxy AH,09h Longitud,0 Buffer,32 ; Pon espacios en el Buffer Buffer+1,32

Dr. Miguel Angel Muoz Alvarado

3 de 9

PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS LEA INT MOV INT CMP JG CMP JE CMP JNE CMP JNE MOV JMP QuitaCar: LEA MOV MOV MOV DEC JMP BX,Buffer SI,Longitud DL,32 [BX+SI],DL ; Rellena con espacios Longitud CicloEnt AL,30h ; Es menor que 0? DX,Buffer 21h AH,07h ; Entrada de car cter sin eco en pantalla 21h AL,39h ; Es mayor que 9? CicloEnt AL,0dh ; Es Enter? FinEntrada AL,08h ; Es BackSpace? Sigue Longitud,0 QuitaCar Buffer,32 CicloEnt

Sigue: CMP JL CMP JE

CicloEnt Longitud,2 CicloEnt

Dr. Miguel Angel Muoz Alvarado

4 de 9

PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS ; Aqu ya es un nmero entre 0 y 9, y son solo dos caracteres LEA MOV MOV INC JMP BX,Buffer SI,Longitud [BX+SI],AL ; Pone la tecla en el Buffer Longitud CicloEnt

AyudaSalto: JMP IniEnt

FinEntrada: CMP JE Longitud,0 IniEnt

; Convertimos a binario CMP JE MOV SUB MOV MUL CMP JNE ADD SUB CMP JG MOV Longitud,1 ConvierteUno AL,Buffer AL,30h BL,10 BL AH,0 AyudaSalto AL,Buffer+1 AL,30h AL,25 AyudaSalto CL,AL

Dr. Miguel Angel Muoz Alvarado

5 de 9

PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS MOV RET CH,0

ConvierteUno: MOV SUB MOV MOV RET Entrada EndP AL,Buffer AL,30h CL,AL CH,0

PrintA Proc Near MOV MOV MOV MOV MOV CicloPrint: MOV MOV MOV DIV MOV ADD CMP AX,Temp DX,0 CX,[BX+DI] CX Temp,DX ; Guarda el residuo en Temp AX,48 ; 48=ASCII del 0. En AX est el resultado de la divisin AL,48 ; Es cero? ZeroIzq,0 BX,OFFSET Convierte DI,0 AX,a Temp,AX

Dr. Miguel Angel Muoz Alvarado

6 de 9

PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS JE MOV Imprime ZeroIzq,1 ; Si no fue cero,

; hay que desactivar la bandera de cero a la izquierda Imprime: CMP JZ MOV MOV INT ZeroIzq,0 NoImprimir DL,AL ; En AL est el cdigo a imprimir AH,02h ; Servicio de imprimir caracter 21h

NoImprimir: INC INC CMP JL MOV CMP JE MOV MOV INT MOV MOV INT MOV MOV DI DI DI,8 CicloPrint ZeroIzq,1 ; Para que el ltimo cero si imprima DI,8 CicloPrint ; Imprimir tambin el valor en hexadecimal DL,'=' ; Igual a AH,2 ; Imprimir caracter 21h DL,' ' ; Espacio AH,2 ; Imprimir caracter 21h BX,a AL,BH ; Primer dgito hexadecimal

Dr. Miguel Angel Muoz Alvarado

7 de 9

PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS CALL PrintHexa MOV AL,BL

CALL PrintHexa MOV MOV INT MOV MOV INT RET PrintA EndP DL,'h' ; Indica hexadecimal AH,2 ; Imprimir caracter 21h AH,09h ; Imprimir salto de lnea y return. DX,OFFSET linefeed 21h

PrintHexa Proc Near PUSH AX AND SHR SHR SHR SHR AL,240 AL,1 AL,1 AL,1 AL,1

CALL PrintHexaChar POP AND AX AL,0Fh

CALL PrintHexaChar RET PrintHexa EndP

Dr. Miguel Angel Muoz Alvarado

8 de 9

PROGRAMA SERIE DE FIBONACCI EN ENSAMBLADOR CON PROCEDIMIENTOS

PrintHexaChar Proc Near CMP JGE ADD MOV MOV INT RET Letra: ADD MOV MOV INT RET PrintHexaChar EndP AL,37h DL,AL AH,2 21h AL,0Ah Letra AL,30h DL,AL AH,2 21h

codigo ends END Inicio

Dr. Miguel Angel Muoz Alvarado

9 de 9