jueves, 28 de febrero de 2019

ejercicios del dia 28 de febrero del 2019

#1 programa que hace la suma de dos numero utilizando la libreria "emu8086.inc"
y utlizando en este ejemplo arreglos 

Codigo del programa:


; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h

name "suma de dos numeros"
include "emu8086.inc"
org 100h
.data
suma db 2 dup (?);manera de declarar un arreglo de dos lugares

.code
sumas proc
    print " Introduce el primer numero: " ;macro de la lib
    call scan_num ;llamada a un procedimietno para pedir un numero
    mov suma[0],cl
    printn " "   ;macro que imprime un espacio
    print " Introduce el segundo numero: " ;macro que imprime una etiqueta
    call scan_num
    mov suma[1],cl
    xor ax,ax  ;xor nemonico que limpia registros
    add al,suma[0] ;valor de suma pos[0]
    add al,suma[1] ;valor de suma pos[1]
    printn " " ;macro de la libreria pone un espacio y un retorno
    print " La suma es: ";macro que imprime un letrero
    call print_num ;llamada a un procedimiento para imprimir un numero del registro ax
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 por que no hubo 
define_print_num
define_print_num_uns;conversion a decimal del scan num
define_scan_num
end

ret

COMPILACION




#2 programa en emu8086 que hace la comparacion de edades

codigo
.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
    mov num1,cl
   
    ;lectura segundo valor
   

    xor ax,ax
    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



#3 programa que compare 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 " "
    print "Ingrese la calificacion: "
   
    call scan_num    ;Leo el numero
    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 


captura:


martes, 26 de febrero de 2019

1.1.3 Tipos de Lenguaje ensamblador



El lenguaje es la manera que utlizamos los seres humanos para comunicarnos, por medio de sonidos, expresiones, simbolos, etc. de igual manera la computadora necesita de un lenguaje para que pueda funcionar y nosotros como desarrolladores debemos entender. la computadora utiliza el conocido lenguaje ensamblador, que es un lenguaje de alto nivel y al hablar de lenguajes de alto nivel debemos comprender que trabaja por medio de codigo binario.
Existen varios tipos de lnguaje ensamblador, aunque finalmente todos realizan las mismas tareas.




ENSAMBLADORES CRUZADOS:

 permiten el soporte de medios fisicos como pantallas, impresoras, teclado, etc. y la programacion que ofrecen maquinas potentes que luego seran ejecutados en sistemas especializados.



ENSAMBLADORES RESIDENTES:
permanecen en la memoria de la computadora, y cargan para su ejecucion al programa objeto producido. es el indicado para el desarrollo de pequeños sistemas de control.



MACROENSAMBLADORES:

permiten el uso de macroinstrucciones, son programas grandes que no permanecen en memoria una ves que se a genereado el codigo objeto, normalmete son programas complejos y residentes.



MICROENSAMBLADORES:

Indica al interprete las instrucciones de como debe actuar la CPU.




ENSAMBLADORES DE UNA FASE: 

leen una linea de programa fuente y la traducen directamente para producir una instruccion en lenguaje maquina, estos ensambladores son sencillos, baratos y coupan poco espacio.



ENSAMBLADORES DE DOS FASES: 

se llaman asi por que realizan la traduccion en dos etapas, en la primera fase revisan el codigo fuente y lo construyen en una tabla de simbolos, en la segunda fase vuelven a leer el programa fuente y pueden tradirlo por completo. estos ensabladores son los mas utilizados en la actualidad.

ejercicios del dia 26 de febrero del 2019

Utlilizacion de la libreria em8086.inc



emu8086.inc define las siguientes macros :

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.


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.


CURSOROFF - apaga el cursor de texto.

CURSORON - enciende el cursor de texto.


Para usar cualquiera de las macros anteriores, simplemente
 escriba su nombre en algún lugar de su código y, si es necesario,
 los parámetros.

emu8086.inc también define los siguientes procedimientos :


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 .


PTHIS : procedimiento para imprimir una cadena terminada en nulo en la posición actual del cursor (igual que PRINT_STRING), pero recibe la dirección de la cadena desde la Pila. La cadena TERMINADA A CERO debe definirse justo después de la instrucción CALL. Por ejemplo:


CALL PTHIS


db 'Hello World!', 0


Para usarlo declare: DEFINE_PTHIS 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 .





