miércoles, 27 de febrero de 2019

LIBRERIA EMU8086

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.inc
org 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

Unidad 3 -Unidad 4

Unidad 3 Modularizacion Programación modular Los avances en la programación de computadoras han permitido crear hermosas y grandes aplic...