Vous êtes sur la page 1sur 10

Microprocesadores C0112.

EMULADOR EMU8086
GENERALIDADES. El Emulador EMU8086 es el primer programa que se utiliza en el curso de Microprocesadores que imparte la Universidad Don Bosco; se ha elegido este emulador porque posee una interfaz de usuario muy amigable que permite familiarizarse con los fundamentos de la programacin en lenguaje ensamblador de forma muy intuitiva, a parte de eso brinda una serie de recursos para ejecutar y depurar los programas. Tambin tiene algunas desventajas como el hecho de no soportar algunas de las interrupciones ms interesantes que posee el sistema operativo y tampoco puede acceder a los puertos fsicos (reales), sino que los emula usando otros programas que ya estn incluidos en su respectiva carpeta. Si ejecuta la versin 4.05 del EMU8086 observara primero la pantalla de bienvenida (welcome), similar a la que se muestra en la figura 1.

Figura 1. Pantalla de bienvenida del emulador EMU8086.

Se presentan cuatro diferentes opciones para elegir:

New: Le permite escribir un nuevo cdigo en lenguaje ensamblador (al que llamaremos Cdigo Fuente y tendr extensin .ASM) Code examples: Le permite acceder a una serie de programas ejemplos que pueden ayudarle a comprender funciones ms complejas.

2 Microprocesadores C0112.
Quick start tutor: activa un conjunto de documentos de ayuda, se recomienda revisarlos frecuentemente en caso de dudas. Recent file: Le muestra los ltimos archivos que se trabajaron en la mquina.

Si se desea escribir un nuevo cdigo fuente se debe seleccionar la opcin New. Se puede elegir una de cuatro posibles opciones para un nuevo cdigo fuente como las que se observan en la caja de dialogo choose code template, como se muestra en la figura 2. Esta seleccin est relacionada con el tipo de archivo final (archivo ejecutable) que se desea generar.

Figura 2. Caja de dialogo para seleccionar el tipo plantilla (template).

En esta caja de dialogo se presentan seis opciones, cuatro de ellas le permiten usar plantillas predefinidas con algunos de los tipo de archivo que se pueden crear en lenguaje ensamblador: COM template, EXE template, BIN template y BOOT template (cada uno le permite diferentes caractersticas que se abordaran a su debido tiempo en el curso). Las otras dos que le permiten usar un espacio vaco empty workspace (sin una plantilla) o activar el emulador mismo. Para el caso del curso de Microprocesadores se seleccionar la opcin del espacio vaco. Para escribir los cdigos fuentes se cuenta con la facilidad de tener un Entorno de Desarrollo Integrado (Integrated Development Environme IDE), como se muestra en la figura 3. Es importante hacer notar que en este ambiente es posible escribir cdigos en lenguaje de mquina y tambin usando los nemotcnicos y la sintaxis del lenguaje ensamblador, ste ltimo es el que se usar cotidianamente en el laboratorio. Si se observa detenidamente la figura 3 Podr verse una barra de men de Windows con sus opciones clsicas file, edit, etc. pero tambin se notan unas opciones poco usuales como assembler, emulator, etc. propias de este programa. Tambin se ver una serie de botones que le permitirn crear un nuevo archivo (new), abrir un archivo que ya existe (open), abrir un ejemplo (examples), compilar un archivo fuente (compile), emular un archivo ejecutable (emulate), etc.

Microprocesadores C0112. En el men Help puede encontrar tutoriales sobre el emu8086, sobre lenguaje ensamblador y un set de instrucciones e interrupciones para el 8086

Figura 3. Ventana de edicin o Entorno de Desarrollo Integrado IDE del EMU8086.

