Anda di halaman 1dari 16

Guía

1 1

Facultad: Estudios Tecnologicos.


Introducción al EMU8086
Escuela: Electrónica.
Asignatura: Microprocesadores

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

 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.
 Guía de laboratorio
 Computadora PC con el programa EMU8086

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


Guía
1 2

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

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


llamados en general “código fuente”.

4) 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
Guía
1 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


Guía
1 4

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
INICIO
100h

AH = 7Ah 1. mov AH, 7Ah; carga AH con 7Ah


BL = 99 2. mov BL, 99; carga BL con 99
CL = 11001111b 3. mov CL, 11001111b; carga CL con 11001111b

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


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

ret ; termina el programa


FIN
Guía
1 5

Prediciendo lo que hará el programa:


1.Primero le dará a AX un valor de 7A, pero este valor estará ubicado en H (HIGH), 2.como en B estará en
L (LOW) pero no con 99, sino que será convertido en hexadecimal que sería 63.
3.Ahora el C que también estará el número en hexadecimal (CF), pero en L.
4. Ahora le da un nuevo valor a “AX” que sobrescribirá al anterior que será el 100 pero como este emulador
trabaja en hexadecimales lo convertirá y será 64.
5. Sobrescribirá al valor anterior de “BX” dándole el valor del carácter “A”
6. Sobrescribirá el valor de “CX” con el valor de “ABCD”.
7. Sobrescribirá el valor de “DX” con el valor de 6540 pero lo convertirá a hexadecimal.

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 archivo .COM? #MAKE_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.
Guía
1 6

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: H 00 BX: H 00 CX: H 00 DX: H 00


L 00 L 00 L 13 L 00
CS: DS: ES: SS:
0700 0700 0700 0700
BP: IP: SP:
0000 0100 FFFE
DI: SI:
0000 0000

13) Ejecute el programa totalmente (RUN) y anote los datos resultantes.


Verifique si concuerdan con los datos que usted esperaba.

AX: H 00 BX: H 00 CX: H AB DX: H 19


L 64 L 41 L CD L 8C
CS: DS: ES: SS:
F400 0700 0700 0700
BP: IP: SP:
0000 0154 FFFA
DI: SI:
0000 0000
Guía
1 7

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.

El registro en cuanto a lo que es CS se mantiene intacto hasta que finaliza el


programa, como podemos observar pasos antes el contador deja de ser el
valor dado y pasa a ser 0150 y luego 0154.

En cuanto a lo que es IP avanza con respecto al lenguaje de la máquina, con


los dos primeros datos dados, hay algunos que son de dos IP utilizadas y
otros que son de 3 IP utilizadas.

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?

En cuanto a lo que es CS no hubo cambio alguno, en cuando a IP si hubo un


salto de 2 IP (0100 a 0102), hubo ese salto hecho por el lenguaje de la
maquina ya que en una IP reconoce los 2 primero caracteres y en la siguiente
otros dos, esos dan la equivalencia al número puesto por nosotros.
Si se cargó el código correctamente ya que se puso en hexadecimal gracias
a la “h” que se encuentra ubicada después del número, así que el programa
mismo no hizo ningún tipo de conversión y lo ubico en el lugar dicho ósea en
HIGH (H).

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

Como se mencionó en los anteriores incisos podemos ver los saltos de


OFFSET o IP, dado gracias al lenguaje de la máquina, como también vemos el
CS se mantiene constante hasta que se aplica el “ret” en donde el CS varia y
la IP también de manera brusca y no dada por el lenguaje de máquina.

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 CAMPOS LINEA
0B56 0100 B4 7ª mov AH, 7Ah
0B56 0102 B3 63 mov BL, 99
0B56 0104 B1 CF mov CL, 11001111b
0B56 0106 B8 64 00 mov AX, 100
0B56 0109 BB 41 00 mov BX, 78
0B56 010C B9 CD AB mov CX, 0ABCDh
0B56 010F BA 8C 19 mov DX, 6540
0B56 0112 C3 ret
NOTA : A partir de este punto el programa ejecuta un procedimiento
predeterminado llamado Interrupción.
0B56 0000 CD 20 INT 20H
F400 0150 FF FF BIOS DI
TABLA 1
Guía
1 8

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 = 112h
BX = DX
MOV DX, 0112h ; Carga dato inmediato en DX
MOV BX, DX ; Copia DX en BX, movimiento entre
AL = ‘A’
AH = 61h
;registros
M [BX] = AH MOV AL, 'A' ; Almacena carácter en
AL MOV AH, 61h ; Guarda dato en
M [BX +1] = AL
AH
CX = M [BX]] MOV [BX], AH ; Almacena en dirección indicada por
; 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 0000 BX y DX BX y DX BX y DX BX y DX
0700 0113h 0000 No tiene No tiene No tiene No tiene
REGISTRO CX 0011 0011 0011 4161 4161

