Sei sulla pagina 1di 49

Fundamentos bsicos que se utilizaran para la practica

Estructura Interna del Intel 8086 y 8088

El 8086 y el 8088 tienen internamente dos componentes: La Unidad de Interfaz del Bus La Unidad de ejecucin.

La Unidad de Ejecucin procesa las instrucciones del CPU. Est conformada por los registros generales, los registros ndice y apuntadores, los flags, la ALU, y la lgica de control que maneja todo el proceso para ejecutar las instrucciones.

La Unidad de Interfaz del Bus maneja la lectura y escritura desde y hacia la memoria y los puertos de entrada/salida. Est conformada por los registros de segmento, una cola de 4 bytes para instrucciones en el 8088 y de 6 en el 8086, y lgica para controlar los buses externos del microprocesador.

Los Registros
Los registros del procesador, se usan para contener los datos con que se est trabajando puesto que el acceso a los registros es mucho ms rpido que los accesos a memoria.

Se pueden realizar operaciones aritmticas y lgicas, comparaciones, entre otras. Se pueden hacer estas operaciones con todos los registros excepto los de segmento, el IP, y los flags.

Registros de uso general


Los registros de propsito general son el AX, BX, CX, y DX, de 16 bits. Cada uno de ellos se divide en dos registros de 8 bits, llamados AH y AL, BH y BL, CH y CL, y, DH y DL, H significando Hight (alto) y L significando Low (bajo), indicando la parte alta o la parte baja del registro correspondiente de 16 bits. Un programa poda usar tanto los registros de 16 bits como los registros de 8 bits.

Aparte del uso general de los registros para hacer clculos aritmticos y lgicos, existen instrucciones que usan estos registros con un uso particular especializado, como se indica a continuacin:

Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida, y multiplicacin y divisin (estas dos ltimas en conjunto con el registro DX) Registro BX: El registro BX es el registro base, y es el nico registro de propsito general que puede ser un ndice para direccionamiento indexado

Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits
Registro DX: El registro DX es el registro de datos. En algunas operaciones se indica mediante este registro el nmero de puerto de entrada/salida, y en las operaciones de multiplicacin y divisin de 16 bits se utiliza junto con el acumulador AX

Registros ndices
Los registros SI y DI estn disponibles para direccionamiento indexado y para operaciones de cadenas de caracteres. Registro SI: El registro ndice fuente de 16 bits es requerido por algunas operaciones con cadenas de caracteres. El SI est asociado con el segmento DS. Registro DI: El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. El DI est asociado con el segmento ES.

Registros Apuntadores
Los registros SP (apuntador de pila) y BP (apuntador base) estn asociados con el registro SS y permiten al sistema acceder a datos en el segmento de la pila. Registro SP: El apuntador de pila de 16 bits est asociado con el segmento SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que est siendo procesada en la pila. El sistema maneja de manera automtica este registro, aunque el programa puede hacer ciertas manipulaciones con l. Registro BP: El apuntador base de 16 bits facilita la referencia de parmetros dentro de la pila.

Registro de Banderas
Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la mquina y el resultado del procesamiento. Muchas instrucciones aritmticas y de comparacin cambian el estado de las banderas y apoyndose en ellas se pueden tomar decisiones para determinar la accin subsecuente. La tabla contiene 16 posiciones (de 0 a 15), que son los 16 bits del registro de banderas, numeradas de derecha a izquierda. La posicin 0 la encontraremos a la derecha y la posicin 15 a la izquierda.

Los bits de las banderas son las siguientes:


OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros con signo (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera. DF (direccin): Controla la seleccin de incremento o decremento de los registros SI y DI en las operaciones con cadenas de caracteres (1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD. IF (interrupcin): Controla el disparo de las interrupciones (1=habilita las interrupciones; 0=deshabilita las interrupciones). La interrupcin no enmascarable es la nica que no puede ser bloqueada por esta bandera. El estado de la bandera IF se controla con las instrucciones STI y CLI. TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso) SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo). ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero). AF (acarreo auxiliar): Contiene el acarreo del bit 3. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL despus de una suma o resta BCD. PF (paridad): Indica si el nmero de bits 1, del byte menos significativos de una operacin, es par (0=nmero de bits 1 es impar; 1=nmero de bits 1 es par). CF (acarreo): Contiene el acarreo del bit de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del ltimo bit en una operacin de desplazamiento o de rotacin.

Definen reas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. Estas reas pueden solaparse total o parcialmente. No es posible acceder a una posicin de memoria no definida por algn segmento: si es preciso, habr de moverse alguno. Registro CS: El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, ms un valor de desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Para propsitos de programacin normal, no se necesita referenciar el registro CS. Registro DS: La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. Esta direccin, ms un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un byte especfico en el segmento de datos. Registro SS: El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro SS. Esta direccin de segmento, ms un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que est siendo direccionada. Para propsitos de programacin normal, no se necesita referenciar el registro SS. Registro ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento para manejar el direccionamiento de memoria. El registro ES est asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin de segmento apropiada.

Registros de Segmentos

Registro Apuntador de Instrucciones

El registro IP de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El IP est asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se est ejecutando actualmente en la memoria.

Objetivos: Utilizar los recursos del lenguaje ensamblador de un procesador real. Analizar la ejecucin de instrucciones en un procesador con arquitectura clsica.

Material para realizar la practica Software:


Notepad++ V6.5 Turbo Assembler (TASM) V5 S.O. windows V.X < 8 :: 32 bits Calculadora (windows)

Hardware:
Equipo Porttil

Code Source:
3 cdigos fuentes <*.asm> (programas) para analizar, compilar y ejecutar

Preparando el entorno de Desarrollo


Instalar el Notepad++ Instalar el Turbo Assembler (TASM) Configurar Variables del Sistema agregando C:\TASM\BIN; al path.

Pasos a realizar en la practica

nada.asm

Analizando: nada.asm
Para analizar de una forma mas detallada el codigo de este programa, abriremos el archivo nada.asm con el programa anteriormente instalado Notepad++.

Estructura Basica
Los segmentos lgicos contienen los tres componentes de un programa: CODE, DATA y STACK. (PUEDEN O NO LLEVAR ALGUNOS DE ESTOS 3 ELEMENTOS Y AUN ASI FUNCIONAR) El ensamblador organiza las tres partes de tal forma que ocupe segmentos fsicos de memoria. CS, DS y SS contienen las direcciones de memoria donde residen los segmentos lgicos

*1

Tiny - se combina datos y cdigo en el mismo segmento, debe ser menor que 64K. Este modelo permite crear archivos .COM el cual se origina en la localidad 100H. Small - contiene dos segmentos separados -Code <=64K y Data <= 64K

Modelos de Memoria del Ensamblador

Medium - contiene un segmento de datos y cualquier nmero de segmentos de cdigo.


Compact - contiene un segmento de cdigo y cualquier nmero de segmentos de datos.

Large - Permite cualquier nmero de segmentos de datos y cdigo.


Huge -Igual que Large, pero los segmentos de datos pueden tener ms de 64K.

PROC ENDP y END


Directivas PROC y ENDP: define procedimientos (subrutinas)
nombre
. . .

PROC
.. .. .

;procedimiento
; dentro del ; segmento ; de cdigo

nombre

ENDP

Directiva END: especifica el FIN del programa fuente.

*2

Cuando usted arranca una PC se ejecuta automticamente varias tareas. Una es cargar el sistema operativo del disco duro a la memoria RAM. MSDOS carga tres archivos en RAM: IBMBIO.COM, IBMDOS.COM y COMMAND.COM. El archivo IBMDOS contiene las subrutinas de servicio del DOS. Hay diez interrupciones del DOS que son: Interrupcin Uso 20H 21H 22H 23H 24H 25H 26H 27H 2FH 33H Termina un Programa Funciones del DOS Direccin Terminal. Direccin de ruptura (brake address) Manejador de error crtico Lee direcciones absolutas de Disco Escribe en direcciones absolutas de disco Termina y permanece Residente (TSR) Interrupcin Multiplex. Manejador de Ratn

Interrupciones del DOS

La mayora de servicios funciones del sistema operativo MSDOS se obtienen a travs de la interrupcin software 21H. Cuando se accede a la INT 21H, hay que indicar el nmero de funcin que queremos ejecutar. La llamada a la INT 21H se realizar como sigue: - Introducimos en (AH) el nmero de funcin a la que deseamos acceder. - En caso de que deseemos acceder a una sub-funcin dentro de una funcin, debemos indicarlo introduciendo en (AL) el nmero de esa sub-funcin.
En resumen la interrupcin 21H realizara la accin o funcin , dependiendo de lo que se contenga en el registro AX o DX en ese momento.

Interrupcin 21H

A travs de la interrupcin INT 21H se pueden llamar 115 funciones. Las funciones ms importantes son: Funcin 01H: Leer teclado con eco Espera por una entrada desde teclado. La funcin retorna uno de los dos cdigos: AL = ASCII de la tecla pulsada AL = 00 significa que el usuario puls una de las teclas de funciones extendidas- home, page up la funcin responde a CTRL + BREAK. Funcin 02H: Exhibir un carcter en pantalla. El carcter ASCII ha exhibirse se carga en DL. Funcin 06H: Lectura directa de teclado y despliegue de datos en pantalla - Entrada de datos, cargar 0FFH en DL. Si no hay caracteres en el buffer del teclado se enciende ZF y no espera por una entrada. Si hay caracteres esperado en el buffer entonces DL se carga con el cdigo ASCII del carcter y despeja ZF. La funcin no rebota el carcter en pantalla ni responde a CTRL + BREAK. - Despliegue de datos en pantalla, cargar el cdigo ASCII en DL.

Funciones del 21H

