Anda di halaman 1dari 16

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

Facultad de Producción y Servicios

Escuela Profesional de Ingeniería de Sistemas

Tema: Guía 1: emu8086

Docente: Pedro Alex Rodríguez Gonzales

Alumno: Renato Alonso Mendizabal Alpaca

Curso: Arquitectura de Computadores

2018
Introducción al Emu8086

En este trabajo se muestra el desarrollo y resolución de la guía01 sobre Emu8086 que tiene como
objetivo aprender los fundamentos, registros y procedimientos generales para comprender el
funcionamiento del lenguaje máquina, por medio de ejercicios y análisis de compilación de
diferentes códigos.

Objetivo General

Utilizar el programa emulador EMU8086 y relacionarlo con los elementos básicos que
conforman el modelo de programación del microprocesador 8086.

Objetivos Específicos

• Identificar los principales elementos que conforman el ambiente de programación


del software EMU8086.
• Identificar los registros del modelo de programación del 8086.
• Observar la relación que existe entre los lenguajes de ensamblador y máquina.
• Reconocer de forma intuitiva los modos de direccionamiento básicos del micro
8086.
• Imprimir un carácter en la pantalla de usuario, modificando sus parámetros.
• Utilizar el emulador en la creación y ejecución un archivo tipo COM.

Materiales y equipo

• Guía de laboratorio
• Computadora PC con el programa EMU8086

Procedimiento

1) Ejecute el programa emulador de microprocesadores EMU8086, haciendo doble


clic en el icono del escritorio, Aparecerá una ventana como la Figura 1.
Figura 1: Ventana inicial del emu8086

2) Presione el botón que indica “New”.

3) Observará una ventana donde escribirá sus futuros programas, llamados en


general “código fuente”.

a Desde ahí se puede crear un nuevo documento. Observe la figura 2 “Choose code
template
Figura 2

Se le presentarán seis opciones, elija “empty workspace”. Observará (apóyese en


la Figura 3) una ventana con la clásica barra de menú (File, Edit, etc.) con algunos
elementos distintivos (Compile, Emulator, Math, etc.) así como una serie de
botones que le permiten abrir un nuevo archivo, compilar, emular y otras
funciones útiles. En el texto observará dos líneas de comando que son un
encabezado necesario para crear un archivo tipo COM.

Figura 3

5) Seleccione en la barra de menú la opción “EMULATOR” y en ésta “SHOW


EMULATOR”. Se abrirá una ventana donde podrá observar diferentes elementos
(apóyese en la Figura 4 para interpretar información). Algunos botones que
permiten realizar acciones como: cargar (load), recargar (reload), ejecutar
paso a paso (single step) y ejecutar (run). También podrá ver, en la parte
central, tres columnas en las que se detalla el
contenido de los registros del 8086, el contenido de la memoria y el programa
desensamblado. Abajo podrá acceder a la pantalla de usuario (user screen), el
código fuente (actual source), la Unidad Aritmética y Lógica (ALU), la Pila
(stack) y el registro de banderas (flags) o estados.

6) Cierre la ventana del emulador, pero no cierre la ventana del código fuente.

NOTA: las direcciones de memoria están escritas en el formato de segmento y desplazamiento”

Figura 4

7) Ahora analice el siguiente código fuente (llamado PRIMER PROGRAMA),


ayudándose de los comentarios y del diagrama de flujo que lo acompaña. Intente
predecir cada cambio que tendrán los datos hexadecimales en los registros del
microprocesador.
PRIMER PROGRAMA
#MAKE_COM#

ORG 100h
INICIO

mov AH, 7Ah ;carga AH con 7Ah


AH = 7Ah mov BL, 99 ;carga BL con 99
BL = 99
CL = 11001111
b mov CL, 11001111b ;carga CL con 11001111b

AX = 100 mov AX, 100 ;carga AX con 100


BX = ‘A’ mov BX, ‘A’ ;carga BX con carácter A
CX = 0ABCDh
DX = 6540 mov CX, 0ABCDh ;carga CX con ABCDh
mov DX, 6540 ;carga DX, con 6540

FIN
ret ;termina el programa

8) Abra el archivo fuente llamado guia01.asm, como notará es el mismo programa


que previamente analizó.

9) Usando el botón respectivo compile el código fuente, note que el programa le


informa que creará un archivo con extensión COM.
¿Qué nombre la asigna el sistema al .COM?
Se le asigno el nombre guia01.com

10) Si no se dan errores de compilación proceda a emular el programa. Analice la


información que se le presenta auxiliándose de la Figura 5.

11) Puede observar una copia del código fuente en el que se marca la línea de
instrucción que será ejecutada. También puede ver en la ventana del emulador
el contenido de los registros, la memoria y el programa desensamblado. Si tiene
problemas para interpretar esta información, por favor solicite asistencia por
parte de su instructor.
Figura 5

12) Copie los datos almacenados en los registros antes de ejecutar el programa:

AX: 00 00 BX: 00 00 CX: 00 13 DX: 00 00

CS: 0700 DS: 0700 ES: 0700 SS: 0700

BP: 0000 IP: 0100 SP: FFFE

DI: 0000 SI: 0000

13) Ejecute el programa totalmente (RUN) y anote los datos resultantes. Verifique si
concuerdan con los datos que usted esperaba.

AX: 0064 BX: 0041 CX: ABCD DX: 198C

CS: F400 DS: 0700 ES: 0700 SS: 0700

BP: 0000 IP: 0154 SP FFFA

DI: 0000 SI: 0000

14) Cargue nuevamente el programa, observe el contenido de los registros, sobre


todo el contenido de CS e IP. Analice sus observaciones comparándola con la que
aparece en la TABLA 1. Si tiene dudas por favor solicitar asistencia de su
instructor.
CAMBIA SU REGISTRO
CS:F400 IP:0154
15) Ejecute solo la primera instrucción (Single step).
Observe los cambios (sobre todo en CS e IP) ¿se cargó el dato esperado en AH?

Si cargo 7A

16) Interprete la información de la TABLA 1 respecto de sus resultados


La información de los registros concuerda con la tabla 1.

17) Continúe ejecutando paso a paso el programa hasta la instrucción RET, al mismo
tiempo llene los espacios vacíos de la TABLA 1. Si tiene dudas en esta actividad,
por favor solicite la asistencia de su instructor.

18) Continúe ejecutando las instrucciones hasta concluir el programa.

DIRECCIONES LENGUAJE DE LENGUAJE


MÁQUINA ENSAMBLADOR
SEGM(CS) OFFSET(IP) CAMPOS LINEA
0700 0100 B4 7A mov AH, 7A
0700 0102 B3 63 mov BL, 99
0700 0104 B1 CF mov CL, 11001111b
0700 0106 B8 64 00 mov AX, 100
0700 0109 BB 41 00 mov BX, 78
0700 010C B9 CD AB mov CX, 0ABCDh
0700 010F BA 8C 19 mov DX, 6540
0700 0112 C3 ret
NOTA: A partir de este punto el programa ejecuta un procedimiento predeterminado
llamado Interrupción.
0700 0000 CD 20 INT 20H
F400 0150 FF FF BIOS DI
TABLA 1

19) Cierre la ventana del emulador, pero no cierre la ventana del código fuente.

20) Cree un archivo nuevo, tipo COM y escriba el código llamado SEGUNDO
PROGRAMA, después de su respectivo encabezado, no olvide los tabuladores.
SEGUNDO PROGRAMA
NOTA: Observe que la instrucción MOV se ha escrito de diferentes formas.
INICIO #MAKE_COM#
ORG 100h
DX = 112 h
B X = DX

MOV DX, 0112h ; Carga dato inmediato en DX


A L = ‘A’
MOV BX, DX ; Copia DX en BX, movimiento entre
AH = 61 h
M [ BX ] = AH
;registros
MOV AL, 'A' ; Almacena carácter en AL
MOV AH, 61h ; Guarda dato en AH
MOV [BX], AH ; Almacena en dirección indicada por
M [ BX + 1 ] = AL
CX = M [BX ]]

; DS:BX, indirecto

FIN MOV [BX+1], AL ; Almacena dato relativo a base, DS:BX+1


MOV CX, [BX] ; Copia el dato de la dirección en CX
;registro, indirecto
RET ; fin del programa

21) Emule el programa y antes de ejecutarlo anote en la TABLA 2 el contenido de las


direcciones que tienen desplazamiento 0112h y 0113h, así como el contenido de
CX en la columna Inicio. Más adelante se retomará este punto para comparar los
cambios en los datos.

22) Corra paso a paso el programa hasta antes de ejecutar la quinta instrucción,
tratando de predecir las acciones que se realizarán, auxiliándose de los
comentarios de cada instrucción, si tiene problemas consulte con instructor.

23) Observe y anote en la TABLA 2 los resultados de su observación

24) Ejecute la quinta instrucción, anote los resultados.

25) Ejecute paso a paso el resto de instrucciones, tomando nota de los resultados.

SEG OFFSET Inicio del Antes de Después Después Después


(DS) programa 5ª de 5ª de 6ª de 7ª
0700 0112h 90 90 61 61 61
0700 0113h 90 90 90 41 41
REGISTRO CX 00 11 00 11 00 11 00 11 41 61
TABLA 2

26) Cargue nuevamente el programa.

27) Ejecute paso a paso el programa, anotando en la TABLA 3 el valor de cada dato
que se le solicite, tomando como referencia el procedimiento con el que completó
la TABLA 1.
28) Cierre la ventana del emulador, pero no cierre la ventana del código fuente.

DIRECCIONES LENGUAJE DE MÁQUI LENGUAJE ENSAMBLADOR


SEGM OFFSET CAMPOS LINEA
(IP)
0700 0103 8B DA MOV DX, 0112h
0700 0105 B0 41 MOV BX, DX
0700 0107 B4 61 MOV AL,’A’
0700 0109 88 27 MOV AH,61h
0700 010B 88 47 01 MOV [BX], AH
0700 010E 8B 0F MOV [BX+1], AL
0700 0110 C3 MOV CX ,[BX]
0700 0000 CD 20 RET
TABLA 3

29) Escriba un nuevo programa .COM y digite el código llamado TERCER PROGRAMA.
30) Emule y ejecute el programa (run) y note la información que se presenta en la
pantalla de usuario, debe observar un carácter ‘A’ con un color para el fondo y
para el carácter. Anote esa información.
TERCER PROGRAMA
#make_com#
INICIO
Org 100h

AX = 0B800h
DS = AX MOV AX, 0B800h
MOV DS, AX

CL = ‘A’ MOV CL, 'A'


CH = 1101111b
MOV CH, 11011111b
BX = 15Eh
MOV BX, 15Eh

M [BX] = CX
MOV [BX], CX ; Copia contenido de CX en la
; dirección (B800:015E) DS:BX

FIN
RET

31) Modifique el programa sustituyendo el dato que se almacena en BX (15Eh) por


10Eh y corra el programa.

32) Observe y describa como afectó el cambio al funcionamiento del programa.

En el registro BX se guarda el dato 010E en lugar del 015E, y esto produce un


cambio de posición en la impresión en pantalla

33) Modifique ahora el dato almacenado en CH, cambiándolo por 11010000b y


observe su efecto, anote sus observaciones.

En el registro CH se guarda el valor de 11010000b que en hexadecimal es


D0,este registro hace referencia al formato de la letra tal como color de
fondo y color de letra, en este caso este nuevo número hace referencia a
un color diferente de letra que es el negro.

34) Vuelva a cambiar CH, ahora por 10011110b, observe y describa el cambio.

En este caso se se cambiaron ambos grupos de bits tanto el que refiere a color de
fondo y color de letra , en este caso el fondo es azul y la letra amarilla.
35) Pruebe a hacer algunos cambios en CH, CL y BX,
anote sus observaciones:
Puedo observar que existen diversas posibilidades manipulando los
registros en modo texto, se pueden cambiar además las propiedades del
texto.

36) Notifique a su instructor que ha terminado la práctica.

Análisis de resultados

a) Primer programa.

En el encabezado del programa ¿por qué se incluye la línea “org 100h”?

Org es la directiva que establece el contador de posición

Al introducir datos en los registros del microprocesador se usan diferentes formatos


(bases de numeración) ¿cuántos y cuáles son?
Son 4: binario, octal, decimal, hexadecimal
La sintaxis de la instrucción MOV define tres campos: instrucción, dato1 y dato2. Al
moverse los datos ¿cuál es la fuente y cual el destino?
Dato 2 es el origen y dato1 es el destino.
Al observar la tabla1 se nota que a la misma instrucción MOV se le asignan diferentes
códigos hexadecimales ¿a qué se debe esto?
Esto se debe a que MOV puede trabajar con cualquier tipo de dato y hay más de una
forma de ingresar los datos a memoria.
¿Cuál es la función que cumple el registro IP dentro del PRIMER PROGRAMA?
Funciona como un contador que va redireccionando cada siguiente instrucción.
En la columna OFFSET de la tabla1, éstos no se incrementan a una razón constante ¿por
qué?
Porque los registros y datos son variados y de diferentes tamaños y direccion.

b) Segundo programa.

Al comparar las dos primeras instrucciones ¿qué diferencias hay al ejecutarlas, siendo
que las dos son MOV?
La primera almacena un numero en un registro dx y el segundo copia el contenido del
registro dx al otro registro bx.
En las últimas tres instrucciones se incluyeron corchetes (paréntesis cuadrados) en las
instrucciones ¿Qué diferencias observó en su ejecución respecto a las primeras dos
instrucciones?
Estas instrucciones se copia la información de la dirección del registro mediante
direccionamiento indirecto.

¿Por qué al ejecutar la séptima instrucción los datos se almacenan en CX en ese orden
específico?
Porque emu8086 trabajo con el formato Little que hace que
se almacenen primero los bits menos significativos y luego los mas significativos.

c) Tercer programa.

Al ejecutar el programa, a medida que hacía las modificaciones ¿qué efecto concreto
logra el cambio en el registro BX?
El registro BX referenciaba la posición donde se imprimirá el texto, y cualquier cambio
cambiaba la posición.
Al modificar CH ¿qué bits específicos se modificaron para lograr cambios en el fondo y
color de los caracteres?
Los primeros cuatro bits establecían el color de fondo y los 4 últimos el color de letra.

Investigación complementaria

Esta actividad debe desarrollarse posteriormente a la ejecución de la guía de laboratorio


y tiene por objetivo complementar y ampliar la temática desarrollara teniendo en mente
las actividades futuras.

Investigue:

¿Qué son los modos de direccionamiento?


Los modos de direccionamiento son medios por los cuales se indica la manera de
obtener los operandos de una instrucción.

¿Cuántos y cuáles modos de direccionamiento tiene el microprocesador 8086?

Estos procesadores tienen 27 modos de direccionamiento (una cantidad bastante más


grande que los microprocesadores anteriores) o reglas para localizar un operando de una
instrucción. Tres de ellos son comunes a microprocesadores anteriores:
1. Direccionamiento inherente (el operando está implícito en la instrucción, por
ejemplo, en la multiplicación uno de los operandos siempre es AX).
2. Direccionamiento a registro (el operando es un registro del microprocesador)
3. Direccionamiento inmediato (el operando es un número que se encuentra en la
misma instrucción),

¿Qué modos de direccionamiento posee la instrucción MOV?

Admite todos, pero pondremos por ejemplo estos a continuación.

Direccionamiento de registro: cuando ambos operando son un registro. Ejemplo:


MOV AX,BX ;transfiere el contenido de BX en AX

Direccionamiento inmediato: cuando el operando origen es una constante. Ejemplo:


MOV AX,500 ;carga en AX el valor 500.
Direccionamiento directo: cuando el operando es una dirección de
memoria. Ésta puede ser especificada con su valor entre [ ], o bien mediante una variable definida
previamente (cómo definir etiquetas se verá más adelante). Ejemplo:
MOV BX,[1000] ; almacena en BX el contenido de la dirección de memoria DS:1000.

MOV AX,TABLA ; almacena en AX el contenido de la dirección de memoria DS:TABLA.

Direccionamiento indirecto mediante registro: cuando el operando está en memoria en una


posición contenida en un registro (BX, BP, SI o DI). Ejemplo:
MOV AX,[BX] ; almacena en AX el contenido de la dirección de memoria DS:[BX].

MOV [BP],CX ; almacena en la dirección apuntada por BP en contenido de CX.

Direccionamiento por registro base: cuando el operando está en memoria en una posición
apuntada por el registro BX o BP al que se le añade un determinado desplazamiento Ejemplo:

MOV AX, [BP] + 2 ; almacena en AX el contenido de la posición de memoria que resulte


de sumar 2 al contenido de BP (dentro de segmento de pila). Equivalente a MOV AX, [BP
+ 2]
Direccionamiento indexado: cuando la dirección del operando es obtenida como la suma de
un desplazamiento más un índice (DI, SI). Ejemplo:
MOV AX, TABLA[DI] ; almacena en AX el contenido de la posición de memoria apuntada
por el resultado de sumarle a TABLA el contenido de DI.

Direccionamiento indexado respecto a una base: cuando la dirección del operando se


obtiene de la suma de un registro base (BP o BX), de un índice (DI, SI) y opcionalmente un
desplazamiento. Ejemplo:
MOV AX, TABLA[BX][DI] ; almacena en AX el contenido de la posición de memoria
apuntada por la suma de TABLA, el contenido de BX y el contenido de DI.

¿Qué diferencias hay entre las instrucciones XCHG ya la instrucción MOV?

Instrucciones de transferencia de datos


Las instrucciones de transferencia de datos copian datos de un sitio a otro y son: MOV, XCHG,
XLAT, LEA, LDS, LES, LAHF, SAHF, PUSH, PUSHF, POP, POPF.
MOV
Realiza la transferencia de datos del operando de origen al destino. Como ya hemos visto en la
parte de los modos de direccionamiento, MOV admite todos los tipos de direccionamiento. Ambos
operandos deben ser del mismo tamaño y no pueden estar ambos en memoria.
MOV reg, reg ; reg es cualquier registro.
MOV mem, reg ; mem indica una posición de memoria
MOV reg, mem
MOV mem, dato ; dato es una constante
MOV reg, dato
MOV seg-reg, mem ;seg-reg es un registro de segmento
MOV seg-reg, reg
MOV mem, seg-reg
MOV reg, seg-reg
XCHG
Realiza el intercambio entre los valores de los operandos. Puede tener operando en registros y
en memoria:
XCHG reg, mem
XCHG reg, reg
XCHG mem, reg

Bibliografía

Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y 80486.
Arquitectura, programación e interfaces, Prentice Hall, México DF, 19953
Biblioteca UDB 001.6404 B847 1997

Anda mungkin juga menyukai