0% encontró este documento útil (0 votos)
122 vistas16 páginas

PDF Introduccion Al Emu8086 Facultad Estudios Tecnologicos Escuela Electronica Asignatura Microprocesadores - Compress

1) El documento introduce el emulador EMU8086 y su relación con los elementos básicos de programación del microprocesador 8086. 2) Se identifican los principales componentes del entorno de programación de EMU8086 y los registros del 8086. 3) Se muestra un primer programa de ejemplo y sus pasos para predecir los cambios en los registros.

Cargado por

Guido
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
122 vistas16 páginas

PDF Introduccion Al Emu8086 Facultad Estudios Tecnologicos Escuela Electronica Asignatura Microprocesadores - Compress

1) El documento introduce el emulador EMU8086 y su relación con los elementos básicos de programación del microprocesador 8086. 2) Se identifican los principales componentes del entorno de programación de EMU8086 y los registros del 8086. 3) Se muestra un primer programa de ejemplo y sus pasos para predecir los cambios en los registros.

Cargado por

Guido
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 16

Guía

1 1

Introducción al EMU8086 Facultad: Estudios Tecnologicos.


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

(apóyese en la Figura 3)
Se le presentarán seis opciones, elija “empty workspace”. Observará
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
INICIO #MAKE_COM# ORG
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
BX = ‘A’
4. mov AX, 100; carga AX con 100
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
F IN
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:
DI: 0000 SI: 0100 FFFE
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 coa la “h” que se encuentra ubicada después del


número, así que rectamente ya que se puso en hexadecimal graciasel
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, 0 112h ; Carga dato in m ediato en DX
MOV BX, DX ; Copia D X en BX , movimiento e ntre
AL = ‘A’
AH = 61h
;registros
M [BX] = AH MOV AL , 'A' ; Almacena carácter en
AL MO V AH, 61 h ; Guarda dato e n
M [BX +1] = AL
AH
CX = M [BX]] MOV [BX], AH ; Almacena en dirección in dic ada por
; DS:BX, indirecto
F IN MOV [BX+1], A L ; 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 = 0B 800h
DS = AX MOV AX, 0B800h
MOV DS, AX

MOV CL, 'A'


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

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


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

RET
F IN

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 elcambio.

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


encuentraen 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 sumarsedos
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
nonecesita 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

También podría gustarte