TABLA 2
Guía
1 9

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
0700 0100 BA 12 01 MOV DX, 0112h
0700 0103 8B DA MOV BX, DX
0700 0105 B0 41 MOV AL, ‘A’
0700 0107 B4 61 MOV AH, 61h
0700 0109 88 27 MOV [BX], AH
0700 010B 88 47 01 MOV [BX+1], AL
0700 010E 8B 0F MOV CX, [BX]
0700 0110 C3 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.
Guía
1 10

TERCER PROGRAMA

#make_com#
INICIO
Org 100h

AX = 0B800h MOV AX, 0B800h


DS = AX
MOV DS, AX

MOV CL, 'A'


CL = ‘A’ MOV CH, 11011111b
CH = 1101111b
BX = 15Eh MOV BX, 15Eh

MOV [BX], CX ; Copia contenido de CX en la


M [BX] = CX ;dirección (B800:015E) DS:BX

RET
FIN

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.

Influyó en el cambio de posición de la “A”.


Guía
1 11

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


11010000b y observe su efecto, anote sus observaciones.

Influyo en el cambio de color de la letra “A”, de blanco cambió a negro.

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


cambio.

Influyo en el cambio de color de fondo de “violeta” a “azul”, y la letra volvió a


ser blanca.

35) Pruebe a hacer algunos cambios en CH, CL y BX, anote sus


observaciones:

Hicimos el cambio de lo siguiente:

CH: 1000001b
CL: ‘G’
BX: 5Eh
Guía
1 12

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

a) Primer programa.

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

Para indicar al ensamblador que calcule las direcciones relativas a ese


desplazamiento.

Al introducir datos en los registros del microprocesador se usan diferentes


formatos (bases de numeración) ¿cuántos y cuáles son?

-Decimal
-Carácter
-Hexadecimal
-Binario

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?

La fuente vendría a ser el dato1 y el destino sería el dato2, si nos ponemos


en el caso de que la variable “dato2” este primero y la siguiente sea el
“dato1”.

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?

La herramienta “MOV” es como un conductor hacia AX, BX, CX o DX que


cuando tú en el dato dos le asignas un número cualquiera, la misma lo
enviará al dato 1.

¿Cuál es la función que cumple el registro IP dentro del PRIMER PROGRAMA?


En la columna OFFSET de la tabla1, éstos no se incrementan a una razón
constante ¿por qué?

Esto es debido al lenguaje de máquina ya que, al momento de nosotros asignar


un determinado número, los dos primeros “bits” son código predefinido para
ese número y esto puede abarcar 1,2 o 3 IP depende del número y del código
asignado del lenguaje de máquina.
Guía
1 13

b) Segundo programa.

Al comparar las dos primeras instrucciones ¿qué diferencias hay al


ejecutarlas, siendo que las dos son MOV?

La diferencia viene a ser que en la primera instrucción está ejecutando un


número hexadecimal, pero en el segundo lo que está haciendo es mover el
contenido de un registro y ponerlo en el otro.

En la ejecución, podemos ver que el lenguaje de máquina no es la misma por


el mismo hecho de que el “lenguaje de máquina” le asigna otro código muy
diferente a lo que vendría a ser el movimiento de registros.

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?

Lo que paso en el programa fue que los valores de H y L de A fueron enviados


C, pero de manera inversa (es decir el valor de H=61 y L =41 que eran del
A, fueron al C con H=41 y L=61).

¿Por qué al ejecutar la séptima instrucción los datos se almacenan en CX en


ese orden específico?

Se hizo uso de la memoria de BX, para almacenarlos y luego el [BX+1] que


almacenó el dato relativo los hizo invertirse los valores

c) Tercer programa.

Al ejecutar el programa, a medida que hacía las modificaciones ¿qué efecto


concreto logra el cambio en el registro BX?

Logra el desplazamiento de la letra y el fondo de la misma a diferentes


posiciones a lo largo del “emulator screen”.
Guía
1 14