LENGUAJES DE ALTO NIVEL Y EL LENGUAJE ENSAMBLADOR. El lenguaje ensamblador, que es el que se estudiar en el curso de Microprocesadores es del tipo estructurado (no est orientado a objetos) y su estructura tiene algunas similitudes con otros lenguajes, para poner de manifiesto lo anterior se ha preparado un ejemplo ilustrativo a ese respecto. Primero estudie la tabla 1, donde se muestra el flujo-grama (desarrollado en FreeDFD) y el cdigo fuente (escrito en C) de un programa muy conocido. FLUJO-GRAMA CODIGO FUENTE
#include <iostream.h> #include <conio.h> main() { char frase[12] = {"\n\nHOLA MUNDO"}; char pak[41] = {"\nPresione cualquier tecla para continuar"}; cout<< frase; cout<< pak; getch(); return 0;

Tabla 1. Programa en lenguaje C.

4 Microprocesadores C0112.

Qu hace el programa? Note que el cdigo fuente esta dividido en tres bloques: El encabezado que contiene las directivas de preproceso que son necesarias para emplear las funciones de biblioteca (#include). Las declaraciones donde se especifican las variables y prototipos de funciones. Por ltimo el cuerpo del programa donde se escriben concretamente las funciones que ejecutar el programa. A continuacin, en la Figura 4 se muestra un flujo-grama un poco diferente porque est orientado al lenguaje ensamblador. Note que se estn usando tanto el smbolo de Proceso como el de Proceso predefinido (Funcin) para diferenciar las instrucciones de las funciones. En el texto de los proceso se menciona el trmino Registro que se usa en el mismo sentido con el que se usa en Sistemas Digitales como una pequea memoria de baja capacidad. Estos registros se encuentran dentro del microprocesador y se utilizan para almacenar datos o instrucciones que posteriormente sern procesados.
INICIO 1

ALMACENA EN EL REGISTRO ACUMULADOR (AX) LA DIRECCION DE MEMORIA A PARTIR DE LA CUAL SE HAN ALMACENADO LOS DATOS CON LOS QUE TRABAJARA EL PROGRAMA

VUELVE A EJECUTAR Imprimir_Cadena PARA IMPRIMIR OTRA CADENA DE TEXTO, EN ESTE CASO LLAMADA pak

TRANSFIERE (COPIA) EL CONTENIDO DEL REGISTRO ACUMULADOR (EN ESTE CASO LA DIRECCION DE MEMORIAL DESDE DONDE SE ALMACENAN LOS DATOS CON LOS QUE TRABAJARA EL PROGRAMA) AL REGISTRO SEGMENTO DE DATOS (DS).

EJECUTAR LA MACRO-INSTRUCCIN LLAMADA Presione_Tecla_Fin QUE ESPERA A QUE EL USUARIO DEL PROGRAMA PRESIONE CUALQUIER TECLA PARA SEGUIR ADELANTE CON LA EJECUCION DEL CODIGO.

EJECUTA LA MACRO-INSTRUCCIN LLAMADA Imprimir _Cadena LA CUAL IMPRIME UNA CADENA DE TEXTO , ESTA CADENA SE ESPECIFICA AL PASARLE UN PARAMETRO A LA MACRO-INSTRUCCIN, USANDO EL NOMBRE DE LA CADENA QUE SE DESEA ESCRIBIR DESPUES DEL LLAMADO A LA MACRO-INSTRUCCIN (en este caso llamada frase).

ALMACENA EN EL REGISTRO ACUMULADOR EL VALOR 4C00h (NUMERO HEXADECIMAL) QUE SERA USADO POR LA SIGUIE LINEA.

EJECUTA INTERRUPCION 21h. ESTE ES UN PROGRAMA QUE FORMA PARTE DE LAS RUTINAS DEL SISTEMA OPERATIVO , TIENE MUCHAS OPCIONES PARA ELEGIR, LA CUAL SE DECIDE EN BASE AL CONTENIDO DEL REGISTRO ACUMULADOR

1 FIN Figura 4. Diagrama de Flujo del ejemplo.

En la tabla 2 aparece el cdigo fuente escrito en lenguaje ensamblador. Por favor lea el cdigo fuente y luego, apoyndose en el flujo-grama y los abundantes comentarios, compare la estructura del cdigo en ensamblador con el de lenguaje C, estableciendo similitudes y diferencias.

Microprocesadores C0112.

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 Imprimir_Cadena pak ;Macro-Instruccion que imprime la cadena llamada frase ;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

Tabla 2. Programa en lenguaje ensamblador.

6 Microprocesadores C0112.

Siguiendo el mismo planteamiento del cdigo de C, se puede dividir el cdigo en ensamblador en las siguientes partes: a) Directivas de preproceso: Le indican al compilador que debe tomar informacin de los archivos de biblioteca durante el proceso de convertir el archivo ASM en EXE. b) Declaracin del Segmento de Datos: Donde se declaran las variables y constantes que el programa va a utilizar. c) Declaracin del Segmento de Cdigo: Donde se define las acciones que el programa deber realizar. Para especificarlo se pueden usar: Instrucciones (propias del microprocesador), Macro-instrucciones (similar a los comandos de los lenguajes de alto nivel), Procedimientos (similar a las funciones definidas por el usuario de los lenguajes de alto nivel) y llamado a Interrupciones, que es una forma muy particular del lenguaje ensamblador y que se explicara a su debido tiempo. d) Declaracin del Segmento de PILA o STACK: bloque de memoria donde almacenan datos intermedios que se generan durante la ejecucin de un programa. En este no se declaran variables o constantes como en el segmento de datos, sino que se administra como una memoria LIFO, el ltimo en entrar es el primero en salir. e) Directiva END: que indica el fin del archivo, cualquier instruccin posterior a esta lnea ser ignorada por el compilador.

