Programas: Turbo Assembler [Parte 2]

Tarea 8. Programa con modulo emu8086.inc

El día de hoy vamos a utilizar la libreria emu8086, en ella utilizamos por primera vez las "macros", que son las siguientes:

  • PUTC char: imprime un solo caracter
  • GOTOXY col, row: coloca el cursor en las coordenadas solicitadas
  • PRINT string: Imprime una cadena
  • PRINTN string: Imprime una cadena y tras imprimirla hace un salto de linea.
Existen varias funciones comunes que se pueden incluir a un programa. Para hacer que el programa implemente funciones definidas en otro archivo debes usar la directiva INCLUDE seguida del nombre del archivo. El compilador automáticamente busca el archivo en la misma carpeta donde esta localizado el archivo de código fuente, y si no lo encuentra ahí, lo buscara en la carpeta Inc.

Codigo:

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: $"

Comments