calcu

November 23, 2017 | Author: Jesica Denis Minango | Category: Abstract Algebra, Mathematical Objects, Numbers, Computing, Technology
Share Embed Donate


Short Description

Download calcu...

Description

UNIVERSIDAD CENTRAL DEL ECUADOR

NOMBRES: MINANGO JESICA, NAVARRETE DIEGO, OÑA LUIS, ROSERO FELIPE, VÁSCONEZ BLANCA TEMA: CLACULADORA EN ASEMBLER

OBJETIVOS: Crear una calculadora en lenguaje ensamblador la cual tenga un menú y permita las 4 operaciones básicas, suma, resta, multiplicación, división.

Código del Programa ; Define el modelo de memoria .MODEL SMALL .DATA ErrorCAP DB 0 Cantidad DB 0 CantUnoR DW 0 CantDosR DW 0 CantUnoN DW 6,0,6 DUP(?) CantDosN DW 6,0,6 DUP(?) Funcion DB 0 Resulta DB 13,10,13,10,'El Resultado es: $' ResultaR DB 11 DUP(?) Mensaje DB 'Bienvenidos a el programa en asembler , que le permite realizar las' DB 13,10 DB 'Operaciones Básicas de Multiplicación, División, Suma' DB 13,10,'y Resta sobre dos cantidades enteras.'

DB 13,10,13,10,'$' Pregunta DB 13,10,13,10,'Digite:',13,10,13,10 DB'(1) Para Multiplicar.',13,10 DB'(2) Para Dividir.',13,10 DB'(3) Para Sumar.',13,10 DB'(4) Para Restar.',13,10 DB'(5) Para Terminar.',13,10,'$' Error DB 7,7,7,13,10,'Error: en Selección de las opciones' DB 13,10,13,10,'$' Error1 DB 7,7,7,13,10,'Error: Digito invalido en cantidad 1' DB 13,10,13,10,'$' Error2 DB 7,7,7,13,10,'Error: Digito invalido en cantidad 2' DB 13,10,13,10,'$' Error3 DB 7,7,7,13,10,'Error: Cantidad fuera de Rango (65535)' DB '!!!.' DB 13,10,13,10,'$' Error4 DB 7,7,7,13,10,'Error: intento de division por cero' DB 13,10,13,10,'$' CantUnoM DB 13,10,13,10,'Digite primer Cantidad (Debe ser < a 65535)' DB ':$' CantDosM DB 13,10,13,10,'Digite segunda Cantidad (Debe ser < a 65535)' DB ':$' ;************************************************************************ ;Tabla usada para convertir el resultado binario de la operación en formato ASCII ;************************************************************************ Potencia DW 0001h, 000ah, 0064h, 03E8h, 2710h

PotenciaF DW $ .CODE Empieza: ;Borra la pantalla Mov Ah,0Fh int 10h Mov Ah,0 int 10h Mov Ax,@data Mov Ds,Ax Mov Dx,Offset Mensaje Call Imprime Mov Si,Offset ResultaR Add Si,11 Mov Al,'$' Mov [Si],Al Otra: ;Despliega el menu de opciones a elegir Mov Dx, Offset Pregunta Call Imprime Call ObtenTecla Cmp Al,49 Jae Sigue Mov Dx,Offset Error Call Imprime Jmp Otra Sigue:

Cmp Al,53 Jbe TodoBien Mov Dx, Offset Error Call Imprime Jmp Otra TodoBien: Cmp Al,53 Jnz ChkTodo Jmp Funcion5 ChkTodo: Mov Funcion,Al CapCant01: ;Captura las cantidades y las guarda en sus respectivas variables Mov Dx, Offset CantUnoM Call Imprime Mov Ah,0Ah Mov Dx,Offset CantUnoN int 21h Mov ErrorCAP,0 Mov Cantidad,0 Call ConvNUM Cmp ErrorCAP,1 Jz CapCant01 Mov CantUnoR,Bx CapCant02: ;Captura segunda cantidad Mov ErrorCAP,0

Mov Cantidad,1 Mov Dx, Offset CantDosM Call Imprime Mov Ah,0Ah Mov Dx,Offset CantDosN Int 21h Call ConvNUM Cmp ErrorCAP, 1 Jz CapCant02 Mov CantDosR,Bx ;Define cual es la funcion por realizar segun la opcion Mov Al,Funcion Cmp Al,31h Jne Funcion2 Call Multiplica; Multiplica las cantidades Jmp Otra Funcion2: Cmp Al,32h Jne Funcion3 Call Divide; Divide las cantidades Jmp Otra Funcion3: Cmp Al,33h Jne funcion4 Call Suma ; Suma las cantidades Jmp Otra Funcion4:

Cmp Al,34h Jne Funcion5 Call Resta ; Resta las cantidades Jmp Otra Funcion5: Mov Ax,4C00h ; Termina el programa sin errores Int 21h ;******************************************************* ;Rutinas de llamadas del programa ;******************************************************* Multiplica Proc Near Xor Dx,Dx Mov AX,CantUnoR Mov Bx,CantDosR Mul Bx Call ConvASCII Mov Dx,Offset Resulta Call Imprime Mov Dx,Offset ResultaR Call Imprime Ret Multiplica Endp Divide Proc Near Mov Ax,CantUnoR Mov Bx,CantDosR Cmp Bx,0 Jnz Divide01

Mov Cantidad,3 Call HuboError Ret Divide01: Div Bx Xor Dx,Dx; Inicializa Dx con cero Call ConvASCII Mov Dx,Offset Resulta Call Imprime Mov Dx,Offset ResultaR Call Imprime Ret Divide Endp Suma Proc Near Xor Dx,Dx Mov Ax,CantUnoR Mov Bx,CantDosR Add Ax,Bx Jnc SumaConv Adc Dx,0 SumaConv: Call ConvASCII Mov Dx,Offset Resulta Call Imprime Mov Dx,Offset ResultaR Call Imprime Ret

Suma Endp Resta Proc Near Xor Dx,Dx Mov Ax,CantUnoR Mov Bx,CantDosR Sub Ax,Bx Jnc RestaConv Sbb Dx,0 RestaConv: Call ConvASCII Mov Dx,Offset Resulta Call Imprime Mov Dx,Offset ResultaR Call Imprime Ret Resta Endp Imprime Proc Near Mov Ah,9 Int 21h ; Despliega una cadena a traves de la pantalla Ret Imprime Endp ObtenTecla Proc Near Mov Ah,0 Int 16h ; Lee una tecla a trav,s del teclado Ret ObtenTecla Endp ConvNUM Proc Near

;Regresa en Bx la cadena convertida en un entero Mov Dx,0Ah Cmp Cantidad,0 Jnz ConvNum01 Mov Di,Offset CantUnoN+1 Mov Cx,[Di] Mov Si,Offset CantUnoN+2 Jmp ConvNum02 ConvNum01: Mov Di,Offset CantDosN+1 Mov Cx,[Di] Mov Si,Offset CantDosN+2 ConvNum02: Xor Ch,Ch Mov Di,Offset Potencia Dec Si Add Si,Cx Xor Bx,Bx Std ConvNum03: Lodsb Cmp Al,"0" Jb ConvNum04 Cmp Al,"9" Sub Al,30h Cbw Mov Dx,[Di]

Mul Dx Jo ConvNum05 Add Bx,Ax Jo ConvNum05 Add Di,2 Loop ConvNum03 Jmp ConvNum06 ConvNum04: Call HuboError Jmp ConvNum06 ConvNum05: Mov Cantidad,2 Call HuboError ConvNum06: Cld Ret ConvNum Endp ConvASCII Proc Near ;Convertir un numero binario en ASCII Push Dx Push Ax; Guarda el resultado Mov Si,Offset ResultaR ; Cadena donde se guardara el resultado Mov Cx,10 Mov Al,'*' ConvASCII01: Mov [Si],Al

Inc Si Loop ConvASCII01 Pop Ax Pop Dx Mov Bx,Ax Mov Ax,Dx Mov Si,Offset ResultaR Add Si,11 Mov Cx,10 ObtenDigito: ;Dx ccntendra el residuo de la division Dec Si Xor Dx,Dx Div Cx Mov Di,Ax Mov Ax,Bx Div Cx Mov Bx,Ax Mov AX,Di Add Dl,30h Mov [Si],Dl Or Ax,Ax Jnz ObtenDigito Or Bx,Bx Jnz ObtenDigito Ret ConvASCII Endp

HuboError Proc Near ;Envian mensajes de error a la pantalla Cmp Cantidad,0 Jnz HuboError02 Mov Dx,Offset Error1 Call Imprime Mov ErrorCAP, 1 ; Enciende la cadena de error Jmp HuboError05 HuboError02: Cmp Cantidad,1 Jnz HuboError03 Mov Dx, Offset Error2 Call Imprime Mov ErrorCAP,1 Jmp HuboError05 HuboError03: Cmp Cantidad,2 ; Cantidad capturada esta fuente de rango Jnz HuboError04 Mov Dx,Offset Error3 Call Imprime Mov ErrorCAP, 1 Jmp HuboError05 HuboError04: Mov Dx,Offset Error4 ; Error intento division por cero Call Imprime Mov ErrorCAP,1 HuboError05:

Ret HuboError Endp .STACK End Empieza

Capturas de pantalla

Multiplicación

División

Suma

Resta

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF