Вы находитесь на странице: 1из 44

UNIVERSIDAD NACIONAL DE INGENIERIA

DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES


LABORATORIOS DE MAQUINAS COMPUTADORAS I
PRIMER LABORATORIO

INTRODUCCIN AL EMU8086 .

Objetivos especficos

Identificar los principales elementos que conforman el ambiente Integrado de Programacin (IDE)
del programa EMU8086.
Identificar los elementos que conforman un cdigo fuente tpico, escrito con la sintaxis del
lenguaje ensamblador de la familia 8086.
Crear cdigos fuentes usando la sintaxis del lenguaje ensamblador.

Materiales y equipo

1 Computadora con el programa EMU8086 y el archivo IO_BAS.INC

Procedimiento
1) Ejecute el programa emulador de microprocesadores EMU8086.
2) En la ventana de bienvenida seleccione la opcin new.
3) En la ventana donde elige el tipo de plantilla selecciones la opcin empty workspace y
luego de clic en OK.
4) Una vez est abierto el IDE y usando la opcin open verifique que en la sub-carpeta inc
(C:\emu8086\inc) existe el archivo IO_BAS.inc, en la opcin tipo seleccione all files (*.*). Si
el archivo no est comunqueselo al docente de laboratorio.
5) Escriba en el IDE el cdigo fuente en lenguaje ensamblador que se muestra a continuacin. Por
favor no digite los comentarios.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
2

PROGRAMA EN LENGUAJE ENSAMBLADOR


include IO_BAS.INC ;Indica al compilador que incluya la librera respectiva.

;El archivo IO_bas.INC debe estar almacenado en


;la carpeta inc del emulador
.model small ;Indica al compilador el modelo de memoria que se usara
;en este caso se usa un modelo pequeno
;=====================================================
;ZONA PARA DECLARAR LAS VARIABLE Y CONSTANTES DEL PROGRAMA
;
;SE LE CONOCE COMO SEGMENTO DE DATOS
;
;Inicia con la directiva simplificada .data
;=====================================================
.data
frase db 'HOLA MUNDO',0Ah,0Dh,'$' ;Declara cadena que se va a imprimir
pak db 'Presione cualquier tecla para terminar el programa$'
;===========================================================
;ZONA PARA ESCRIBIR LAS INSTRUCCIONES, MACRO-INSTRUCCIONES
;Y PROCDIMIENTOS QUE SE EJECUTARAN.
;
;SE LE CONOCE COMO SEGMENTO DE CODIGO
;
;Inicia con la directiva simplificada .code
;==========================================================
.code
INICIO:
mov ax, @DATA ;Bloque de instrucciones que ubica la zona de
;memoria donde estan almacenados los datos
;con los que el programa va a trabajar.

;Se utiliza la instruccion MOV (mover) para


;trasladar al registro AX la direccion de memoria
;donde inicia este bloque

mov ds, ax ;Transfiere (en realidad copia) el contenido del


;registro AX al registro DS

Imprimir_Cadena frase ;Macro-Instruccion que imprime la cadena llamada frase

Imprimir_Cadena pak ;Macro-Instruccion que imprime la cadena llamada fin

Presione_Tecla_Fin ;Macro-Instruccion que espera a que se


;presione cualquier tecla para seguir adelante
FIN:
mov ax, 4C00h ;Bloque de instrucciones que terminan el programa
int 21h
;==========================================================
;ZONA DE MEMORIA DONDE SE ALMACENAN DATOS INTERMEDIOS QUE SE CREAN
;DURANTE LA EJECUCION DEL PROGRAMA.
;
;SE LE CONOCE COMO SEGMENTO DE PILA
;
; Inicia con la directiva simplificada .stack
;==========================================================
.stack

end INICIO

6) Guarde el archivo en la carpeta MySource asignndole por nombre su nmero de carnet.


Cuntos bytes contiene el archivo fuente que ha digitado? ___________________________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
3

7) Compile el archivo ASM, dando clic en el botn llamado compile . Si se encuentra con algn
mensaje de error corrjalo, si tiene dificultades consulte con su docente de laboratorio. Si no tiene
errores se le pedir que asigne un nombre al archivo EXE, por defecto el programa le asigna el
mismo nombre que el cdigo fuente, pero puede colocarse otro. Para este caso mantenga el
nombre por defecto.
8) Cierre la ventana assembler status (Estado del proceso de compilacin).
Cuntos bytes contiene el archivo ejecutable que se ha creado? __________
9) Emule el archivo EXE, dando clic en el botn llamado emulate. Notar que se abren dos
ventanas, una que muestra el cdigo fuente original (Original Source Code) y la otra es la del
emulador (emulator) que se muestra en la Figura 1.1.

Figura 1.1 Ventana emulator


10) Observe la ventana original source code
Qu lnea aparece resaltada y por qu lo est?___________________________________________
____________________________________________________________________________________
11) Ejecute el programa presionando el botn run de la ventana emulator.
12) Siga las instrucciones del programa hasta que observe una ventana con un mensaje que indica la
finalizacin del programa.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
4

13) Muestre a su docente de laboratorio el resultado de la ejecucin del programa, si no es la


esperada realice las correcciones pertinentes.
14) Si el resultado es satisfactorio Cul es la ltima instruccin resaltada?
___________________________________________________________________________________
15) Describa con sus propias palabras, pero usando un buen lenguaje tcnico que es lo que hizo el
programa:
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
16) Recargue el programa usando el botn reload.
17) En la ventana emulator observe cual es el contenido del registro AX y antelo a continuacin:
AX=________
18) Presione el botn single step , para ejecutar paso a paso el programa. Note que han sucedido
varias cosas, la instruccin resaltada ahora es mov DS, AX y el contenido de AX ha cambiado.
Anote el contenido de los registros AX y DS
AX: __________ DS: __________
19) Presione nuevamente single step, para ejecutar la siguiente lnea de instruccin. Cul es el
nuevo valor de DS? _________

20) Ahora presione el botn step back Qu cambios observa? _____________________________


____________________________________________________________________________________
____________________________________________________________________________________

21) Presione nuevamente single step.


Cul lnea est resaltada? _____________________________________________________________
Qu diferencia hay entre esta lnea y las dos anteriores?
____________________________________________________________________________________
____________________________________________________________________________________
22) Presione cuatro veces single step.
Qu ocurri? _______________________________________________________________________
Qu texto se imprimi en la pantalla? __________________________________________________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
5

23) Presione cinco veces single step.


Qu ocurri? _______________________________________________________________________
24) Presione cuatro veces single step.
Qu ocurri? _______________________________________________________________________
25) Realice la accin que el programa le pide.
26) Avance un paso ms.
Se cerr el programa al ejecutar Presione_Tecla_Fin? ____________________________________
Cul lnea est resaltada? _____________________________________________________________
27) Avance un paso ms.
Qu registro cambi y cul es su nuevo valor?
___________________________________________________________________________________
28) Avance un paso ms.
Se ejecut esta instruccin como la anterior? ____________________________________________
29) Avance hasta terminar el programa.
30) En la ventana emulator ubique en la parte baja el botn vars que le permite visualizar las
variables declaradas, presione este botn.
31) Debe observar algo similar a lo mostrado en la Figura 1.2.
En esta ventana se le indica que se han declarado dos variables, que cada una se est mostrando
en grupos de bytes (48h y 50h), que solo se est visualizando 1 byte de cada variable y que los
datos se muestran en formato hexadecimal.

Figura 1.2. Ventana de variables.


32) Cambie el formato de visualizacin de las dos variables de hexadecimal a ASCII.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
6

Qu relacin hay entre las variables declaradas en el cdigo fuente y lo que observa en la
ventana de variables?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________

33) Para el caso de la variable frase cambie el nmero de bytes visualizados de 1 a 13 y en pak
de 1 a 51.
34) En esta ventana podr monitorear en tiempo real los cambios en las variables declaradas y ser de
gran ayuda para comprender muchos de los programas que se desarrollen en el laboratorio.
35) Para terminar modifique el cdigo fuente para que aparezca en la pantallas los siguientes textos:

Mi nombre es: .
Que tenga un buen da

36) Cuando este lista la modificacin muestre el resultado al docente de laboratorio. Con esto ltimo
se da por finalizado el procedimiento.

Anlisis de Resultados

1. Qu problema se hubiera presentado si no se tuviera copia del archivo IO_BAS.INC?


____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________

2. Existen diferencias entre los formatos de las variables declaradas y los textos que se imprimen en
pantalla? De ser as cules son las diferencias? y a qu se deben?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________

3. Cuando se ejecut el programa paso a paso no todas las lneas del cdigo se ejecutaron de la
misma manera. Agrupe las lneas de instruccin en base a la forma en que se ejecutan.
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
7

4. Qu diferencia hay entre una instruccin, una Macro-instruccin y una Interrupcin?


____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________

Investigacin Complementaria
1) En la variable llamada frase qu funcin cumplen los datos 0Ah y 0Dh?
2) Cul es la relacin de estos datos y el cdigo ASCII?
3) En un compilador de C++ escriba y luego compile el cdigo de C del tutorial, luego compare el
tamao de los archivos fuentes y ejecutables con los obtenidos en esta prctica. Por qu hay
diferencias?

Bibliografa

Tutorial del Emu8086 (se lo proveer su docente terico).


8086 assembler tutorials que est incluido en el programa Emu8086.
UNIVERSIDAD NACIONAL DE INGENIERIA
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
1
LABORATORIOS DE MAQUINAS COMPUTADORAS I
SEGUNDO LABORATORIO

EL EMU8086 Y EL MICROPROCESADOR 8086 .

Objetivos especficos

Ubicar en la memoria los diferentes segmentos que conforman un archivo EXE.


Identificar los registros del modelo de programacin del 8086.
Observar la relacin que existe entre los lenguajes de ensamblador y mquina.
Emplear las instrucciones MOV y OUT.

Materiales y equipo

1 Computadora con el programa EMU8086.


1 Mdulo IDL-800 Digital Lab o fuente de +5V con tarjeta con switches y leds.
1 Breadboard.
1 cable para puerto paralelo con identificacin de pines.
1 Pinza y cortadora de alambre.
Alambre de telefona.

Procedimiento
1) Ejecute el emulador 8086.
2) Digite el primer programa y guarde el archivo asignndole como nombre su nmero de carnet.
3) Compile el archivo.
4) Use el botn emulate para cargar el archivo ejecutable, pero no lo ejecute.
5) Observe la ventana original source code
Cul lnea de instruccin est resaltada en amarillo? _____________________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
2

PRIMER PROGRAMA
.model small
.stack
.data
BYTE1 DB 7Ah ;Declara byte (8 bits) en hexadecimal
BYTE2 DB 99 ;Declara byte en decimal
BYTE3 DB 11001111b ;Declara byte en binario
BYTE4 DB 'A' ;Declara byte en formato ASCII
BYTE5 DB ?
BYTE6 DB ?
BYTE7 DB ?
BYTE8 DB ?
.code
mov AX,@data ;Mueve en AX la direccion donde
;esta el segmento de datos
mov DS,AX ;Mueve el contenido de AX a DS

mov AH, BYTE1 ;Mueve los datos desde la memoria


mov BL, BYTE2 ;hacia el microprocesador
mov CH, BYTE3
mov DL, BYTE4
mov BYTE5, AH ;Mueve los datos desde el micro hasta
mov BYTE6, BL ; la memoria
mov BYTE7, CH
mov BYTE8, DL
FIN:
mov ax, 4c00h ;fin del programa
int 21h
end

6) En la ventana original source code resalte (haga clic en) en el primero de los datos declarados
BYTE1.
7) Relacione la informacin de la Tabla 1 y la ventana emulator.
8) Resalte cada uno de los datos declarados en el cdigo fuente y complete la informacin de la
Tabla 1.
Determine la direccin de inicio y final del segmento de datos, tanto en formato absoluto como
en segmento:desplazamiento: __________________________________________________________
____________________________________________________________________________________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
3

DIRECCION DATO EN MEMORIA


TIPO DE DATO
SEGMENT:DESPLAZ ABSOLUTA CODIGO BINARIO
0720:0000 07200 7Ah

BYTE

Tabla 1. Segmento de datos.


9) Resalte la primera lnea de instruccin del segmento de cdigo.
10) Relacione la informacin de la Tabla 2 y la ventana emulator.
11) Resalte cada una de las lneas de instruccin del segmento de cdigo y complete la informacin
que hace falta en la Tabla 2.
Determine la direccin de inicio y final del segmento de cdigo, tanto en formato absoluto como
en segmento:desplazamiento: __________________________________________________________
____________________________________________________________________________________
12) Para ubicar el segmento de PILA escribir en la direccin SEGMENTO:DESPLAZAMIENTO el
dato 0710:0100.
13) Suba unas cuantas direcciones y observar que contienen los datos (cdigo binario) 54h. Anote
en la Tabla 3 la direccin del primero y del ltimo dato que contenga 54h. Estos demarcan el
segmento de PILA o STACK.
14) Presione el botn reload.
15) Anote en la Tabla 4 el contenido de los registros del microprocesador.
16) Ejecute la primera lnea de instruccin verificando que los datos son transferidos al
microprocesador.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
4

SEGMENTO DE CDIGO
Instrucciones en
DIRECCIONES DE
lenguaje
MEMORIA
mquina. Instrucciones en
Instrucciones
Cdigos lenguaje
desensambladas
binarios ensamblador
SEGM:DESP ABSOLUTA almacenados en
memoria
0721:0000 07210 B8
0721:0001 07211 20 MOV AX,00720h mov AX,@data
0721:0002 07212 07
MOV DS,AX mov DS,AX
0721:0005 07215 8A
0721:0006 07216 26
0721:0007 07217 00
0721:0008 07218 00
0721:0009 07219 8A
0721:000A 0721A 1E
MOV BL,[00001h] mov BL, BYTE2
0721:000B 0721B 01
0721:000C 0721C 00

07221 8A
07222 16
07223 03
07224 00
0721:0015 07225 88
0721:0016 07226 26
MOV [00004h],AH mov BYTE5, AH
0721:0017 07227 04
0721:0018 07228 00
0721:0019 07229 88
0721:001A 0722A 1E
mov BYTE6, BL
0721:001B 0722B 05
0721:001C 0722C 00

MOV [00006h],CH mov BYTE7, CH

MOV [00007h],DL

0721:0025 07235 B8
0721:0026 07236 00 MOV AX,4C00h mov ax, 4c00h
0721:0027 07237 4C
INT 021h

