Sunteți pe pagina 1din 13

EMULADOR EMU8086 El Emulador EMU8086 es el primer programa que se utiliza en el curso deMicroprocesadores que imparte la Universidad Don Bosco;

se ha elegido este emuladorporque posee una interfaz de usuario muy amistosa que permite familiarizarse con losfundamentos de la programacin en lenguaje ensamblador de forma muy intuitiva, aparte de eso brinda una serie de recursos para ejecutar y depurar los programas.Tambin tiene algunas desventajas como el de no soportar algunas de lasinterrupciones ms interesantes que posee el sistema operativo y tampoco puedeacceder a los puertos fsicos (reales), sino que los emula usando otros programas queya estn incluidos en su respectiva carpeta.Para iniciar se debe ejecutar el archivos EMU886.exe, que se encuentra en la carpetadel mismo nombre, en el directorio raz; seguramente en la computadora donde corrael programa tendr otras alternativas para activar el programa, como un acceso directoen el escritorio o en el men de programas del sistema operativo.Si est ejecutando la versin 4.05 del EMU8086 observar primero la pantalla debienvenida (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 quellamaremos Cdigo Fuente y tendr extensin .ASM) 1 Code examples : Le permite acceder a una serie de programas ejemplos quepueden ayudarle a comprender funciones ms complejas. Quick star tutor : activa un conjunto de documentos de ayuda, se recomiendarevisarlos frecuentemente en caso de dudas. Recent file

: Le muestra los ltimos archivos que se trabajaron en la mquina.Para continuar este primer contacto con el emulador, seleccione New . Observar unanueva caja de dialogo choose code template, como se muestra en la Figura 2. Figura 2. Caja de dialogo para seleccionar el tipo plantilla (template). En ella se le presentan seis opciones, cuatro que le permiten usar plantillaspredefinidas con algunos de los tipo de archivo que se pueden crear en lenguajeensamblador: COM template, EXE template, BIN template y BOOT template (cada unole permite diferentes caractersticas que se abordaran a su debido tiempo en el curso).Dos que le permiten usar un espacio vaco empty workspace (sin una plantilla) oactivar el emulador mismo. Selecciones la opcin del espacio vaco. Observar laventana de edicin o mejor dicho el Entorno de Desarrollo Integrado (IntegratedDevelopment Environme IDE), como se muestra en la Figura 3, donde escribir susarchivos fuentes en lenguaje ensamblador, por favor lo confunda con el lenguaje demquina.Podr ver una barra de men de Windows con sus opciones file, edit, etc. pero tambinvera unas opciones poco usuales como assembler, emulator, etc. propias del emulador.Tambin vera una serie de botones que le permitirn crear un nuevo archivo (new),abrir un archivo que ya existe (open), abrir un ejemplo (examples), compilar unarchivo fuente (compile), emular un archivo ejecutable (emulate) y otras opciones queira descubriendo a medida que se familiarice con el programa. 2 Figura 3. Ventana de edicin o Entorno de Desarrollo Integrado IDE del EMU8086. Bueno, es el momento de estudiar nuestro primer programa en lenguaje ensamblador,el cual imprime en pantalla algunas cadenas de texto. Para comprender mejor comofunciona revise primero la Figura 4, donde se presenta un diagrama de flujo. INICIO ALMACENA EN EL REGISTRO ACUMULADOR(AX) LADIRECCION DE MEMORIA A PARTIR DE LA CUAL SE HANALMACENADO LOS DATOS CON LOS QUE TRABAJARAEL PROGRAMATRANSFIERE (COPIA) EL CONTENIDO DEL REGISTROACUMULADOR (EN ESTE CASO LA DIRECCION DEMEMORIAL DESDE DONDE SE ALMACENAN LOS DATOSCON LOS QUE TRABAJARA EL PROGRAMA) ALREGISTRO SEGMENTO DE DATOS (DS).EJECUTA LA MACRO-INSTRUCCIN LLAMADA Print_String LA CUALIMPRIME UNA CADENA DE TEXTO, ESTA CADENA SE ESPECIFICA ALPASARLE UN PARAMETRO A LA MACRO-INSTRUCCIN, USANDO ELNOMBRE DE LA CADENA QUE SE DESEA ESCRIBIR DESPUES DELLLAMADO A LA MACRO-INSTRUCCIN (en este caso llamada frase).VUELVE A EJECUTAR