CLEAR_SCREEN : procedimiento para borrar la pantalla (que se realiza al desplazar la ventana completa de la pantalla) y establecer la posición del cursor en la parte superior. Para usarlo declare: DEFINE_CLEAR_SCREEN 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 .





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 .





Para utilizar cualquiera de los procedimientos anteriores, primero debe declarar la función en la parte inferior de su archivo (pero antes de END ), y luego usar la instrucción CALL seguida de un nombre de procedimiento.








ejemplo 1:

#1 Hola mundo con librería emu8086






; You may customize this and other start-up templates;


; The location of this template is c:\emu8086\inc\0_com_template.txt


name 'ejemplo de hola mundo'


include 'emu8086.inc' ;esta libreria nos permite ir letra por letra


org 100h





.data





suma db 2 dup (?)





.code

print 'hola munndo'

ret

ejecucion:









ejemplo2:
PROGRAMA HECHO EN EMU8086 INC DEL DIA 26 DE FEBRERO 2019








name 'hola mundo'


include 'emu8086.inc'


org 100h


.code





gotoxy 5,5


print "hola mundo"





gotoxy 5,6


printn "hola mundo"





gotoxy 5,7


print


call scan_num





;call print_string 'esta es la cadena'








;define_print_string


define_scan_num


putc 'A'


ret










#3 los numeros ingresados son impresos aabajo con una cadena que te confirma lo que acabas de escribir en este ejemplo.





include 'emu8086.inc'


org 100h


.code





Cursoroff ;apaga el cursor


call scan_num ;define la funcion





define_scan_num





putc 'a'


gotoxy 5,7


print 'dame un numero'


call scan_num


mov ax,cx


gotoxy 5,7


call print_num





define_print_num


define_print_num_uns


end


ret

lunes, 25 de febrero de 2019

ejemplos del dia 25 de febrero del 2019

La interrupcion 10h:

Invocar una interrupción puede hacerse usando la instruccción INT en lenguaje ensamblador de los procesadores x86. Por ejemplo, para imprimir un carácter a la pantalla usando la interrupción 10h del BIOS, las siguientes instrucciones deberán ser ejecutadas:
 MOV AH, 0Eh   ; Imprime carácter en la pantalla
 MOV AL, '!'   ; carácter a imprimir
 INT 10h       ; Llamada a las funciones de video del BIOS



Registro de banderas:

Sirven para indicar el estado actual de la máquina y el resultado del procesamiento. Las instrucciones que piden comparaciones y aritmética cambian el estado de las banderas, algunas cuyas instrucciones pueden realizar pruebas para determinar la acción siguiente.
EJEMPLOS:

Registro de banderas





primer ejemplo de registros de bandera:

codigo:


Ejemplos de banderas:
1-desbordamiento
.model small
.stack
.data

.code
    mov al,255;movemos a al un 255 y el maximo valor a guardar es 255
    mov bl,1
    add al,bl;lo que hay en bl se pasa a al y se crea un valor que no esta dentro del parametro de al 
   
   
.exit
end

corrida en pantalla.




2-resta de dos números y dejar el numero
.model small
.stack
.data

.code
    mov al,2;se le asigna a al es igual a 2
    mov bl,2;se le asigna a bl es igual a 2
    sub al,bl;a al se le reste bl
   
   
.exit
end


corrida en  pantalla

3-resta de dos números con tal de que su resultado sea negativo:

.model small
.stack
.data

.code
    mov al,1;tiene el valor de 1
    mov bl,4;tiene el valor de 4
    sub al,bl;restamos a 1 el valor de 4 para ver que pasa en las banderas
   
   
.exit

corrida en pantalla.


miércoles, 20 de febrero de 2019

Ejercicio del dia 20 de febrero del 2019

En clase se vio un video de como hacer una suma de dos numeros pero utilizando arreglos todo esto para el programa EMU8086 utilizando la libreria emu8086.inc


; You may customize this and other start-up templates;
; The location of this template is c:\emu8086\inc\0_com_template.txt
name 'suma de dos numero'
include 'emu8086.inc' ;esta libreria nos permite ir letra por letra
org 100h

.data

suma db 2 dup (?)

