martes, 26 de febrero de 2019

Programa con modulo emu8086.inc

En esta ocasion pondre un programa que encontre con el modulo de emu8086.inc en donde dados dos numeros de alta, y un operador el programa realiza la operacion indicada con los numeros dados.

Link de consulta: https://www.programacion.com.py/escritorio/ensamblador/ejercicios-resueltos-en-ensamblador-8086

Sintaxis


org 100h ; inicio de programa
include 'emu8086.inc' ;Incluye funciones de libreria emu8086 
; DEFINE_SCAN_NUM
; DEFINE_PRINT_STRING
 DEFINE_PRINT_NUM
 DEFINE_PRINT_NUM_UNS
 
mov si, 0
mov al, 0
;Convertir primera cadena a numero
 cadAnum:
cmp cad1[si], "$"
 jz seguir

 mov bl, 10 
 mul bl
sub cad1[si], '0' 
 add al, cad1[si]

 inc si ;realiza un incremento
loop cadAnum ;

seguir:
mov aux1, al
;Convertir segunda cadena a numero
mov si, 0
mov al, 0
cadAnum2:
cmp cad3[si], "$"
 jz seguir2 ;Saltar si el resultado es cero 

 mov bl, 10 
 mul bl
sub cad3[si], '0' 
 add al, cad3[si]

 inc si
loop cadAnum2

seguir2:
mov bl, al 
mov al, aux1
;realizar operaciones normalmente teniendo ya los dos numeros decimales
cmp cad2, "-"
jz resta 
cmp cad2, "+"
jz suma 
cmp cad2, "*"
jz multi 
cmp cad2, "/"
jz divi
resta: 
sub al, bl
jmp fin
suma: 
add al, bl
jmp fin
multi: 
mul bl
jmp fin
divi: 
div bl
jmp fin

fin:
mov bx, ax
mov ah,09 
lea dx,msg
int 21h 
mov ax, bx
call PRINT_NUM
ret    

cad1 db "20$"
cad2 db "-"
cad3 db "2$"
aux1 db ?
aux2 dw ?
msg dw "El resultado es: $"

A diferencia del otro programa que había subido con anterioridad, la declaración de los datos en esta ocasión es al final del programa y la declaración de las funciones es al inicio del programa.
Una vez aclarado esto, les pondré la corrida del programa. Como pueden ver, damos de alta el numero 20 y el numero 2, así como el símbolo de resta para realizar esa operación.


Dado de alta los siguientes datos, en la parte de corrida del programa podemos ver lo que es las variables que anteriormente habíamos declarado para ver los movimientos de esta a lo largo de la sintaxis.


Finalmente, aquí tenemos lo que es programa nos devuelve como mensaje final. A mi gusto, podríamos modificarlo para que nos muestre los números que se ingresaron y la operación seleccionada para que no solo nos lance el resultado sin ningún contexto.


Ejemplo 2

**Documentar con imagenes**


include 'emu8086.inc'

ORG    100h

LEA    SI, msg1       ; pregunta por el numero
CALL   print_string   ;
CALL   scan_num       ; guarda el numero en CX

MOV    AX, CX         ; Copia el numero a AX

; Imprime la siguiente cadena
CALL   pthis
DB  13, 10, 'You have entered: ', 0

CALL   print_num      ; Imprime el numero en AX

RET                   

msg1   DB  'Enter the number: ', 0

DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS  
DEFINE_PTHIS

END                 

Primer mensaje, espera respuesta del usuario con un numero


Nos devuelve el mensaje dado y el numero que se había ingresado antes

No hay comentarios.:

Publicar un comentario