Al modificar CH ¿qué bits específicos se modificaron para lograr cambios en


el fondo y color de los caracteres?

11011111b -----> EJECUTÓ UN COLOR VIOLETA EN EL FONDO Y UNA


LETRA DE COLOR BLANCA, MAS APEGADA A LA PARTE SUPERIOR
IZQUIERDA.

EL CÓDIGO QUE YO PUSE FUE EL SIGUIENTE:


1000001b -----> EJECUTÓ UN COLOR ROJO EN EL FONDO Y UNA LETRA DE
COLOR AZUL, UBICADA EN LA PARTE SUPERIOR CASI EN EL MEDIO DEL
EMULADOR.

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 las diferentes maneras de especificar un


operando dentro de una instrucción en lenguaje ensamblador.

Un modo de direccionamiento especifica la forma de calcular la dirección de memoria


efectiva de un operando mediante el uso de la información contenida en registros
y/o constantes, contenida dentro de una instrucción de la máquina o en otra parte.

¿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),

El resto de los modos sirve para localizar un operando en memoria. Para facilitar la
explicación de estos modos, se pueden resumir de la siguiente manera:
Deben sumarse cuatro cantidades:
dirección de segmento
dirección base
una cantidad índice
un desplazamiento.
Guía
1 15

La dirección de segmento se almacena en el registro de segmento (DS, ES, SS o


CS). En la próxima sección se indica la forma en que se hace esto. Por ahora basta
con saber que el contenido del registro de segmento se multiplica por 16 antes de
utilizarse para obtener la dirección real. El registro de segmentación siempre se usa
para referenciar a memoria.

La base se almacena en el registro base (BX o BP). El índice se almacena en el


registro índice (SI o DI). Cualquiera de estas dos cantidades, la suma de las dos o
ninguna, pueden utilizarse para calcular la dirección real, pero no pueden sumarse
dos bases o dos índices. Los registros restantes (AX, CX, DX y SP) no pueden
utilizarse para direccionamiento indirecto. Además del segmento, base e índice, se
usa un desplazamiento de 16 bits, 8 bits o 0 bits (sin desplazamiento). Ésta es una
cantidad estática que se fija durante el ensamblado. Todo esto genera los 24 modos
de direccionamiento a memoria que se ven a continuación:

Directo:

4) [desp16]. Ejemplo: MOV AX, [2000h]

Indirecto:

5) [BX], Ejemplo: MOV AX, [BX]


6) [DI],
7) [SI].

Basado:

8) [BX+desp8], Ejemplo: MOV AX, [BX+30h]


9) [BP+desp8],
10) [BX+desp16],
11) [BP+desp16].

Indexado:

12) [SI+desp8],
13) [DI+desp8],
14) [SI+desp16], Ejemplo: MOV AX, [SI+4000h]
15) [DI+desp16].

Basado-indexado:

16) [BX+SI],
17) [BX+DI], Ejemplo: MOV AX, [BX+DI]
18) [BP+SI],
19) [BP+DI].

Basado-indexado con desplazamiento:

20) [BX+SI+desp8], Ejemplo: MOV AX, [BX+SI+60h]


21) [BX+DI+desp8],
22) [BP+SI+desp8],
23) [BP+DI+desp8],
24) [BX+SI+desp16],
25) [BX+DI+desp16],
26) [BP+SI+desp16], Ejemplo: MOV AX, [BP+SI+7000h]
27) [BP+DI+desp16].

Aquí desp8 indica desplazamiento de 8 bits y desp16 indica desplazamiento de 16


Guía
1 16

bits. Otras combinaciones no están implementadas en la CPU y generarán error al


querer ensamblar, por ejemplo, ADD CL, [DX+SI].

El ensamblador genera el tipo de desplazamiento más apropiado (0, 8 ó 16 bits)


dependiendo del valor que tenga la constante: si vale cero se utiliza el primer caso,
si vale entre -128 y 127 se utiliza el segundo, y en otro caso se utiliza el tercero.
Nótese que [BP] sin desplazamiento no existe. Al ensamblar una instrucción como,
por ejemplo, MOV AL, [BP], se generará un desplazamiento de 8 bits con valor cero.
Esta instrucción ocupa tres bytes, mientras que MOV AL, [ SI] ocupa dos, porque no
necesita el desplazamiento.

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

MOV admite todos los tipos de direccionamiento antes mencionados.

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

MOV:

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:

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

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