.code
Sumas proc
printn " " ;salto de linea
print "introduce el primer numero ==>"
call scan_num  ;guarda el valor
mov suma[0],cl ;el valor introducido lo guarda en el array suma y en la posicion 0 y es movido de cl
printn ""
print "introduce el segundo numero ==>"
call scan_num
mov suma[1],cl
printn " "
xor ax,ax
add al,suma[0]
add al,suma[1]
printn " "
print 'la suma es:'
call print_num

Sumas endp

exit:
printn ""
printn ""
print "presiona cualquier tecla para salir..."
mov ah,0
int 16h
ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num
end



ret



programa en ejecución:

martes, 19 de febrero de 2019

Ejercicio del dia 19 de febrero del 2019

#Ejercicio en EMU8086 que al ingresar una cierta edad despliega en pantalla si eres menor o mayor o edad a base de un comparador que toma como particion de las edades entre mayor o menor el numero 18.

este es el codigo del programa.


org 100h
.model small
.stack 64 ;segmento de pila
.data     
diez db 10;variable para poder convertir dos caracteres (el primer caracter
; se multiplica al 10 para convertir en decimal)
num1 db 0;variable para la edad
mensaje db "ingresa tu edad:  ","$"   
mensaje2 db "Eres mayor de edad  ","$"
mensaje3 db "Eres menor de edad  ","$"
; add your code here           

.code ;seccion del codigo
    inicio proc Far ;inicia el procedimiento
        mov ax,@data;direccionamiento del segmento de datos
        mov ds,ax;los datos se mueven a ax
       
        ;primer mensaje
        mov ah,09
        lea dx,mensaje
        int 21h;interrupcion necesaria
       
        ;entradadas desde el teclado
       
        mov ah,01;para que el cursos este esperando un valor
        int 21h
        sub al,30h;convirtiendo el valor
        mul diez;se multiplica el numero para decenas
        mov num1,al
       
        ;pedir el valor dos
       
        mov ah,01
        int 21h
        sub al,30h;resta el que se ingresa en "al"
        add num1,al;se suma las decenas obtenidas
        mov al,num1
       
        cmp al,18;compara el registro al con el valor numero 18 para poder desplegar
       
        jge mayor;en caso de que saea mayor utilizo el je lo puedo mandar a una etiqueta y de no vimplostse el prorama va a continuar con la siguiente linea que seria jmp
        jmp menor
       
        mayor:
            mov ah,09
            lea dx,mensaje2
            int 21h
            jmp fin
       
       menor:
            mov ah,09
            lea dx,mensaje3
            int 21h
       
                 
       fin:
            mov ax,4C00H
       
       inicio endp

ret

Capturas de pantalla del programa corriendo:

edad mayor a 18


 cuando introduces un numero menor

lunes, 18 de febrero de 2019

Ejercicios del dia 18 de febrero del 2019

#En este dicho programa vimos la utilzacion de la llamadas de algo parecido a las funciones tales como se vieron en java tambien llamados procedimientos.

A continuacion se hizo un programa basico sencillo de como hacer una multpilicacion de un numero
y todo el valor lo lanza en hexadecimal y se tendria que hacer una conversion a decimal para saber su valor

este es el codigo:

org 100h
mov ax,9
mov bx,10
mul bx
ret

en este caso es una multiplicacion de 9 x 8 el cual deberia de arrojar el valor de 72 en hexadecimal
y este es su corrida en pantalla del programa


y veremos que arroja el valor en hexa y solo seria cuestion de hacer la conversion de dicho numero
si multiplicamos arriba de 1000 se llena el espacio del registro y tendriamos que usar un prefijo de acuerdo al tipo de procesador que tenga la computadora.




Registros de Procesadores (de propósito general) Tabla:



Libro de complementación de los ensambladores:

Aportacion de Brucelee Javier Campos Alvarado
Link del Libro aquiiii




martes, 12 de febrero de 2019

Ejercicio del dia 12 de febrero del 2019

PROGRAMA QUE MUESTRA QUE SI UN ALUMNO ESTA REPROBADO O APROBADO DEPENDIENDO DE ESTO

SI ES MAYOR O IGUAL A 70 MUESTRA QUE ESTA 'APROBADO'
SI ES MENOR A 70 MOSTRAR EN PANTALLA 'REPROBADO'

servicios nuevos vistos el dia de hoy

01 para leer los caracteres desde el teclado
02 imprime los caracteres

Codigo

.model small
.stack 64