COMPILADO Y EJECUCION. Si ya se tiene un cdigo fuente escrito en lenguaje ensamblador (con extensin ASM y cuyo nombre no debera exceder los 8 caracteres) se debe proceder a transformarlo en un archivo ejecutable, en este caso tipo EXE, esto se logra presionando el botn compile del IDE (ver figura 3). Hay que recordar que el proceso para convertir un ASM en EXE es complejo e implica muchos pasos que en un buen programador no debera ignorar y que en su momento se explicarn durante el curso. Mientras se realiza la transformacin (en el caso muy particular del EMU8086) se abre un ventana llamada assembler status que le informa sobre los resultados del proceso. Si existe algn error ah se le har notar, de lo contrario se observa un mensaje como el de la figura 5. A continuacin se pide asignar un nombre al archivo EXE, por defecto se le asigna el mismo nombre del archivo fuente, pero usted puede elegir otro, siempre de 8 caracteres mximo. Volviendo a la figura 5, en el caso de no tener errores, la ventana assembler status muestra diferentes opciones como ejecutar el archivo EXE dentro del programa (opcin run), revisar algunos de los archivos complementarios que se crearon en el proceso (opcin view), o ejecutar el archivo usando el programa DEBUG (opcin external), sta es otra herramienta que se estudiar ms adelante en el curso, la ltima opcin es cerrar la ventana (close).

Microprocesadores C0112. Si ya tiene un archivo EXE que fue previamente compilado puede ejecutarlo dentro del EMU8086 presionando el botn emulate del IDE, con lo que se abren dos ventanas ms, aparte del IDE que ya estaba abierto, a estas se les llama emulator y original source code como se muestra en la Figura 6.

Figura 5. Estado del proceso de compilacin.

Figura 6. Ventanas del EMU8086: emulador, cdigo fuente e IDE.

8 Microprocesadores C0112.
En la ventana emulator se puede monitorear la mayora de procesos al ejecutar el programa y es la que ms se usar a la hora de realizar las prcticas de laboratorio, por lo que es importante su manejo efectivo. Una vista ms detallada se presenta en la Figura 7. Dada la gran importancia que tiene la ventana emulator es necesario analizarla ms detenidamente, est dividida en varias partes:

Figura 7. Ventana del Emulador.