Funcin 07H: Lectura directa de teclado sin eco. Opera de manera similar que la funcin 06H con DL = 0FFH, pero no retorna de la funcin hasta que se presione una tecla. Retorna en AL el cdigo ASCII. Funcin 08H: Lee entrada estandar sin eco. Similar a la funcin 07H, excepto que lee el dispositivo de entrada estandar. Puede asignarse como dispositivo estandar el teclado o el puerto COM. Responde a CTRL + BREAK mientras que 06H y 07H no. Retorna con cdigo ASCII en AL. Funcin 09H: Exhibe una cadena de caracteres. La cadena de caracteres debe terminar con un ASCII $ (24H). La cadena puede ser de cualquier longitud y puede contener caracteres de control tales como LF (0AH) y CR (0DH). mensaje db Buenos Das,$ ;.. mensaje db Buenos Das$ DS:DX = direccin de cadena de caracteres

Funciones 21H

Funcin 4CH Terminacin de Programa con Cdigo de Retorno LLAMADA: AH = 4CH AL = Cdigo de retorno para el programa padre DEVUELVE: NADA. EFECTO: Se finaliza la ejecucin del programa en curso, y se devuelve un cdigo de retorno al programa padre. Mediante este cdigo de retorno, se puede ofrecer informacin al programa padre acerca de la ejecucin del programa (si se ha producido error, etc...) La terminacin del programa conlleva: - Liberacin de toda la memoria asignada al programa. - Todos los buffers de fichero son vaciados. - Se cierra cualquier fichero abierto por el programa. - Se restauran los tres vectores de interrupcin (INT 22H, INT 23H, INT 24H) cuyo contenido original fue almacenado en la pila.

Funciones 21H

nada.asm

Ensamblado
Desde el Notepad++ donde tenemos el Code Source, abrimos el Command Prompt. Probar editor de textos de TASM CREAR CODIGO OBJETO Ensamblar el Cdigo Fuente TASM [?.asm] Ensamblar el Cdigo Fuente TASM /l [?.asm] ANALIZAR ARCHIVO .LST Abrimos con el editor de TASM EDIT nada.asm Abrimos con el Notepad++

nada.asm

Enlazado para crear el EXE

Abrimos el Command Prompt. Enlazar el codigo objeto TLINK /v [?.obj] Ejecutar el EXE. [nada.exe] Analizar archivo nada.map Comparar con el archivo nada.lst

EL Debug y el Desensamblado
1 Ejecutar el debug de windows -d muestra los posibles valores de la memoria en ascii -u desensambla el ejecutable -t muestra el contenido de los registros en ese momento 1.1) Previo uso del debug t, u, d 2.1) Mostrar como se mueve/cambian los valores en los registro mediante un programa ASM Cdigo de un programa que suma 3 nmeros: Mov ax, 2 Mov bx,3 Add ax,bx Mov bx, 5 Add ax,bx int 20 *Abrir 3 consolas de comandos *Escribir el mismo codigo -Observar el cambio en los registros -Desensamblar el programa -Mostrar codigo ASCII equivalente en la memoria

Analizar como las instrucciones del lenguaje maquina pasan a ser ejecutadas por el microprocesador

2 Abrir 3 consolas de comandos: 2.1) En ambas consolas ejecutar debug nada.exe 2.2) En una consola teclear d 2.3) En otra consola teclear u 2.4) En cualquier consola teclear t 3 Caracteres imprimibles - Cdigo ASCII 4 Analizar y comparar nada.map & nada.lst

Mensaje.asm

Analizando: Mensaje.asm

Para analizar de una forma mas detallada el codigo de este programa, abriremos el archivo mensaje.asm con el programa anteriormente instalado Notepad++.

mensaje.asm
TASM /l mensaje.asm

mensaje.asm
TLINK /v mensaje.obj

Depuracion
Abrir el archivo mensaje.lst & mensaje.obj Notepad++ Abrir 3 consolas de comandos para observar la depuracion del archivo EXE debug mensaje.exe
-t -u -d

Hexa.asm

Analizando: Mensaje.asm

Para analizar de una forma mas detallada el codigo de este programa, abriremos el archivo Hexa.asm con el programa anteriormente instalado Notepad++.

hexa.asm
TASM /l hexa.asm

hexa.asm
TLINK /v hexa.obj

Depuracion
Abrir el archivo hexa.lst & hexa.obj Notepad++ Abrir 3 consolas de comandos para observar la depuracion del archivo EXE debug hexa.exe
-t -u -d

Gracias por su atencin

Equipo #6

Se coloca @DATA en el registro AX para despues pasarlo al registro DS ya que no se puede copiar directamente una constante a un registro de segmento. El contenido de @DATA es el nmero del segmento que ser utilizado para los datos. Luego se guarda en el registro DX un valor dado por "Offset Mensaje" que nos da la direccin donde se encuentra la cadena de caracteres en el segmento de datos. Luego utiliza la opcin 9 (Dada por el valor de AH) de la interrupcin 21H para desplegar la cadena posicionada en la direccin que contiene DX. Por ltimo utiliza la opcin 4CH de la interrupcin 21H para terminar la ejecucin del programa (aunque cargamos al registro AX el valor 4C00H la interrupcin 21H solo toma como opcin el contenido del registro AH).