.data

    msg1 db 'dame una claificacion(seguida de un enter);$'
    aprobado db 13,10,'aprobado$';db es el tipo de dato
    reprobado db 13,10,'reprobado$'
    VAR1 dw ?,'$';esta variable de tipo dw 'data write'
    VAR2 dw ?,'$'
    VAR3 dw ?,'$'
    
.code ;inicia el segmento del programa

Resultado PROC FAR;Nombre del procedimiento,Procedure,FAR es parte de la sintaxis del procedimiento o funcion 
    MOV AX,@DATA;como inicio
    MOV DS,AX
;--------------PONER O DESPLEGAR EL PRIMER MENSAJE----------------
    MOV AH,09;desplegar el servicio 09    
    lea DX,msg1
    int 21h
;--------------PEDIR UN CARACTER ---------------------------------
    mov ah,01;
    int 21h;parpadea el cursor     
    mov VAR1,ax
;--------------PEDIR UN SEGUNDO CARACTER -------------------------
    mov ah,01;
    int 21h;parpadea el cursor     
    mov VAR2,ax     
;--------------PEDIR UN CARACTER ---------------------------------
    mov ah,01;
    int 21h;parpadea el cursor     
    mov VAR3,ax 
;-------------Momentoi de evaluar la calificacion-----------------
    cmp AL,13
    JE CONTINUE  ;ES UN SALTO SI SE CUMPLE
    JMP MAYOR    ;
;------------INICIA FUNCION

CONTINUE:  ;EL NOMBRE DE LA ETIQUETA Y DOS PUNTOS
    MOV AX,VAR1 ;LO QUE TENEMOS EN VAR1 LO MOVEMOS A AX
    CMP AL,037H; 7 ES 37 EN ASCII
    JGE MAYOR  ;SALTA SI EES MAYOR O IGUAL 
    JMP MENOR
    
MAYOR:
    MOV AH,09
    LEA DX,aprobado
    int 21h
    JMP SALIR
MENOR:
    MOV AH,09
    LEA DX,reprobado
    int 21h
    JMP SALIR      
SALIR:
    MOV AX,4C00H;
    INT 21H
  
RESULTADO ENDP

END


Captura de pantalla de la ejecución:



jueves, 7 de febrero de 2019

ejercicio del dia del 7 de febrero del 2019

#1 programa hecho en EMU8086  que realiza una resta de dos numeros de un solo digito.


org 100h
.model small
.stack 64
.data
n1 db 0
n2 db 0
resta db 0
msg1 db "dame el primer valor:",'$'
msg2 db  10,13,"dame el segundo valor",'$'
msg3 db 10,13 ,"resta=",'$'

.code
begin proc far
;direccionamos al segmento de datos
mov ax,@data
mov dx,ax
;solicitamos el primer digito
mov ah,09
lea dx,msg1
int 21h
;se lee el primer valor
mov ah,01
int 21h
sub al,30h;conviert el caracter en numero

mov n1,al

;solicitamos el segundo numero

mov ah,09
lea dx,msg2
int 21h
mov ah,01
int 21h
sub al,30h;convierte el caracter en numero
mov n2,al

;operacion
mov al,n1
sub al,n2
add al,30h;convierte el caracter resta o decrementa 30h
mov resta,al
mov ah,09
lea dx,msg3
int 21h

;se imprime el caracter con el servicio 02 de la int 21h

mov ah,02
mov dl,resta
int 21h
mov ah,4ch ;ch es para el cierre del programa
Begin endp
end
ret

captura de la ejecucion del programa

practicas del dia 6 de febrero del 2019

#1 programa en emu8086 que muestra en pantalla un texto dependiendo del numero tecleado en el ordenador

por ejemplo si se teclea un 4 se despliega 4 veces



; You may customize this and other start-up templates;
; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h

.model small
.stack 64

.data
mensaje db "ingresa el numero de veces que se repetira el mensaje(1-9)",13,10,'$'   
;,13,retorno de carro
;,10,y un salto de linea
;'$' para marcar el final de la cadena para mas informacion ver el codigo ascii

repetir db 13,10,"repitiendo el ciclo$"