Parte superior: tiene una barra de herramientas con las siguientes opciones:

File, permite administrar (cargar o salvar) los archivos que va creando o


ejecutando Math, da acceso a una calculadora y un convertidor de basas de numeracin. Debug, provee herramientas para depurar programas. View, permite abrir otras ventanas que pueden ser de mucha ayuda al ejecutar o depurar programas. External, permite ejecutar el programa con otras herramientas diferentes del EMU8086. Virtual devices, activa los dispositivos virtuales con que cuenta el programa, dado que se tata de un emulador no se tiene acceso a los puertos fsicos de la computadora, por lo que estos son simulados. Virtual drive, da opciones para administrar las unidades virtuales de almacenamiento (HDD y FDD virtuales). Help, activa la herramienta de ayuda.

Microprocesadores C0112. Bajo la barra de herramientas hay cinco botones que le permiten: Load, carga un archivo ejecutable EXE, COM, etc. que ya existe. Reload, recarga (inicializa los registros) para ejecutar nuevamente un programa que acaba de ser corrido. Single step, ejecuta solamente una instruccin o macroinstruccin (paso a paso). Step back, retrocede una instruccin que ya fue ejecutada (funcin muy til al depurar un programa) Run, ejecuta un programa en su totalidad o hasta presionar el botn STOP. Vale la pena hacer notar que tambin es posible, en la opcin DEBUG, insertar un break point cuando se est depurando programas. Parte media: est dividida en tres reas:

rea izquierda denominada registers, donde se puede monitorear el contenido


de los registros del microprocesador rea central, donde se puede observar el contenido de la memoria desde donde se est ejecutando el programa. Primero se notan las direcciones del bloque de memoria que se visualiza, estas direcciones de dan en un formato llamado fsico o absoluto (existe otro formato para las direcciones) dado por cinco cifras hexadecimales (20 bits) lo que indica que en este bus de direcciones se puede direccionar desde la direccin 00000h (direccin 0) hasta la direccin FFFFFh (direccin 1048575). Luego se indica el contenido de cada palabra (cada una de 1 byte), por facilidad el contenido se presenta en hexadecimal, decimal e interpretado como un carcter ASCII. rea derecha, donde puede observar el contenido de la memoria, pero esta vez no se detalla con direcciones especficas, sino que cada bloque de datos es interpretado como un conjunto de instrucciones (lo que se llama PROGRAMA DESENSAMBLADO) que el microprocesador deber ejecutar. Es importante mencionar que algunas instrucciones se expresan solo con un byte, pero otras necesitan varios bytes para ser expresadas.

Parte inferior: contiene una serie de botones que permiten un acceso rpido a una serie de ventanas auxiliares, algunas de las cuales se puede activar tambin en la barra de herramientas con la opcin view La otra ventana llamada original source code muestra el cdigo fuente del archivo, esta ventana tiene algunas semejanzas con la ventana del IDE (donde se escriben los cdigos fuentes), pero tiene un objetivo diferente. Si observa detenidamente la Figura 8 notar que original source code no posee botones y que aparece resaltada la lnea: mov ax, @DATA Eso indica que al comenzar a correr el programa, sta ser la primera instruccin que se ejecutar. Con esta ventana podr monitorear el cdigo lnea a lnea, al ejecutar paso a paso, as como le permitir ubicar en la memoria bloques completos del programa, pero ah no puede editar el cdigo, para eso est el IDE.

10 Microprocesadores C0112.

Figura 8. Comparacin entre las ventanas de edicin y cdigo fuente.

Otra de las ventanas muy tiles del EMU8086 es la ventana de variables variables, le permitir monitorear las variables declaradas en tiempo real. Para activarla debe ubicar el botn vars en la ventana emulator (ver figura 7). La ventana tiene un aspecto como el que se muestra en la figura 9.

Figura 9. Ventana auxiliar para monitorear el contenido de las variables declaradas.

Vous aimerez peut-être aussi