USO DE LA LIBERIA emu8086
emu8086.inc define las siguientes macros :
PRINT string - macro con 1 parámetro, imprime una cadena.PRINTN string - macro con 1 parámetro, imprime una cadena. Lo mismo que PRINT pero agrega automáticamente "retorno de carro" al final de la cadena.PUTC char - macro con 1 parámetro, imprime un carácter ASCII en la posición actual del cursor.GOTOXY col, fila - macro con 2 parámetros, establece la posición del cursor.CURSOROFF - apaga el cursor de texto.CURSORON - enciende el cursor de texto.emu8086.inc también define los siguientes procedimientos :
PRINT_NUM : procedimiento que imprime un número firmado en el registro AX . Para usarlo declare: DEFINE_PRINT_NUM y DEFINE_PRINT_NUM_UNS antes de la directiva END .
PRINT_NUM_UNS : procedimiento que imprime un número sin firma en el registro AX . Para usarlo declare: DEFINE_PRINT_NUM_UNS antes de la directiva END.
GET_STRING : procedimiento para obtener una cadena terminada en nulo de un usuario, la cadena recibida se escribe en el búfer en DS: DI , el tamaño del búfer debe estar en DX . El procedimiento detiene la entrada cuando se presiona 'Enter'. Para usarlo declare: DEFINE_GET_STRING antes de la directiva END .
PRINT_STRING : procedimiento para imprimir una cadena terminada en nulo en la posición actual del cursor, recibe la dirección de la cadena en el registro DS: SI . Para usarlo declare: DEFINE_PRINT_STRING antes de la directiva END .
SCAN_NUM : procedimiento que obtiene el número FIRMADO de varios dígitos del teclado y almacena el resultado en el registro CX . Para usarlo declare: DEFINE_SCAN_NUM antes de la directiva END .
Codigo que muestra un hola mundo
include emu8086.incorg 100h
PRINT 'HOLA MUNDO'
GOTOXY 10,5
PUTC 65 ; 65 es un codigo ascii para 'A'
PUTC 'B'
RET ;REGRESO AL SISTEMA OP
END ;DIRECTIVA PARA DETENER EL COMPI
Salida del programa
Codigo que pide tu nombre y muestra un mensaje de saludo
;get string y print_string
include 'emu8086.inc'
org 100h
lea SI, msg1 ;configurar puntero (SI) a msg
;pedir el numero
call print_string ;imprime el mensaje que apunta SI
lea DI, buffer ;configura el puntero (DI) para el buffer de entrada
mov DX, bufSize ;esteble el tamano del buffer
call get_string ;obtener el nombre y ponerlo en el buffer
lea SI , newIn ;punto a CR/LF hola mundo
call print_string ;mensaje impreso que apunta SI
ret ;retorno del sistema
;data
msg1 db "Ingresa tu nombre " , 0
newIn db 13,10
db "Hola "
buffer db 20 dup (0) ; buffer de entrada para get_string
bufSize = $-buffer ;calcul el tamano del buffer
define_get_string
define_print_string
end ;directivo para detener el compilador
Salida del programa
Codigo que pide un numero y muestra un mensaje
include 'emu8086.inc'
org 100h
lea SI, msg1 ;pide el numero
call print_string
call scan_num ;obtener el numero en cx
mov ax, cx ;copia el numero a ax
call pthis ;imprime la sig cadena
DB 13,10, 'Has introducido el numero: ' , 0
call print_num ;numero de impresionen ax
ret
msg1 DB 'Ingresa un numero: ', 0
;macros para definir procs
define_scan_num
define_print_string
define_print_num
define_print_num_uns
define_pthis
end
Salida del programa
APORTES DE NUESTROS COMPAÑEROS:
PROGRAMA "MAYOR O MENOR DE EDAD".model small
.stack
.data
include "emu8086.inc"
num1 db 0; variable para la edad
.code
inicio proc far
;poner el primer letrero
print " Ingrese su edad: "
;lectura del valor
call scan_num ;llamada al procedimiento de la lib para pedirla
mov num1,cl
;lectura segundo valor
xor ax,ax ;xor para limpiar el registro
mov al,num1
cmp al,18d ;Si lo que se encuentra en al>18
JGE mayor ;salta a mayor
JMP menor ;sino ve a menor
mayor:
printn " "
print "Eres mayor de edad"
jmp final
menor:
printn " "
print "Eres menor de edad"
jmp final
final:
print " "
printn " "
print "Presiona enter para salir..."
mov ah,0 ;servicios de lectura de una pulsación de teclado
int 16h ;Invoca a servicios de teclado
mov ah,4ch
int 21h
ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num
endp inicio
end
SALIDA DEL PROGRAMA
PROGRAMA DE SUMA DE DOS NUMEROS
name "suma de dos numeros"
include "emu8086.inc"
org 100h
.data
suma db 2 dup (?) ;,manera de declarar un arreglo de 2 lugrares
.code
sumas proc
print " Introduce el primer numero: " ;macro de la lib
call scan_num ;llamada a un prodecimiento para pedir un numero
mov suma[0],cl
printn " "
print " Introduce el segundo numero: "
call scan_num
mov suma[1],cl
xor ax,ax ;xor nemonico que limpia registros
add al,suma[0] ;valor de suma posicion 0
add al,suma[1] ;valor de suma posicion 1
printn " " ;macro de la libreria pone un espacio y retorno
print " La suma es: " ; macro que imprime un letrero
call print_num ;llamada a un procedimiento para imprimir un num del
sumas endp
exit:
print " "
printn " "
print "Presiona enter para salir..."
mov ah,0 ;servicio de pulsacion de teclado
int 16h ;invoca a servicios de taclado
ret
define_print_string ;no se uso
define_print_num ;es del print_num
define_print_num_uns ;conversion decimal a scan_num
define_scan_num ;del scan_num prodedimiento
end
SALIDA DEL PROGRAMA
PROGRAMA "APROBADO O REPROBADO"
MODEL SMALL
.STACK 64
.DATA
include "emu8086.inc"
nota db 0
.CODE
OPERACIONES PROC FAR ;DECLARACION DE PROCEDIMIENTO
;MUESTRO EL MENSAJE
print " " ;usa macro print para un espacio
print "Ingrese la calificacion: "
call scan_num ;Leo el numero proc scan_num de la libreria
mov nota,cl ;lo guardo en nota
xor ax,ax ;borro el contenido de ax
mov al,nota ;muevo nota a al
CMP AL,70d ;comparo al con 70
JGE MAYOR ;si es mayor o igual pasa a mayor
JMP MENOR ;si no a menor
MAYOR:
printn " "
print "Aprobado"
JMP SALIR
MENOR:
printn " "
print "Reprobado"
JMP SALIR
SALIR:
print " "
printn " "
gotoxy 10,10 ;coloco el cursor en las coordenadas 10x,10y
print "Presiona enter para salir..." ;imprimo despues este mensaje
mov ah,0 ;servicio de lectura de pulsacion de tecla
int 16h ;invoca servicios de teclado
mov ah,4ch
int 21h
ret
OPERACIONES ENDP
define_print_string
define_print_num
define_print_num_uns
define_scan_num
END
SALIDA DEL PROGRAMA
PROGRAMA QUE PIDE UN NUMERO
SALIDA
No hay comentarios:
Publicar un comentario