Print_String PARA IMPRIMIR OTRACADENA DE TEXTO, EN ESTE CASO LLAMADA lneaVUELVE A EJECUTAR Print_String PARA IMPRIMIR OTRACADENA DE TEXTO, EN ESTE CASO LLAMADA frase_2ALMACENA EN EL REGISTRO ACUMULADOR EL VALOR4C00h (NUMERO HEXADECIMAL) QUE SERA USADO PORLA SIGUIE LINEA.EJECUTA INTERRUPCION 21h.ESTE ES UN PROGRAMA QUE FORMA PARTE DE LASRUTINAS DEL SISTEMA OPERATIVO, TIENE MUCHASOPCIONES PARA ELEGIR, LA CUAL SE DECIDE EN BASEAL CONTENIDO DEL REGISTRO ACUMULADOR FIN11 Figura 4. Diagrama de Flujo del ejemplo. Ahora observe la Tabla 1 donde aparece el cdigo fuente escrito en lenguajeensamblador. Por favor note que el programa esta compuesto de diferentes bloque: 3 PRIMER PROGRAMA EN LENGUAJE ENSAMBLADOR include IO_MAC_1.h ;Indica al compilador que incluya la librera respectiva.;El archivo IO_MAC_1.h debe estar en la misma carpeta;que el cdigo fuente.model small;Indica al compilador el modelo de memoria que se usara;en este caso se usa un modelo pequeo;=====================================================; ZONA PARA DECLARAR LAS VARIABLE Y CONSTANTES DEL PROGRAMA;SE LE CONOCE COMO SEGMENTO DE DATOS;; Inicia con la directiva simplificada .data;=====================================================.datafrase db 'Hola!!$' ;Declara cadena que se imprimirafrase_2 db 'Saludos$' ;Declara cadena que se imprimiralinea db 0Ah, 0Dh, '$' ;Baja una linea, equivale a un ENTER;===========================================================; 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;==========================================================.codeINICIO:mov ax, @DATA ;Bloque de instrucciones que ubican la zona de memoria donde estn; almacenados los datos con los que el programa va a trabajar.; Se utiliza la instruccin MOV (mover) para trasladar al registro AX el segmento; memoria donde estn almacenados los datosmov ds, ax ; Transfiere (en realidad copia) el contenido del registro AX al registro DS Print_String frase ;Macro-Instruccin que imprime la cadena llamada frase Print_String linea ; Macro-Instruccin que imprime una cadena llamada linea; El efecto final es que el cursor baja una lnea, similar a digitar un ENTERPrint_String frase_2 ;Macro-Instruccin que imprime la cadena llamada frase_2FIN: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;==========================================================.stackend INICIO