Tabla 2. Segmento de cdigo.


DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
5

DIRECCION
PILA O STACK
SEGMENT:DESPLAZ ABSOLUTA
PRIMER DATO
ULTIMO DATO
Tabla 3. Segmento de PILA.

CS: IP: SS: SP: DS: DX:


BP: ES: BX:
SI:
AX: BX: CX: DI:
Tabla 4. Contenido de los registros al inicio del cdigo.
17) Ejecute la siguiente lnea de instruccin corroborando la transferencia de datos.
18) Copie nuevamente el contenido de los registros en la Tabla 5.
CS: IP: SS: SP: DS: DX:
BP: ES: BX:
SI:
AX: BX: CX: DI:
Tabla 5. Contenido de los registros durante la ejecucin del programa.
19) Abra la ventana variables y verifique que todas las variables declaradas son visibles.
20) Contine ejecutando paso a paso hasta que los primeros cuatro datos hayan sido transferidos a
sus respectivos registros dentro del microprocesador.
21) Ejecute las siguientes cuatro instrucciones verificando los cambios en las variables declaradas.
22) Cierre la ventana variables
23) Recargue el programa.
24) En la ventana emulator presione el botn aux y ah selecciones la opcin memory. Debe
observar una imagen similar a la de la Figura 1.
25) En el espacio de la 1 direccin escriba el valor 0720:0000 para observar el segmento de datos.
26) Ejecute nuevamente el programa paso a paso y verifique como los datos se van moviendo.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
6

Figura 1. Ventana de memoria Random Access Memory


27) Digite el segundo programa
28) Emule el programa, pero no lo ejecute.

SEGUNDO PROGRAMA
.model small
.stack
.data
BYTE1 DB 0FFh
BYTE2 DB 0AAh
BYTE3 DB 18h
BYTE4 DB 96h
.code
mov AX,@data ;Mueve en AX la direccion donde esta el
mov DS,AX ;Mueve el contenido de AX a DS
mov DX, 110 ;Indica a que puerto se enviaran los datos

mov AL, BYTE1 ;carga en AL el dato BYTE1


out DX, AL ;envia el dato en AL al puerto 110

mov AL, BYTE2 ;carga en AL el dato BYTE2


out DX, AL ;envia el dato en AL al puerto 110

mov AL, BYTE3 ;carga en AL el dato BYTE3


DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
7

out DX, AL ;envia el dato en AL al puerto 110

mov AL, BYTE4 ;carga en AL el dato BYTE4


out DX, AL ;envia el dato en AL al puerto 110
FIN:
mov ax, 4c00h ;fin del programa
int 21h
end

29) En la ventana emulator ubique virtual devices y seleccione la opcin simple.exe. Debe
observar una ventana como la que se muestra en la Figura 2.
La direccin de este puerto es 110 (decimal) y es de 8 bits.

Figura 2. Dispositivo virtual simple io test.


30) Ejecute paso a paso el programa, verificando que todos los datos son enviados al puerto 110.
31) nase con otra persona para realizar los siguientes pasos.
32) Edite el programa para que el dato que se almacena en DX sea 0378h en lugar de 110.
33) Utilizando el cable correcto conecte el puerto paralelo de la computadora a los LEDS ya sea del
mdulo IDL-800 Digital Lab o de la tarjeta con switches y leds, de forma que el MSB (etiquetado
D7) se conecte con el primer LED a la izquierda y el cable GND con el GND del mdulo o de la
tarjeta.
34) Encienda el mdulo Observa algn cdigo binario? Cul? ________________
35) Compile el programa nuevamente, pero en la ventana assembler status presione el botn
external y seleccione la opcin debug.exe. Debe observar en una ventana la consola de DOS y
el Prompt parpadeando.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
8

36) Digite R y presione ENTER.


37) Compare los datos que observa con los que tom en la Tabla 4.
NOTA: Para ejecutar el programa paso a paso digite P.
38) Ejecute las primeras dos instrucciones y compare el resultado con la Tabla 5.
39) Ejecute los siguientes pasos hasta enviar el primer dato.
Corresponde el dato que observa en los LEDS con el dato enviado? _________
40) Ejecute el resto de programa verificando que los datos son enviados correctamente.
41) Pida a su docente de laboratorio que verifique que el programa se ejecuta correctamente.
42) Cierre las ventanas, apague la PC y deje ordenado su puesto de trabajo.

Anlisis de Resultados

1. Cuando complet la Tabla 1 el primer dato declarado era 7Ah y al revisar la memoria encontr
tambin 7Ah, pero el segundo dato declarado era 99 y en la memoria no encontr el mismo dato
Por qu ocurre eso?
2. En la Tabla 2 la primera instruccin en lenguaje ensamblador es MOV AX, @DATA pero en las
instrucciones desensambladas se representa como MOV AX, 00720 Por qu ocurre eso?
3. En la Tabla 2 los datos almacenados en memoria para la primera instruccin son los siguientes:
B8, 20 y 07. cmo se relacionan estos cdigos y la lnea de instruccin desensamblada MOV
AX, 00720
4. Al comparar la tercera lnea de instruccin MOV AH, BYTE1 con la respectiva lnea
desensamblada, se sustituye la palabra BYTE1 por un dato entre corchetes Qu significa este
dato?
5. En la Tabla 2 la primera lnea de la columna SEGMENTO:DESPLAZAMIENTO contiene
0721:0000 Cmo se relaciona esta informacin con el contenido de CS:IP en la Tabla 4?
6. En la Tabla 1 la primera lnea de la columna SEGMENTO:DESPLAZAMIENTO contiene
0720:0000 Cmo se relaciona esta informacin con el contenido de DS:DX en la Tabla 4?
7. Cmo se relaciona la informacin en la Tabla 3 con el contenido de SS:SP en la Tabla 4.
8. En el segundo programa por qu necesit cargar el dato 110 en el registro DX para enviar datos
al puerto?
9. Cuando modific el segundo programa por qu fue necesario cambiar el dato en DX de 110 a
0378h?
10. Dibuje un mapa de memoria del micro 8086 tanto en forma absoluta como en
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
9

SEGMENTO:DESPLAZAMIENTO. Inicie el mapa en la direccin 00000h (0000:0000h) hasta la


0FFFFFh (FFFF:FFFFh) y en el mapa ubique cada uno de los segmentos del primer programa.

Investigacin Complementaria

1) Esta actividad debe desarrollarse posteriormente a la ejecucin de la gua de laboratorio y tiene


por objetivo complementar y ampliar la temtica desarrollada teniendo en mente las actividades
futuras.
2) Investigue:
Qu son los modos de direccionamiento?
Cuntos y cules modos de direccionamiento tiene el microprocesador 8086?
Qu modos de direccionamiento poseen las instrucciones MOV y OUT?

Bibliografa

Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y 80486.
Arquitectura, programacin e interfaces, 3 edicin Prentice Hall, Mxico DF, 1997 Biblioteca
UDB 001.6404 B847 1997
UNIVERSIDAD NACIONAL DE INGENIERIA
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I 1

TERCER LABORATORIO

INSTRUCCIONES LGICAS Y EL REGISTRO DE BANDERAS.

Objetivos especficos

Examinar detenidamente la manera en que se ejecutan algunas instrucciones lgicas


