Programa Fibonacci Ensamblador
Programa Fibonacci Ensamblador
Programa Fibonacci Ensamblador
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
CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA Inicio: MOV MOV MOV AX,datos DS,AX AH,0 ;Borrar Pantalla
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
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
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
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
; 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
5 de 9
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
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
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
8 de 9
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
9 de 9