.code
inicio proc far
 
    mov ax,@data
    mov ds, ax
    mov ah , 09
    lea dx, mensaje ;lea se utiliza para leer los valores
 
    int 21h
    mov ah,01
    int 21h
 
    ;convertir a valor lo que se tecleo
    sub al,30h;convierte el valor en el registro al de lo que esta en al lo resta 30h
 
    mov cl ,al;
 
    ciclo:;todo loop empieza con un ciclo
        mov ah,09
        lea dx,repetir ;lo que hay en la variable repetir se lo asigna a dx
        int 21h
    loop ciclo
 
    mov ax,4c00h;asigna el valor 4cooh al valor de ax
    int 21h ;

  inicio endp
 


 
ret

salida en pantalla del programa



miércoles, 6 de febrero de 2019

Resumen del dia 06 de febrero del 2019

Resumen de video del dia 06 de enero

objetico:aprender a leer e imprimir caracterres con lenguaje ensamblador.
Leer caracteres numerico,convertirlos e imprimirlos

AL ES LA PARTE BAJA DEL (LOW) DEL REGISTRO AX
AH ES LA PARTE ALTA (HIGH) DEL REGISTRO AX

el servicio de interrupcion de la interrupcion "21h" que lee un caracter que guarda en el registro AL

se usara de la siguiente manera

MOV AH,01
INT 21H

si lo que necesita son los valores de la configuracion ascii

 y en el video aprendemos a leer los numeros en el valor hexadecimal que seria sumandole 48 en cuanto saber que numero sera en codigo hexadecimal
 por ejemplo si tenemos un 3 le sumamos 48 para saber su valor en hexadecimal 

3 + 48 =51 con esto decimos que el 3 en codigo hexadecimal es 51



si lo que se necesita son valores numercios reales y no el caracter numerico de debe

al momneto de que se llee hay que convertirlo  restandole a AL 30h o 48

sub al,48      o      sub al,30h

imprimirlo

add al,48      o add al,30h

mov ah,02
mov dl,al ;lo que esta en al se pasa al valor dl
int 21


PARA IMPRIMIR SE UTILIZA LA INTERRUPCION 21H es para leer



ejemplo del video que suma dos numeros y da el resultado

; You may customize this and other start-up templates;
; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h


.model small

.stack 64

.data

n1 db 0

n2 db 0

suma db 0

msg1 db "dame el primer valor:",'$'

msg2 db  10,13,"dame el segundo valor",'$'

msg3 db 10,13 ,"suma",'$'



.code

begin proc far
;direccionamos al segmento de datps
mov ax,@data
mov dx,ax

;solicitamos el primer digito
mov ah,09
lea dx,msg1
int 21h
;se lee el primer valor

mov ah,01
int 21h
sub al,30h;conviert el caracter en numero

mov n1,al

;solicitamos el segundo numero

mov ah,09
lea dx,msg2
int 21h
mov ah,01
int 21h
sub al,30h;convierte el caracter en numero
mov n2,al

;operacion
mov al,n1
add al,n2
add al,30h;convierte el caracter suma o incrementa 30h
mov suma,al
mov ah,09
lea dx,msg3
int 21h

;se imprime el caracter con el servicio 02 de la int 21h

mov ah,02
mov dl,suma
int 21h
mov ah,4ch ;ch es para el cierre del programa

Begin endp

end


   
ret


este es el resultado en pantalla



martes, 5 de febrero de 2019

PRACTICAS DEL DIA 5 FEBRERO 2018

#1 PROGRAMA EN EMU8086 QUE DESPLIEGA EL ABECEDARIO DE UNO POR UNO EN PANTALLA CON EL SIGUIENTE CODIGO


org 100h
                   
MOV DL,'A';
MOV CX,26 ;
imprime:
    mov AH,02;
    INT 21h
    INC DL
 LOOP imprime


 ;mov dl,"a"
 ;mov cx,10
 ;LOOP2:
 ;   mov AH,02
 ;   INT 21h
 ;   INC DL
 ;LOOP LOOP2

 ret



#programa en emu8086 que despliega las primeras 10 letras del abecedario


org 100h

 mov dl,"a"
 mov cx,10
 LOOP2:
 mov AH,02
 INT 21h
 INC DL
 LOOP LOOP2

 ret



Vimos video Lectura de Cararcteres en Lenguaje ensamblador
link del video
https://www.youtube.com/watch?v=vFnEN4s-zEw

Unidad 3-ejemplo con macros

Programa que que imprime valores numericos en hexadecimales pero haciendo la utilizacion de macros. include 'emu8086.inc' Mostra...