Analizar la manera en que se modifica el registro de banderas, dependiendo del tipo de
operacin y los datos que operen.
Identificar las caractersticas propias de las mscaras que se utilizan junto con las instrucciones
lgicas.

Materiales y equipo

1 Computadora con el programa EMU8086.

Procedimiento
1) Abra el EMU 8086 y digite el PRIMER PROGRAMA

PRIMER PROGRAMA
.model small
.stack
.data
dato1 db 9Ah ; Dato 8 bits
dato2 dw 2CC2h ; Dato 16 bits
mascara1 db 0F0h ; Mscara 8 bits
mascara2 dw 0FF0h ; Mscara 16 bits
.code
mov ax,@data
mov ds,ax
mov dl, dato1 ;primera parte
mov ah, mascara1

and dl, ah

mov cx, dato2 ; segunda parte


mov bx, mascara2
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
2

and cx, bx

and cx, cx
mov ax, 4c00h ;fin del programa
int 21h
END

2) Compile y ejecute el programa paso a paso, monitoreando el registro de banderas (FLAGS) luego de
cada operacin AND. Anote los datos con los que se opera, los resultados y las banderas que se
activan.

____________________________________________________________________________________

____________________________________________________________________________________

3) Digite el SEGUNDO PROGRAMA, que est dividido en dos partes.

4) Ejecute paso a paso el primer bloque. Anote los datos con los que se realizan las operaciones y los
resultados de las mismas, los registros que intervienen en el proceso y el estado de las banderas en
cada paso del proceso.

____________________________________________________________________________________

____________________________________________________________________________________

SEGUNDO PROGRAMA

.model small
.stack
.data
.code
mov ax,@data
mov ds,ax
;------primer bloque------
mov dl, 1Ah
mov ax, 2CC2h
xor dl, ah
xor dl, 0FFh
;-----Fin del primer bloque----
;-----inicio segundo bloque----
mov dl, 1Ah
mov ax, 2CC2h
xor dl, ah
not dl
;-----Fin del segundo bloque---
mov ax, 4c00h ;fin del programa
int 21h
End
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
3

5) Ejecute ahora el segundo bloque y anote los datos con los que se opera, los resultados y las banderas
que se activan durante el proceso.

____________________________________________________________________________________

____________________________________________________________________________________

6) Como se ha visto en los programas anteriores, algunas de las banderas se activan del resultado de
una instruccin. Pero tambin algunas banderas se pueden activar o desactivar mediante
instrucciones especficas, sin tomar en cuenta el resultado de alguna operacin. Como un ejemplo
inserte la siguiente modificacin en el SEGUNDO PROGRAMA.

mov dl, 1Ah


mov ax, 2CC2h
xor dl, ah
xor dl, 0FFh
stc ;Activa la bandera C
std ;Activa la bandera D
cli ;Desactiva la bandera I
mov dl, 1Ah
mov ax, 2CC2h
clc ;Desactiva la bandera C
cld ;Desactiva la bandera D
sti ;Activa la bandera I
xor dl, ah

7) Ejecute paso a paso el programa monitoreando simultneamente el estado de las banderas, note
como se activan o desactivan.

8) Digite el TERCER PROGRAMA.

9) Ejecute solo las primeras cuatro instrucciones, monitoreando las banderas Cules se activaron?, cul
fue el resultado de la operacin? cmo interpreta el resultado?

____________________________________________________________________________________

____________________________________________________________________________________

10) Ejecute hasta la instruccin TEST y conteste otra vez las preguntas del paso 9 del procedimiento.

____________________________________________________________________________________

____________________________________________________________________________________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
4

TERCER PROGRAMA
.model small
.stack
.data
.code

mov ax,@data
mov ds,ax

mov ah, 0B9h ;En binario 1011_1001

and ah, 40h ;Mascara 0100_0000


;Si Z=1 implica que D6=0

or ah, 01 ;borra las banderas activas

mov ah, 0B9h

test ah, 40h

mov ax, 4c00h ;fin del programa


int 21h

End

Anlisis de Resultados
a) Primer programa.
1. Qu objetivos se buscan al usar la mascara1 (F0h) con las tres diferentes instrucciones lgicas?
2. Cuando se ejecuta la primera instruccin AND el bit 7 del resultado termina en estado alto y se
activa la bandera S, en la segunda instruccin AND tambin termina en alto, pero esta vez no se
activa la bandera por qu?
3. Modifique las lneas que contienen la instruccin AND, sustituyndola por la instruccin OR y
Anote los datos con los que se opera, los resultados y las banderas que se activan.
4. Modifique las lneas que contienen la instruccin AND, sustituyndola por la instruccin XOR y
Anote los datos con los que se opera, los resultados y las banderas que se activan.
5. En el programa se declaran datos para hacer las operaciones dnde se guardan estos datos?

b) Segundo programa.
1. Cuando se ejecutan el primer bloque del programa el resultado se almacena en DL, lo mismo
ocurre con el segundo bloque; los dos resultados son idnticos, pero el estado de las banderas no
lo es por qu?
2. Al modificar el programa, tanto los resultados como las banderas terminaron en distintos estados
cules fueron los cambios especficos que observo?
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
5

c) Tercer programa.
1. Cul es la diferencia fundamental que noto a comparar las instrucciones AND y TEST?
2. Qu relacin existe entre los bit que deseamos probar y el valor especfico de la mscara
seleccionada?

Investigacin Complementaria

En el programa se declaran algunos datos que sern operados dnde se almacenan estos
datos?
Escriba un programa que dado un dato almacenado en AL invierta el estado de los bits
impares desde el D5 hasta el D1, borre los bits pares desde el D6 hasta el D2 y coloque
en 1 los bits D7 y D0

Bibliografa

Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y 80486.
Arquitectura, programacin e interfaces, tercera edicin Prentice Hall, MxicoDF,1997 Biblioteca
UDB 001.6404 B847 1997.

Puede consultar el material en lnea del EMU8086 sobre los temas de esta actividad. Se
recomiendan: Arithmetic and logic instructions :
http://www.emu8086.com/assembly_language_tutorial_assembler_reference/asm_tutorial_06.html
UNIVERSIDAD NACIONAL DE INGENIERIA
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I 1

CUARTO LABORATORIO

INSTRUCCIONES ARITMTICAS.

Objetivos especficos

Observar el uso de algunas instrucciones aritmticas y las banderas que son afectadas.
Utilizar correctamente los registros del microprocesador al realizar operaciones aritmticas, tanto
de 8 bits como de 16 bits.
Utilizar el dispositivo virtual Led_Display del EMU8086 para ver mejor los resultados de las
operaciones.

Materiales y equipo

1 Computadora con el programa EMU8086.

Procedimiento

1) Abra el EMU8086

2) Analice el PRIMER PROGRAMA, note que al inicio se declaran los datos.


Con qu datos se realizarn las operaciones y cules sern los resultados, tanto en decimal
como en hexadecimal? Dnde se almacena el resultado al final de las operaciones?

_________________________________________________________________________________

_________________________________________________________________________________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
2

PRIMER PROGRAMA
.model small
.stack
.data

byte1 equ 125


byte2 equ 150
word1 equ 20A3h
word2 equ 5938h

.code

mov ax,@data
mov ds,ax
;---------primer bloque----------------
;--------------------------------------------
mov dx,199 ;carga la direccin del puerto donde est el display
mov ax,0 ; sacamos un 0 por el puerto para limpiarlo
out dx,ax
mov al, byte1 ;suma de 2 nmeros de 1 byte
add al, byte2
mov [011Eh], al ;guarda el resultado
mov al,[011Eh] ;movemos a AL el resultado de la suma
out dx,al; saca el resultado por el puerto para verlo en el display
;en formato decimal
;-----Fin del primer bloque----------
;--------------------------------------------
;------Segundo bloque----------------
mov ax, word1 ;suma de 2 numeros de 2 byte
add ax, word2
mov [011Fh], ax ; guarda el resultado
mov dx,199 ;carga la direccion del puerto donde est el display
mov ax,[011Fh] ;movemos a AX el resultado de la suma
out dx,ax; saca el resultado por el puerto para verlo en el display
; en formato decimal
;--------Fin del segundo bloque------------
mov ax,4c00H ;termina el programa
int 21h
End

3) Digite y emule el programa.

4) Antes de ejecutar el programa tome nota del contenido almacenado en las direcciones
011Eh, 011Fh y 0120h en la Tabla 1, tambin del estado de las banderas y seleccione del
men VIRTUAL DEVICES la opcin LED_DISPLAY.EXE
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
3

5) Ejecute paso a paso el programa, anotando la informacin solicitada en la Tabla 1,


observando el resultado de las operaciones y el estado de las banderas

DIRECCIONES 0720:Desplazamiento BANDERAS


MOMENTO
011Eh 011Fh 0120h Display O S Z A P C
Inicio
Al final del primer bloque
Al final del segundo bloque
Tabla 1

Concuerdan los resultados con lo que usted esperaba? _______

6) Cambie los datos con los siguientes valores:

byte1 equ 9Dh


byte2 equ 83h
word1 equ 5938
word2 equ -5938

7) Corra a pasos el programa observando la ejecucin de cada instruccin y el estado de las


banderas.
Cul fue el resultado de las operaciones?, Cmo reaccionaron las banderas? y por qu as y no
de otra manera?

____________________________________________________________________________________

____________________________________________________________________________________

8) Analice el SEGUNDO PROGRAMAqu registros estn involucrados en el proceso? qu


datos se van a operar? dnde se almacenar el resultado? (vea el flujograma)
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
4

SEGUNDO PROGRAMA
.model small
.stack
.data
.code
mov ax,@data
mov ds,ax
mov ax,0
mov dx,199
out dx,ax
mov ah, 0AAh ;multiplica 2 nmeros de 1 byte
mov al, 0FFh
mov cl, 06 ;dato a modificar
mul cl
mov [011Eh],ax
mov ax,[011Eh]
mov dx,199
out dx,ax
mov ax,4c00H ;termina el programa
int 21h
End

9) Digite y emule el SEGUNDO PROGRAMA

10) Ejecute paso a paso, analizando el proceso. Anote los resultados en la primera fila de la
Tabla 3.

Coinciden los resultados con lo que esperaba?


____________________________________________________________________________________

Instruccin Dato Multiplicando Multiplicador Producto

06
MUL
-06

06
IMUL
-06

Tabla3

11) Modifique el dato de CL colocando -06 y ejecute nuevamente el programa. Anote los
resultados en la Tabla 3.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
5

12) Cambien la instruccin MUL por IMUL y el dato -06 por 06.

13) Ejecute el programa y anote los resultados.

14) Cambie el dato por -06, ejecute nuevamente y anote los resultados

15) Analice el TERCER PROGRAMAqu registros estn involucrados en el proceso? qu


datos se van a operar? dnde se almacenar el resultado? (vea el flujograma)

16) Realice el mismo procedimiento del SEGUNDO PROGRAMA, pero ahora el dato que ser
cambiado es 05 y la operacin DIV por IDIV. Anote sus resultados en la Tabla 4.

TERCER PROGRAMA
.model small
.stack
.data
.code
mov ax,@data
mov ds,ax
mov ax,0
mov al,123 ;divide 2 numeros de 1 byte
mov cl, 05 ;dato a modificar
div cl
mov [011Eh],al
mov ax,0
mov dx,199
out dx,ax
mov al,[011Eh]
out dx,al
mov ax,4c00H ;termina el programa
int 21h
End

Instruccin Dato Dividendo Divisor Cociente Residuo

05
DIV
-05

05

IDIV
-05

Tabla 4
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
6

17) Cambie el dato por 00h y ejecute el programa qu ocurri? ______

Anlisis de Resultados

a) Primer programa
1. Tomando en cuenta los datos particulares de cada operacin explique el porqu de la activacin
o desactivacin de las banderas O, S, Z, C y A.
2. Modifique el cdigo fuente sustituyendo las instrucciones ADD por ADC y emule nuevamente el
programa, repita el paso 4 y 5 y compare con los resultados obtenidos con los obtenidos con
ADD Qu resultados se modificaron?, qu parte no?, por qu cree que se dieron esos cambios
especficos en los resultados?

b) Segundo programa
1. Cmo se especifica en una instruccin de multiplicacin que se desea trabajar con nmeros de
un byte?
2. En qu registros se almacenan los datos y el resultado de una multiplicacin de un byte?
3. Explique porque los resultados de las operaciones cambiaron al usar IMUL en lugar de MUL.
Utilice clculos para fundamentar su explicacin.

c) Tercer programa
1. Cmo se especifica en una instruccin de divisin que se desea trabajar con nmeros de un
byte?
2. En qu registros se almacenan los datos y el resultado de una divisin de un byte?
3. Explique porque los resultados de las operaciones cambiaron al usar IDIV en lugar de DIV. Utilice
clculos para fundamentar su explicacin.
4. Por qu la ltima modificacin del programa gener un error en la ejecucin?
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
7

Investigacin Complementaria

Investigue las instrucciones para la resta SUB y SBB


Compare el funcionamiento de la directiva EQU con DB.
Investigue como se puede realizar una multiplicacin de dos nmeros de dos bytes cada
uno.
Investigue como se puede realizar una divisin de dos nmeros de dos bytes cada uno.
Disee dos flujogramas que representen el proceso para sumar dos nmeros de 4 bytes
cada uno, en el primero se trabajar con registros de 16 bits y en el segundo de 8 bits.

Bibliografa

Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y 80486.
Arquitectura, programacin e interfaces, tercera Edicin Prentice Hall, Mxico DF, 1997.
Biblioteca UDB 001.6404 B847 1997

Godfrey, T. Lenguaje Ensamblador para Microcomputadoras IBM : Para Principiantes y Avanzados,


Primera edicin Prentice Hall, Mxico DF, 1991
Biblioteca UDB 005.136 G577 1991

Puede consultar el material en lnea del EMU8086 sobre los temas de esta actividad. Se
recomiendan: Arithmetic and logic instructions ,
http://www.emu8086.com/assembly_language_tutorial_assembler_reference/asm_tutorial_06.html
UNIVERSIDAD NACIONAL DE INGENIERIA
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I 1
QUINTO LABORATORIO

INSTRUCCIONES DE CONTROL DE FLUJO Y USOS DE LA


PILA.

Objetivos especficos

Analizar el uso de algunas instrucciones de control de flujo, haciendo nfasis en las condiciones
(estado de las banderas) que se necesitan para realizar o no el salto.
Aplicar algunas instrucciones de control de flujo en la resolucin de problemas simples como la
realizacin de un lazo repetitivo y la comparacin entre dos datos.
Mostrar la manera de guardar y extraer informacin de la PILA.
Usar la PILA como un dispositivo de almacenamiento temporal de datos.
Analizar la relacin que hay entre la PILA y el registro puntero de pila SP.

Materiales y equipo

1 Computadora con el programa EMU8086.

Procedimiento

1) Ejecute el programa EMU8086.

2) Analice el PRIMER PROGRAMA, ayudado del flujo-grama y los comentarios que explican su
funcionamiento.

3) Digite y emule el programa. Antes de ejecutarlo copie, lnea a lnea, el programa desensamblado en
la columna respectiva as como se muestra en el ejemplo.
Cules son las direcciones de las etiquetas INICIO y BUCLE?

____________________________________________________________________________________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
2

PRIMER PROGRAMA

Programa
Cdigo Fuente
desensamblado

.model small
.stack
.data
mem db 10 DUP ('x') ;Inicializa 10 .
;espacios de .
;memoria con .
;caracter 78h .
.
.code .
inicio: .
.
mov ax, @DATA MOV AX,00720H
mov ds, ax MOV DS,AX
mov al,0FFh ;Dato MOV AL,0FFH
mov bx,000Ah;Contador
bucle:

mov mem[bx],al ;copia dato


;en mem
dec bx ;Decrementa BX

jnz BUCLE ;Repite si la


;bandera Z= 0

mov ax,4C00h
int 21h
end
4) Localice la ubicacin (direcciones) de la cadena mem. Anote las direcciones y su contenido en la
Tabla 1.

5) Ejecute paso a paso monitoreando los cambios que se dan en mem. Al final anote el contenido final
en Tabla 1.

Momento DIRECCIONES de mem


Direccin
Antes
Despus
Tabla 1
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
3

6) Ejecute nuevamente el programa, contando las veces que se ejecuta la instruccin mov mem[bx],
al y monitoreando el registro de banderas, sobre todo antes y despus de la operacin de
decremento
Cuntas veces se realiz la instruccin MOV? ______
Qu caus el rompimiento del lazo de repeticin? _______________________

7) Modifique el cdigo de manera que los cambios solo afecten a los elementos de la cadena mem.
Cuando lo logre notifquelo a su docente de laboratorio.

8) Emule el SEGUNDO PROGRAMAtomando nota del contenido inicial de las cadenas fuente y
destino y el intervalo de direcciones donde estn almacenadas.

____________________________________________________________________________________

____________________________________________________________________________________

9) Ejecute paso a paso observando las modificaciones en las cadenas y las banderas. No pierda de vista
el registro contador CX.

10) Anote el contenido final de la cadena destino.

____________________________________________________________________________________

____________________________________________________________________________________

11) Ejecute nuevamente el programa y cuente las veces que se almacenan datos en la cadena destino
_______
Cul es la instruccin que hace el salto condicional? _________
Qu caus el rompimiento del lazo de repeticin? _______________________

SEGUNDO PROGRAMA

Cdigo Fuente

.model small
.stack

.data
fuente db 48,49,50,51,52,53,54,55,56,57
destino db 10 DUP (4Dh) ;destino 4Dh = 'M'

.code

inicio:
mov ax, @DATA
mov ds, ax
mov cx,10 ;Contador
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
4

xor si,si ;ndice


INICIO
BUCLE:
mov al,fuente[si] ;Lee
CX = 0010

mov [destino+si],al ;Escribe


SI = SI XOR SI

inc si

AL = Fuente[SI] loop BUCLE ;Repite si CX no es 00h


;El decremento de CX esta
Destino[SI] = AL ;implcito en la instruccin
FIN:
mov ax,4C00H
SI = SI + 1
int 21h

CX = CX - 1
end

NO
CX = 00h

SI

FIN
12) Ahora analice el TERCER PROGRAMA, note que emplea instrucciones que cargan y extraen datos de
la PILA.

13) Digite y guarde su programa.

14) Cierre el emulador.

15) Active nuevamente el emulador. Esto se hizo para borrar la memoria del emulador y que no
interfieran los resultados anteriores con el nuevo programa.

16) Cargue el tercer programa y proceda a emularlo.

17) Visualice el contenido de la PILA (STACK) dando clic en el botn stack , le aparecer una ventana
como la mostrada en la Figura 5.1 (el simbolo > indica cual es exactamente la localidad que se
esta apuntando)

Coincide la direccin indicada en la PILA con la combinacin Segmento-Desplazamiento de


SS:SP? ______
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
5

Figura 5.1

18) vea tambin el estado de las banderas.

19) Ejecute las primeras cuatro instrucciones.

20) Ejecute la quinta instruccin qu cambios observ en los registros y la PILA?

____________________________________________________________________________________

21) Ejecute la sexta instruccin qu cambios observ?

____________________________________________________________________________________

22) Las tres instrucciones siguientes realizarn una operacin aritmtica

Cul ser el resultado de la operacin? ______________


Cul ser el estado de las banderas al ejecutarse la operacin? ____________
En qu direccin se almacena el resultado? ________

23) Ejecute la siguiente instruccin (pushf)


Qu dato se almacen en la PILA?_______
Cambi SP? ______

24) Ejecute hasta antes de hacer la comparacin


Cul ser el estado de las banderas? __________________________

25) Verifique su hiptesis realizando la instruccin.


DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
6

TERCER PROGRAMA

Cdigo Fuente

.model small
.stack
.data

dato1 db 0FFh, 0FFh


dato2 dB 0FFh, 0FFh
resul db 00, 00, 00

.code

inicio:
mov ax, @DATA
mov ds, ax
xor si,si ;Inicializa registro

clc ;C = 0 ;Inicializa banderas

pushf ;guarda banderas en la PILA

BUCLE: popf ;saca banderas de la PILA

mov al,dato1[si] ;carga dato en AL

adc al,dato2[si] ;suma al mas dato2

mov resul[si],al ;guarda en resultado

pushf

inc si ;incrementa SI
cmp si, 02
jc BUCLE ;salte si C = 1
popf ;saca banderas de la PILA
mov al,0 ;Borra AL
adc al,0 ;Carga el acarreo en AL
mov resul[si],al ;ltimo byte del resultado

mov ax,4C00h
int 21h

end
26) Antes de ejecutar JC Se dar el salto o no? __________
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
7

27) Verifique su hiptesis realizando la instruccin.


Se almacenaron datos en la PILA al ejecutar el salto? _______

28) Ahora se repetir el bloque aritmtico. Responda nuevamente a las preguntas del punto 22, para la
situacin actual

____________________________________________________________________________________

____________________________________________________________________________________

29) Compruebe su prediccin.

30) Ejecute la instruccin PUSHF qu dato envo a la PILA? _________

31) El siguiente bloque involucra al salto condicional otra vez saltar de nuevo? Por qu?
____________________________________________________________________________________

____________________________________________________________________________________

32) Comprubelo.

33) Contine el proceso hasta el final


Cul es el resultado de la operacin? ________________

Qu proceso realiza el programa? _____________________

Anlisis de Resultados

a) Primer programa.

1. Cuntos datos contiene la cadena Mem?


2. Qu indica la directiva DUP?
3. Dnde se defini el nmero de veces que se ejecutara el lazo?
4. Si en el cdigo inicial se cambia la segunda instruccin (mov bx,000Ah) para cargar un 0000h
se ejecutar el salto o no?

b) Segundo programa.

1. Cul es la condicin que se evala para realizar el salto o no?


2. Si se cambia el dato inicial de CX por 00h qu ocurrira?

c) Tercer programa.
1. Qu funcin cumple la instruccin CLC?
2. Qu informacin se gurda en la PILA al ejecutar PUSHF?
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
8

3. Qu relacin hay entre los datos que se al maceran en la PILA y el estado de las banderas,
durante la ejecucin del programa?
4. Por qu es importante para el proceso del programa almacenar datos en la PILA?
5. Qu relacin entre el dato en SP y las instrucciones PUSHF y POPF?
6. Qu ocurrira si las instrucciones PUSHF y POPF del programa se cambian por PUSH y POP
respectivamente?
7. Cmo se relacionan los datos que se almacenan en la PILA y el estado de las banderas? Explique
por lo menos un ejemplo que observo en su programa.
8. Al realizar un salto se almacena o extrae informacin de la PILA?

Investigacin Complementaria

Modifique el tercer programa para funcionar con LOOP en lugar de JC


Usando las capacidades del 8086 escriba un programa que realice la misma funcin del
tercer programa, pero sin saltos.

Bibliografa

Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y 80486.
Arquitectura, programacin e interfaces, tercera edicin Prentice Hall, Mxico DF, 1997.
Biblioteca UDB 001.6404 B847 1997

Puede consultar el material en lnea del EMU8086 sobre los temas de esta actividad. Se
recomiendan:Program flow control
http://www.emu8086.com/assembly_language_tutorial_assembler_reference/asm_tutorial_07.html
UNIVERSIDAD NACIONAL DE INGENIERIA
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I 1

SEXTO LABORATORIO

EL MACROENSAMBLADOR.

Objetivos especficos

Realizar correctamente los procesos de compilacin y enlazamiento de un cdigo fuente ASM.


Ejecutar correctamente un archivo EXE desde la consola de DOS.
Aplicar las opciones bsicas de la Interrupcin 21h del DOS (01, 02 y 09).
Aplicar los conocimientos adquiridos en el perodo anterior al utilizar una nueva herramienta.

Materiales y equipo

1 Computadora con utilidades MASM.exe y LINK.exe


Disco de 3.5o memoria USB para guardar los programas que desarrolle en esta sesin ya que los
utilizar en la gua 8.

Procedimiento

1) Abra una ventana de DOS, haciendo clic en Inicio, Ejecutar y digitando la palabra cmd.

2) Se abrir una ventana similar a la mostrada en la Figura 1. Esta apuntar a un directorio que puede
variar de mquina a mquina, en el caso de la Figura apunta a C:\WINDOWS, sea cual sea el
directorio al que apunte debemos llegar al subdirectorio donde est el programa MASM y LINK en el
caso de las mquinas del laboratorio de microprocesadores estn en la carpeta llamada MASM50
para ello use el comando CD seguido del directorio que necesite, en este caso digite:
CD C:\MASM50 (\ = ALT+92)

Figura 1.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
2

3) Digite el comando DIR y verifique que en el subdirectorio se encuentran los archivos: MASM.EXE y
LINK.EXE, que son imprescindibles para desarrollar esta prctica. Si no estn avise inmediatamente a
su docente de laboratorio.

4) Active el editor de texto del DOS usando el comando EDIT

5) Escriba el PRIMER PROGRAMA y al terminar gurdelo y colquelo como nombre su nmero de


carnet y la extensin .ASM (ejemplo BB05555.ASM)

PRIMER PROGRAMA
.MODEL SMALL
.CODE
INICIO:
;------------------------------------------------
;IMPRESION DE UN CARACTER
;------------------------------------------------
mov dl, 01h ;Almacena carcter ASCII
mov ah, 02h ;Dato necesario para la INT 21h
int 21h ;Imprime el carcter en DL

mov ax,4C00h
int 21h

.STACK

END INICIO ;Fin del archivo

6) En el men archivo seleccione salir para regresar al ambiente DOS.

7) Usando el comando DIR verifique la existencia de su archivo y anote cuantos bytes contiene.
_______

8) Ahora se va a convertir el cdigo fuente (ASM) en objeto (OBJ) usando el compilador (archivo
MASM), digitando MASM seguido del nombre del programa SIN LA EXTENSION .ASM ejemplo:
MASM BB05555

9) Observar un mensaje como el siguiente :

Object filename [BB05555.OBJ]:


Le indica que el nombre del archivo objeto ser igual al del fuente, por defecto, pero si desea otro
nombre puede escribirlo ahora. Por el momento deje el nombre como el del cdigo fuente presionando
ENTER.

10) A continuacin aparece otro mensaje:

Source listing [NUL.LST]:


Le pregunta si desea crear el archivo de LISTADO, que contiene tanto el cdigo fuente como cdigo
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
3

objeto; puede ser de gran utilidad para localizar errores en el cdigo fuente. Para crearlo digite un
nombre para el archivo (normalmente el mismo del fuente, pero puede ser otro) sin extensin. Por el
momento solo presione ENTER, ms adelante se retomar este punto en el procedimiento.

11) Observar un nuevo mensaje:

Cross-reference [NUL.CRF]:
Le pregunta si desea crear el archivo de REFERENCIAS CRUZADAS, que contiene los smbolos usados en
programa, es muy til para analizar programas muy grandes y que se van a combinar en un nico
archivo EXE. Proceda exactamente como en el punto anterior.

12) Para terminar se le indica si se han encontrado errores en el cdigo, de no ser as se ha terminado el
proceso de compilacin.

13) Para comprobarlo use el comando DIR para buscar los archivos con el nombre su nmero de carn

14) Anote el nombre y tamao de cada uno


____________________________________________________________________________________
____________________________________________________________________________________

Son ms o menos del mismo tamao? ________

15) Ahora proceder a convertir el cdigo objeto (OBJ) en auto ejecutable (EXE) usando el enlazador
(archivo LINK), escribiendo la lnea: LINK seguido del nombre del programa SIN LA EXTENSION
.OBJ ejemplo: LINK BB05555

16) Observar un mensaje como el siguiente:

Run File [BB05555.EXE]:

As como al compilar, le indica que el nombre por defecto del archivo ejecutable ser el mismo que el
objeto, usted puede cambiarlo si lo desea. Por el momento presione solo ENTER.

17) A continuacin aparece otro mensaje:

List File [NUL.MAP]:


Consulta si desea crear el archivo MAPA que indica la ubicacin relativa y el tamao de cada segmento,
as como mensajes si hay errores. Por el momento solo presione ENTER.

18) Ahora ver otro mensaje:


Libraries [.LIB]:
Consulta si va a utilizar un archivo librera para enlazarlo con el programa. Por el momento solo presione
ENTER.

19) En este momento debe tener tres archivos que tienen como nombre su nmero de carnet con
extensiones ASM, OBJ y EXE. Verifique su existencia con el comando DIR y compare el tamao de
cada archivo.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
4

20) Para comprobar que el programa funciona, proceda a ejecutarlo escribiendo: el nombre del
programa en MS-DOS sin la extensin .EXE

21) Deber ver impreso el carcter ASCII 01h que corresponde a la carita feliz.

22) Abra el cdigo fuente (el archivo con extensin .asm) y cambie el dato almacenado en el primer
bloque por el valor ASCII de la inicial de su primer apellido, luego guarde los cambios y regrese al
ambiente DOS.

23) Tomando como gua los pasos anteriores (del 8 en adelante) compile y enlace el nuevo cdigo
fuente.

24) Ejecute el archivo ejecutable para verificar su buen funcionamiento. Si tiene problemas consultar con
su docente de laboratorio.

25) Cuando se detectan errores en el cdigo fuente se puede usar el archivo .LST para corregir el
problema. Para observar el proceso edite el archivo fuente cambiando las tres instrucciones MOV por
MOB. Guarde los cambios y compile.

26) El proceso le reportara 3 errores y las lneas donde se encuentran los problemas, para poder
corregirlos compile nuevamente, pero ahora cuando vea el mensaje Source listing [NUL.LST]:
digite un nombre (puede ser el mismo del cdigo fuente sin extensin) para que se cree el archivo
LST. Tambin cree el archivo CRF.

27) Usando el comando EDIT busque los archivos que se han creado luego del proceso.

28) Abra el archivo .LST y ubique las lneas donde se estn los errores, deben coincidir con las
modificaciones anteriores.

29) Corrija los problemas en el archivo .asm y guarde los cambios.

30) Analice el SEGUNDO PROGRAMA. Note que hay un lazo de repeticin.


DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
5

SEGUNDO PROGRAMA
.MODEL SMALL
.CODE
INICIO:
;------------------------------------------------
;IMPRESION DE CARACTERES
;------------------------------------------------
mov dl, 41h ;Almacena carcter ASCII
mov cx, 001Ah
LAZO:
mov ah, 02 ;Dato necesario para INT
int 21h ;Imprime el carcter en DL
inc dl
loop LAZO

mov ax, 4C00h;Dato necesario para usar la INT


int 21h ;Retorna el control al SO

.STACK
END INICIO ;Fin del archivo

A qu carcter ASCII corresponde el dato almacenado en DL? ___________


Cuntas veces se ejecutar la instruccin LOOP? _____________

31) Digite el cdigo fuente y a partir de l siga el proceso hasta crear un EXE.

32) Ejecute el archivo EXE.


Qu se imprimi en la pantalla? _____________________________________________________________

33) Analice el TERCER PROGRAMA. Note que se est usando una estructura de procedimientos.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
6

TERCER PROGRAMA
.MODEL SMALL ;Directiva ;-----------------------------------------------------------------------
.CODE ;Directiva ;DECLARACION DE PROCEDIMIENTOS
INICIO: ;-----------------------------------------------------------------------
;inicializacin de registros
mov ax, @DATA prinstrin PROC NEAR
mov ds, ax mov ah, 09
;impresin de mensajes int 21h
mov dX, offset tex1 ret
call prinstrin prinstrin ENDP
mov dX, offset tex2
call prinstrin readkey PROC NEAR
mov ah, 01
;espera al teclado int 21h
call readkey ret
readkey ENDP
;impresin de vocales
mov dx, offset A ;FIN DEL SEGMENTO DE CODIGO
call prinstrin
mov dX, offset tex3
call prinstrin .DATA ;Directiva simplificada
call readkey
mov dx, offset E tex1 db 0Ah, 0Dh, 'Este programa imprime las letras vocales$'
call prinstrin tex2 db 0Ah, 0Dh, 'Presione cualquier tecla para INICIAR$'
mov dX, offset tex3 tex3 db 0Ah, 0Dh, 'Presione cualquier tecla para CONTINUAR$'
call prinstrin tex4 db 0Ah, 0Dh, 'Fin del programa. GRACIAS!!!!!!$'
call readkey
mov dx, offset I A db 0Ah, 0Dh, 09h, 41h, 24h
call prinstrin E db 0Ah, 0Dh, 09h, 45h, 24h
mov dX, offset tex3 I db 0Ah, 0Dh, 09h, 49h, 24h
call prinstrin O db 0Ah, 0Dh, 09h, 4Fh, 24h
call readkey U db 0Ah, 0Dh, 09h, 55h, 24h
mov dx, offset O
call prinstrin ;------------------------------------------------
mov dX, offset tex3 ;FIN DEL SEGMENTO DE DATOS
call prinstrin ;------------------------------------------------
call readkey
mov dx, offset U .STACK ;Directiva simplificada que define
call prinstrin ;el segmento de PILA
mov dX, offset tex4
call prinstrin
END INICIO ;Fin del archivo
mov ax, 4C00h
int 21h

34) Ubique el segmento de datos y note las cadenas estn declaradas de dos maneras diferentes.
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
7

35) Auxilindose del cdigo ASCII identifique a que caracteres corresponden los datos: 0Ah, 0Dh, 09h,
41h, 45h, 49h, 4Fh, 55h y 24h

________________________________________________________________________

36) Compile y ejecute el programa


Describa el funcionamiento del programa

________________________________________________________________________

37) Guarde los archivos que ha creado en esta prctica, le servirn para la prctica 8, no olvide incluir el
programa del anlisis de resultados.

38) Apague la computadora y deje ordenado su lugar de trabajo.

Anlisis de Resultados

a) Primer programa.

1. Cuntos segmentos se declaran en este programa?


2. Cuando se hace uso de la interrupcin?
3. Por qu es necesario cargar un dato en AX antes de ejecutar la interrupcin?
4. Dnde debe almacenarse el carcter que se desea imprimir?
5. Es estrictamente necesario escribir el carcter hal lado del nmero 21?
6. Puede escribirse sin ella y aun as funcionar correctamente el programa?

b) Segundo programa.

1. Cuntos segmentos se declaran en este programa?


2. Al inicio del segmento de cdigo se inicializan los registros
3. Por qu se cargan especficamente estos datos y no otros, para que el programa funcione
correctamente?

c) Tercer programa.

1. Cuntos segmentos se declaran en este programa?


2. Al ejecutar el programa los textos se imprimen en ubicaciones determinadas de la pantalla
Mediante que artificio se logra ese efecto?
3. Cmo se logra que el programa regrese al punto de salida (instruccin CALL) luego de terminar
el procedimiento?
DPTO DE SISTEMAS DIGITALES Y TELECOMUNICACIONES
LABORATORIOS DE MAQUINAS COMPUTADORAS I
8

d) Digite y ensamble el siguiente programa y llvelo a la prctica de laboratorio 8.

PROGRAMA
.MODEL SMALL
.CODE

INICIO:
mov ax, @DATA
mov ds, ax
mov dx, offset texto ;apunta a la cadena
;-------------------------------------------
;IMPRESION DE UNA CADENA
;-------------------------------------------
mov ah, 09 ;Dato necesario para INT
int 21h ;Imprime cadena a la que apunta DX
mov ax, 4C00h ;Necesario para la INT
int 21h ;Retorna el control al SO

.DATA
texto db 'Hola mundo$'

.STACK
END INICIO

Bibliografa

Abel, P. Lenguaje Ensamblador y Programacin para PC IBM y Compatibles, Tercera Edicin Pearson,
Mxico, 1999. Biblioteca UDB: 005.136 A139 1999.

Barry B. Brey. Los microprocesadores Intel, Arquitectura, programacin e interfaces. Editorial Prentice
Hall, Tercera Edicin. Clasificacin UDB: 001.6404 B847 1997.

Вам также может понравиться