Tabla 1. Programa en lenguaje ensamblador. a)Directivas de preproceso: Le indican al compilador que debe realizar una seriede acciones particulares en el momento de convertir el archivo fuente (ASM) enarchivo objeto (OBJ).b)Segmento de Datos: Donde se declaran las variables y constantes que elprograma va a utilizar. 4 c)Segmento de Cdigo: Donde especifica lo que deseamos que el programa haga.Para especificarlo se pueden usar: instrucciones (propias del microprocsador),Macro-instrucciones (similar a los comandos de los lenguajes de alto nivel) yprocedimientos (similar a las funciones definidas por el usuario de los lenguajesde alto nivel).d)Segmento de PILA o STACK: bloque de memoria donde almacenan datosintermedios que se generan durante la ejecucin de un programa. En este no sedeclaran variables o constantes como en el segmento de datos, sino que seadministra como una memoria LIFO, el ltimo en entrar es el primero en salir.e)Directiva que indica el fin del archivo, cualquier instruccin posterior a esta lneaser ignorada.Digite el cdigo en el IDE, note como se le asignan diferentes colores a las lneas,dependiendo si son instrucciones, macro-instrucciones, comentarios, cadenas de texto(formato ASCII), directivas, etc.Al terminar de digitar el cdigo salve el archivo usando como nombre su nmero decarnet (8 caracteres) y con extensin ASM (ensamblador).Presione el botn compile para convertir el archivo fuente (ASM) en ejecutable(lenguaje de mquina), debe aclararse que al compilar solo se crea un archivo objetoque no es ejecutable, se necesita de otro proceso, el enlazado (LINK), para lograr queel archivo objeto se convierta en ejecutable (EXE), pero por facilidad el emuladorrealiza los dos procesos de forma secuencial al presionar el botn compile.Mientras se realiza la compilacin y enlazado se abre un ventana llamada assemblerstatus que le informa sobre los resultados del proceso. Si el resultado es exitosoobservar un mensaje como el de la Figura 5. 5 Figura 5. Estado del proceso de compilacin. Luego se le pedir que salve el archivo EXE, por defecto se le asigna el mismo nombredel archivo fuente, pero usted puede elegir otro, siempre de 8 caracteres mximo, useel nombre por defecto, Si existe algn problema (error de sintaxis u otros) en laventana assembler status se le indican las lneas donde estn los errores, para hacerlas correcciones cierre la ventana assembler status y corrija el archivo fuente, que seencuentra en el IDE e intente compilar nuevamente.Volviendo al caso de no tener errores, la ventana assembler status le muestradiferentes opciones como revisar algunos de los archivos complementarios que secrearon en el proceso de compilacin y enlazado (opcin view), puede ejecutar elarchivo usando el programa DEBUG (opcin external). Esta es otra herramienta que seestudiar ms adelante en el curso, puede ejecutar directamente el archive EXE (RUN)o puede cerrar la ventana (close). Seleccione esta opcin.Emule el archivo EXE presionando el botn emulate. Notar que se abren dosventanas: Una llamada emulator en la que podr monitorear la mayora de procesosal ejecutar el programa y otra llamada original

sourse code que muestra el cdigofuente del archivo, esta ventana es diferente de la que observa en el IDE porque ensta podr observar cual instruccin esta a punto de ejecutarse, es ideal al correprogramas pasos a paso.Ahora observe con ms detenimiento la ventana llamada emulator Figura 6, staser la que ms utilice a la hora de ejecutar las prcticas de laboratorio, por lo que esimportante que la conozca y maneje de forma efectiva. 6 Figura 6. Ventana del Emulador. En la parte superior tiene una barra de herramientas con las siguientes opciones:

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

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 ejecutaro depurar programas.

External, permite ejecutar el programa con otras herramientas diferentes delEMU8086.

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 lacomputadora, por lo que estos son simulados.

Virtual drive, da opciones para administrar las unidades virtuales dealmacenamiento (HDD y FDD virtuales).

Help, activa la herramienta de ayuda.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 programaque acaba de ser corrido.

Single step, ejecuta solamente una instruccin o macroinstruccin (paso apaso).

