Coder Social home page Coder Social logo

arquitectura's Introduction

Arquitectura

Emulador 8086

1. Introducción

El emu8086 es un emulador del microprocesador 8086 (Intel o AMD compatible) con assembler integrado. A diferencia del entorno de programación en assembler utilizado anteriormente en la cátedra (MASM), este entorno corre sobre Windows y cuenta con una interfaz gráfica muy amigable e intuitiva que facilita el aprendizaje el leguaje de programación en assembler.

1.1. Tamaño de los datos

En el 8086/88 se definen los siguientes tamaños de datos:
            4 bits - nibble   
            8 bits - byte
            16 bits - word
            32 bits - dword 

1.2. Almacenamiento de datos

El 8086/88 usa el formato de almacenamiento denominado “little endian”, esto quiere decir que el byte menos significativa (LSB) del dato es guardada en la parte baja de la memoria. Por ejemplo el dato 0x1122 será almacenado en memoria: Es importante tener esto en cuanta a la hora de acceder a los datos para operar con ellos.

1.3. Segmentación

El 8086/88 tiene un ancho de bus de datos de 16 bits y un ancho de bus de direcciones de 20 bits. Con 20 bits de direcciones se puede acceder a 220 = 1 Mega posiciones de memoria. Como cada dirección de memoria contiene un byte, el total de memoria accedido por el procesador es de 1 Mbyte. El bus de datos de 16 bits lo que implica que en cada acceso a memoria se leen dos 22 11 000….0 FFF….F Ensamblador 8086/88 2 posiciones. Esta es la razón por que la que es importante saber el modo de almacenamiento de los datos en memoria, visto en el apartado anterior. El problema que se les planteó a los diseñadores fue que siendo los registros internos del procesador de 16 bits, y el bus de direcciones de 20; faltaban 4 bits para poder aprovechar al máximo las capacidades de direccionamiento del procesador. Para resolver esto, cada dirección de memoria será especificada como un segmento y un desplazamiento dentro de ese segmento. Esta solución divide la memoria en segmemtos de 64 K, lo cual limitó bastante los diseños de los procesadores posteriores de la familia (80286,80386 etc.); aunque posteriormente se idearon métodos para resolver este problema, como la memoria extendida (no compatible, por supuesto, con el 8086/88). Así pues el 8086/88 dispone de una serie de registros para almacenar los valores de segmentos, como veremos en los siguientes apartados. Para obtener la dirección de memoria (dirección efectiva): se toma el valor de registro de segmento, se desplaza 4 bits, y se le suma el valor del desplazamiento. Segmento 0000 0000 0000 1010 desplazado 4 bits Desplazamiento + 0101 1111 0000 1010 Dirección efectiva 0000 0101 1111 0101 1010 Esta operación la realiza el procesador de forma interna automáticamente.

2. Utilización del entorno

2.1 Iniciar

Para iniciar el entorno se deje ejecutar el archivo emu8086.exe que se encuentra en el directorio de instalación (ej. c:\emu8086).

2.2 Diferentes templantes

Luego de iniciar el entorno el emu8086 ofrece diferentes opciones:

• New: permite escribir un nuevo código en lenguaje ensamblador (“Código Fuente” con extensión .ASM)

• Code examples: a una serie de programas ejemplos muy útiles al momento de aprender a utilizar el entorno y la programación en assembler.

• Quick start tutor: llama al browser y permite explorar gran variedad de documentos de ayuda.

• Recent file: muestra los últimos archivos con los cuales se estuvo trabajando. En el caso de hacer click en New, el entorno ofrece trabajar con diferentes plantillas o templates:

•COM template (directiva #make_com#): es el formato más simple y antiguo de un archivo ejecutable, típicamente estos archivos se cargan con un offset de 100h (256 bytes). Por esta razón se debe agregar la directiva ORG 100h al comienzo del código para indicar la utilización de este tipo de archivos. Formato soportado por DOS y Windows Command Prompt.

• EXE template (directiva #make_exe#): este es el formato más avanzado de un archivo ejecutable. No tiene limitaciones en cuanto al tamaño del archivo y número de segmentos. Este template permite crear un programa exe simple con los segmentos de código, datos y pila predefinidos. Este tipo de archivo está soportado por Windows y Windows Command Prompt. El ensamblador elige automáticamente este tipo de archivo cuando encuentra definido un segmento de pila.

• BIN template (directiva #make_bin#): es un archivo ejecutable simple. Permite definir el valor de todos los registros, segmentos y el lugar de memoria donde se cargará a este programa. Cuando por ejemplo el ensamblador carga el archivo "MY.BIN" en el emulador buscará el archivo "MY.BINF" y cargará al archivo "MY.BIN" en la ubicación especificada en "MY.BINF", al igual que el valor inicial configurado para todos los registros. En el caso de que el emulador no encuentre al archivo "MY.BINF", se utilizará el valor actual de los registros al momento de la ejecución del .BIN y este código se ubicará en los valores que tengan en ese momento CS:IP.

• BOOT template (directiva #make_boot#): funciona igual de que un .BIN, pero utiliza valores predefinidos para ubicar el código y que coinciden con el primer track de un floppy disk (boot sector). La única diferencia con la directiva #make_bin# es que carga el código en la dirección predefinida 0000:7c00h. Este template permite emular el bootedo de una IBM PC desde el floppy disk.

2.3 Ventana emulador.

A los fines de avanzar con los primeros pasos con el emu8086, en esto caso seleccionaremos la opción “empty workspace”. Luego de esto tendremos acceso a la ventana principal del emulador que cuenta con una barra de menú de Windows (file, edit, bookmarks, assembler, etc.) y varios botones de uso frecuente como New, Open, Save, Compile o Emulate. Esta ventana es en definitiva un editor de texto que permite crear y editar el código fuente de assembler.

2.4 Código de la suma de 2 números

2.5 Emulate

Al hacer clic en el en “Emulate”, se tendrá acceso a gran variedad de funciones e información y seleccionamos run:

2.6 Compilamos nuestro ejercicio y mostramos a la pantalla:

Ejemplo de código de Emulador 8086

          ;Ejemplo de un lenjuage ensamblador - Emu8086
          include "emu8086.inc"   

          .data
          Suma db 2 dup(?)

            Sumas proc 
              printn "Ingresar el primer numero;"
              call scan_num
              mov suma[0],cl
              printn ""
              printn "Ingresar el segundo numero;"
              call scan_num
              mov suma[1],cl
              printn ""

              xor ax,ax
              add al,suma[0]
              add al,suma[1]
              printn ""  
              printn "La suma es:" 
              call print_num  
              sumas endp
              
              exit:
              printn ""
              printn "Presione enter para salir..." 
              mov ah, 0
              int 16h
              ret

              define_print_string
              define_print_num
              define_print_num_uns
              define_scan_num
              
         end.

arquitectura's People

Contributors

ladyvargas avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.