Step back, retrocede una instruccin que ya fue ejecutada (funcin muy til aldepurar 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, insertarun break point cuando se est depurando programas.La parte media esta dividida en tres partes:

Parte izquierda denominada registers, donde se puede monitorear elcontenido de los registros del microprocesador

Parte central, donde se puede observar el contenido de la memoria desde dondese est ejecutando el programa. Primero se notan las direcciones del bloque dememoria que se visualiza, estas direcciones de dan en un formato llamado fsicoo absoluto (existe otro formato para las direcciones) dado por cinco cifrashexadecimales (20 bits) lo que indica que en este bus de direcciones se puededireccional desde la direccin 00000h (direccin 0) hasta la direccin FFFFFh(direccin 148575). Luego se indica el contenido de cada palabra (cada una de1 byte), por facilidad el contenido se presenta en hexadecimal, decimal einterpretado como un carcter ASCII.

Parte derecha, donde puede observar el contenido de la memoria, pero esta vezno se detalla con direcciones especficas, sino que cada bloque de datos esinterpretado como un conjunto de instrucciones (lo que llamaremos programaDESENSAMBLADO) que el microprocesador deber ejecutar. Es importantemencionar que algunas instrucciones se expresan solo con un byte, pero otrasnecesitan varios bytes para ser expresadas.

7 Parte inferior, contiene una serie de botones que permiten un acceso rpido a una seriede ventanas auxiliares, algunas de las cuales se puede activar tambin en la barra deherramientas con la opcin view Regresando a la estructura del programa estudiemos el Segmento de Datos: Puedeobservar que se hab declarado tres cadenas de datos llamadas frase, frase_2 y lnea;note que luego del nombre de la cadena de ha incluido la directiva db (definir byte)que indica al compilador que ese es el tipo de datos que contendr la cadena. A partede eso en las primeras dos cadenas se han usado comillas simples para definir elcontenido, eso indica al compilador que el texto debe ser interpretado como caracteresASCII. En el caso de la ltima cadena los datos no estn entre comillas, lo que indicaque sern interpretados como datos hexadecimales.Para ejecutar el programa presione el botn RUN: note que automticamente se activola ventana emulator screen en la que se pueden observar dos textos impresos, quecorresponden la frase y frase_2. Vamos a estudiar ms detenidamente la ejecucin delprograma.Cierre la ventana emulator screen Prepare el programa para ser ejecutado nuevamente presionando el botn reload.Observe la ventana original sourse code, parece que es una copia fiel del cdigofuente que digito en el IDE (en la Figura 7 puede ver una comparacin entre las dosventanas), pero la primera lnea de cdigo est marcada de color amarillo, esto indicaque es la primera que se ejecutar al correr el programa. Figura 7. Comparacin entre las ventanas de edicin y cdigo fuente. 8 Si observe la ventana emulator (Figura 6), se ha marcado un bloque de bytesalmacenados en memoria, precisamente los de las direcciones fsicas 07120h, 07121hy 07122h que contiene los datos B8h (que equivalea 184d y al carcter ASCII ), losotros datos son 10h y 07h.Los tres juntos equivalen, en lenguaje de mquina, a la MOV AX, @DATA, que yadesensamblada se transforma en mov AX, 0710h, Aparece marcada porque ser laprimera en ejecutarse.Un detalle importante es la sustitucin de la expresin @DATA por un valor numrico,esta sustitucin es producto de la compilacin del cdigo fuente que sustituye lasetiquetas y nombres de variables por direcciones fsicas de memoria. Presione el botn single step note que se ha avanzado una sola lnea, dado que seejecuta una nica instruccin, Tambin se han dado cambios en los registros delmicroprocesador, pero stos se analizarn en la primera gua de laboratorio. Ejecute lasiguiente instruccin, de igual manera se avanz solo un paso.Ahora la lnea marcada no es de color azul, sino negra, en este caso indica que se tratade una Macroinstruccin, que contiene un conjunto completo de instrucciones que seejecutan en bloque. La lgica de esta estructura tiene varias formas de utilizacin, eneste caso se asemejan a formas que ya aplic programando en alto nivel, invoca a unafuncin predefinida en una librera o biblioteca (printf o putchar) y para hacerlo, alinicio tiene que colocar una sentencia #include.Como su nombre lo indica la macroinstruccin imprime una cadena de texto en lapantalla. Esta cadena se especifica pasndole un parmetro a la funcin, la palabra frase.Presione nuevamente single step observe que en la ventana emulator si se haavanzado en original sourse code y no se avanzar hasta ejecutar todas

lasinstrucciones que conforman la macroinstruccin.Presione tres veces single step se activar de forma automtica la ventana emulatorscreen e imprimiendo el texto de la cadena frase, note que el signo de dlar $ finalno se ha impreso.Presione nuevamente single step y se marca la siguiente macroinstruccin, queimprimir la cadena lnea. Esta cadena no se declarado de la misma forma que lasotras, pero aun as se imprime, un detalle importante es que al final de esta cadena seencuentra el dato 24h que corresponde al cdigo ASCII del signo de dlar.Presione cinco veces single step con esto ha bajado el cursor a la siguiente lnea,como si hubiera presionado ENTER en un editor de texto.Presione cinco veces single step para imprimir la cadena frase_2 Ahora aparece marcada una lnea de instruccin (recuerde el color azul). Analicemossu estructura,La estructura sintctica de las lneas de instruccin est formada por elementosllamados campos, dependiendo la instruccin especfica se puede tener uno o varioscampos. 9 Primer campo se le llama cdigo de operacin e indica que es lo deseamos que realiceel microprocesador, bsicamente nos referimos a la instruccin en misma. Este nopuede faltar en una lnea de instruccinSegundo y tercer campo se les llama 1 operando y 2 operando campo. Si solo existeel 1 operando indica que la instruccin se ejecutar ese dato (el dato en cuestinpuede declararse de forma explcita o estar almacenado en un registro del micro o enalguna localidad de memoria). En caso de existir los dos operandos implica que el 2operando es la fuente donde est el dato que se procesar y el 1 operando es eldestino donde se almacenar el resultado de ejecutar la instruccinTomando como ejemplo la instruccin que en este momento est marcada:MOV AX, 4C00hSe entiende que MOV es el cdigo de operacin e indica que un dato se mover (enrealidad se copiar porque la fuente conservar el dato). Por tener tres campos en estalnea de instruccin el 1 operando es el destino donde se copiar el dato (en este casoel registro Acumulador AX del microprocesador) y el 2 operando es el dato que sermovido (en este caso el nmero hexadecimal 4C00h)Ejecute la instruccin, note que efectivamente el dato se copi en el registro, lo quepuede verificar en la ventana emulator La ltima lnea del cdigo usa la instruccin INT (de interrupcin) que es otra formaparticular de invocar una funcin definida previamente, en este caso para terminar elprograma y regresar el control del microprocesador al sistema operativo, de formasimilar a la sentencia return(0) que se usa en lenguaje C.Para visualizar de forma ms clara el proceso para imprimir la cadena lnea edite enel IDE el cdigo fuente, eliminando de el dato 0Dh. Luego de esto realice las accioneslistadas anteriormente para crear un nuevo archivo ejecutable.Ejecute el programa paso a paso y note coma cambian los mensajes en la pantalla.Cambie la cadena, pero ahora solo elimine el 0Ah verifique como afectan los cambiosen la ejecucin.Cul es la funcin individual de los datos 0Ah y 0Dh en el programa?Cul es la relacin de estos y el cdigo ASCII? Para terminar este primer acercamiento con el EMU8086 es importante mostrarle unade las ventanas ms tiles del emulador la ventana de variables, es muy similar a laherramienta match del lenguaje C en la que usted poda monitorear el estado de lasvariables declaradas a medida que el programa se va desarrollando.Recargue el programa y cierre la venta emulator screen. Usando los botones de laparte inferior del emulator active la ventana

denominada var. Observar que estnlistadas las tres variables declaradas al inicio del archivo fuente como se muestra en laFigura 8a.Note que aparece marcada la variable frase e indica que su contenido es 48hexadecimal (indicado por la casilla llamada show as), pero sabemos que estavariable contiene ms datos, para poder verlos todos juntos, cambien el datos en la 10 casilla elements de 1 a 7, observar una serie de datos hexadecimales. Puedecambiar la representacin a datos ASCII cambiando la opcin en la casilla show as yverificar que efectivamente es el contenido de la cadena frase, Figura 8b. Si durantela ejecucin del programa el contenido de la cadena cambia en esta ventana podrobservarlo.Marque la segunda variable llamada frase_2 observe la informacin, se le indica queel contiene el dato 53h, cambie la representacin de datos a ASCII y la cantidad deelementos de 1 a 8, debera observas la misma informacin que ve en la Figura 8c.Ahora marque la tercera variable lnea, el contenido es 0Ah, cambie a representacinASCII y 3 elementos, debera observas la misma informacin que ve en la Figura 8d.Bueno con estas ideas bsicas podr iniciar el estudio de la programacin en lenguajeensamblador apoyndose en los recursos que le brinda el EMU8086, adelante. (a)(b)(c)(d) 11

S-ar putea să vă placă și