You are on page 1of 6

Grupo de Arquitectura de Computadores y Diseo Lgico. UEX, 1997. http://atc.unex.es/gacdl Funcionamiento del 8086/8088 Germn Galeano Gil.

Juan A. Gmez Puildo

Funcionamiento del 8086/8088


En este captulo se ofrece una pequea descripcin del funcionamiento de un 8086/8088. En concreto, se explica cmo est organizada la memoria, como se ejecuta un programa y cmo se manejan las interrupciones.

Modos de direccionamiento
En el 8086/8088, los parmetros (operadores) de una instruccin pueden ser de tres tipos: 1. registros internos de la CPU, 2. valores inmediatos, 3. direcciones de memoria, de las que hay cinco tipos diferentes de representacin. En total son siete las clases de parmetros que se pueden utilizar y conjuntamente forman los llamados siete modos de direccionamiento.
MODO Registro Valor Variable Indirecto mediante registro Relativo a base Directo indexado Indexado a base OPERADOR Registro Valor inmediato Offset inmediato [BX] [BP] [DI] [SI] [BX] + desp [BP] + desp [DI] + desp [SI] + desp [BX] + [SI] + desp [BX] + [DI] + desp [BP] + [SI] + desp [BP] + [DI] + desp REGISTRO BASE --DS DS SS DS DS DS SS DS DS DS DS SS SS EJEMPLO
MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV AX, BX AX, 2604 AX, [1432] DX,DS:[BX] DX,SS:[BP] DX,DS:[DI] DX,DS:[SI] CX,DS:[BX+40000] CX,SS:[BP+40000] CX,DS:[DI+40000] CX,DS:[SI+40000] AX,DS:[BX][SI]+300 AX,DS:[BX][DI]+300 AX,SS:[BP][SI]+300 AX,SS:[BP][DI]+300

Figura.1. Modos de direccionamiento existentes en el 8086/8088.

En la figura 1, se puede observar un esquema de todos los modos de direccionamiento, que se detallan a continuacin: 1. Registros internos: el origen y destino de la operacin son los registros internos de la CPU. 2. Valores inmediatos: en este modo, el origen de los datos (y slo el origen) es un valor numrico.

Grupo de Arquitectura de Computadores y Diseo Lgico. UEX, 1997. http://atc.unex.es/gacdl Funcionamiento del 8086/8088 Germn Galeano Gil. Juan A. Gmez Puildo

3. Valores de memoria. Hay cinco modos de acceso a memoria: 3.1 Modo directo: Se indica la direccin de memoria a la que se quiere acceder. 3.2 Modo indirecto mediante registro: Es similar al modo anterior slo que el valor del desplazamiento del operando no se indica directamente sino que se encuentra en un registro de la CPU. 3.3 Modo relativo a base: Es unir los dos modos anteriores. Consiste en indicar la posicin del operando utilizando como desplazamiento el valor de un registro sumado con una cantidad constante. 3.4 Modo directo indexado: Idntico al anterior pero usando como registro de desplazamiento el registro SI o el DI. 3.5 Modo indexado a base: Este es el modo ms complejo, y se podra decir que es el resultado de unir los cuatro anteriores. En este modo, el desplazamiento del operando se compone a partir de un registro que hace de base, un registro ndice y un valor inmediato que se les suma.

La pila (stack)
La pila es una caracterstica interna del 8086/8088. Proporciona a los programas un lugar donde almacenar y seguir la pista del trabajo que se est llevando a cabo. La funcin ms importante de la pila es la de mantener el registro de los lugares donde se llam a una subrutina y de los parmetros que se le pasaron. La pila tambin puede utilizarse para el almacenamiento temporal de datos de trabajo, aunque esto es menos fundamental y no tan comn. La pila obtiene su nombre por analoga con los montones de platos apilados (pilas de platos). Cuando un dato nuevo es introducido (push) en la cima de la pila, ste ser el primer en ser extrado (pop). Por eso se dice que la pila siempre opera en el orden ltimo en entrar, primero en salir (LIFO, Last In First Out). Esto significa que cuando la pila se utiliza para seguir la pista de los retornos de las subrutinas, la primera llamada a subrutina que se hizo es la ltima que vuelve. De esta manera, la pila mantiene ordenado el funcionamiento del programa, las subrutinas y las rutinas de tratamiento de interrupcin, sin importar lo complejo de la operacin. La pila se utiliza desde la parte de abajo (direccin ms alta) a la parte de arriba (direccin ms baja), de forma que cuando un dato es introducido (push) a la cima de la pila, se almacena en la posicin de memoria justo por debajo de la cima actual. As, la pila crece hacia abajo de forma que, a medida que se aaden datos, la posicin de la cima se mueve ms y ms hacia direcciones ms bajas, decrementando cada vez el valor de SP.

Grupo de Arquitectura de Computadores y Diseo Lgico. UEX, 1997. http://atc.unex.es/gacdl Funcionamiento del 8086/8088 Germn Galeano Gil. Juan A. Gmez Puildo

1008 1006 1004 1002 1000

5E00 4D00 3C00

Final pila Cima pila


(SP = 1004)

1008 1006 1004 1002 1000

5E00 4D00 3C00 2B00

Final pila Antigua cima Cima pila


(SP = 1002)

1008 1006 1004 1002 1000

5E00 4D00 3C00

Final pila Cima pila


(SP = 1004)

a) Pila antes de un PUSH

b) Pila despus de un PUSH

c) Pila despus de un POP

Figura 2. Ejemplos del funcionamiento de una pila.

Cualquier parte de un programa puede crear un nuevo espacio de pila en el momento que desee. Por lo general, cuando un programa est funcionando se crea para l una sola pila y se utiliza durante todo el funcionamiento. No hay una forma sencilla de estimar el tamao de la pila que un programa pueda necesitar, y el diseo del 8086/8088 no proporciona ninguna manera automtica de detectar cundo el espacio de pila est agotado o casi agotado. Esto puede llevar a que los programadores estn indecisos acerca del espacio que deben reservar para la pila. Una estimacin conservadora del espacio que hay que reservar da alrededor de 2 KB (2048 bytes), que es la cantidad que asignan por defecto la mayora de los compiladores de lenguajes de alto nivel.

Las interrupciones
Las interrupciones1 son mecanismos utilizados en los ordenadores por medio de los cuales es posible interrumpir la ejecucin de un programa para atender la llegada de un acontecimiento externo. As, pues, son seales que se le envan a la CPU para que suspenda la ejecucin de la instruccin en curso y atienda una peticin determinada. Hay cuatro tipo de interrupciones: Interrupciones hardware: Son las generadas por la circutera del ordenador en respuesta a algn evento como pulsar una tecla del teclado. Este tipo de interrupciones la maneja el controlador de interrupciones, que establece la prioridad antes de enviar la seal a la CPU. Interrupciones internas: Son las generadas por la propia CPU cuando se produce una situacin anormal, como por ejemplo, una divisin por cero. Interrupciones software: Son las generadas por el propio programa para invocar a ciertas rutinas almacenadas en memoria (ROM o RAM). Es posible cambiar estas rutinas. Las interrupciones se aprovechan tambin en la actualidad como funciones software: no son activadas por dispositivos externos al procesador, sino que lo son por los propios programas. Las interrupciones software pueden ser activadas internamente por la propia CPU cuando se producen situaciones especiales, como, por ejemplo, cuando se intenta

Para ms informacin ver [ENI01], [PA01], [PCI00] y [TE01]

Grupo de Arquitectura de Computadores y Diseo Lgico. UEX, 1997. http://atc.unex.es/gacdl Funcionamiento del 8086/8088 Germn Galeano Gil. Juan A. Gmez Puildo

hacer una divisin siendo el divisor igual a cero. Esto ahorra el tiempo que, en otro caso, deberan dedicar los programas a la comprobacin previa de los divisores. Interrupciones no enmascarables: Se usan para pedir la atencin inmediata de la CPU en situaciones de emergencia, como cada de voltaje o error de paridad de memoria.

Cada interrupcin lleva asociado un nmero que identifica el tipo de servicio que debe realizar. A partir del nmero de interrupcin, calcula la direccin de la rutina que realiza el servicio requerido, la ejecuta y retorna a la instruccin siguiente a la ltima que ejecut antes de que se produjera la interrupcin. El mecanismo de la interrupcin es simple: en un momento determinado se activa la entrada de la interrupcin al procesador. El procesador suspende entonces la ejecucin del programa en curso, pasando el control al programa de interrupcin. Este programa tratar la causa de la interrupcin, desactivar el dispositivo que la ha producido y devolver el control al programa principal. El programa principal es transparente a este proceso y no tiene ninguna indicacin de que se ha producido, salvo, por supuesto, por el tiempo de proceso transcurrido. Una funcin que ejecutan todas las interrupciones al activarse el programa de interrupcin es salvar los registros del procesador para evitar que sean modificados y alteren el funcionamiento del programa suspendido. Estos registros se restauran justo antes de volver al programa principal. ste tiene, sin embargo, la posibilidad de bloquear las interrupciones mediante instrucciones que activan o desactivan una bandera de interrupcin (bandera IF). Tal posibilidad es necesaria cuando el programa principal accede a datos o perifricos que son tambin utilizados por las interrupciones, pues se pueden producir situaciones errneas cuando los dos (proceso e interrupcin) intenten utilizar los mismos recursos simultneamente. La mayora de los procesadores disponen de una entrada especial de interrupcin que no puede ser impedida por software: se trata de la NMI (non maskable interrupt). Esta entrada es necesaria para aplicaciones de alta prioridad y urgencia (como es el caso de un fallo en la alimentacin) en los que el procesador tiene escaso tiempo para detener los procesos y salvar los datos vitales de la mquina.

Vectores de interrupcin
La familia IBM PC, como todos los ordenadores basados en la familia de microprocesadores Intel 8086/8088, se controla en gran medida a travs de la utilizacin de interrupciones, las cuales pueden ser generadas por el hardware y el software, como ya se ha visto. Las rutinas de servicios del BIOS no son una excepcin y cada una de ellas tiene asignada un nmero de interrupcin al que se puede invocar cada vez que se quiera usar ese servicio. Cuando se produce una interrupcin, el control del ordenador se transfiere a una subrutina de tratamiento de la interrupcin que a menudo est almacenada en la ROM del sistema (una rutina de servicio del BIOS no es ms que una rutina de tratamiento de interrupcin). A esta rutina de tratamiento de la interrupcin se le llama cargando su direccin
4

Grupo de Arquitectura de Computadores y Diseo Lgico. UEX, 1997. http://atc.unex.es/gacdl Funcionamiento del 8086/8088 Germn Galeano Gil. Juan A. Gmez Puildo

de segmento y desplazamiento en los registros CS e IP, respectivamente. Las direcciones de segmentos que ubican las rutinas de tratamiento de la interrupcin se llaman vectores de interrupcin. Durante el proceso de arranque, la ROM BIOS establece los vectores de interrupcin para que apunten a las rutinas de tratamiento de la interrupcin en la ROM. La tabla de vectores de interrupcin comienza al principio de la RAM, en la direccin 0000:0000. Cada entrada de la tabla se almacena como una pareja de palabras, con el desplazamiento en la primera parte y el segmento en la segunda. Los vectores de interrupcin pueden cambiarse para que apunten a una nueva rutina de tratamiento de la interrupcin simplemente ubicando el vector y cambiando su valor.

Proceso de arranque
Cuando el PC se pone en funcionamiento, el proceso de carga del sistema2 se inicia por medio de la ROM y despus se carga el sistema operativo (en nuestro caso el DOS), ya sea desde un disco flexible o desde el disco duro. En la memoria tambin se cargan varias rutinas del BIOS. Una vez realizado todo el proceso de carga, se instala en la memoria el procesador de comandos COMMAND.COM. Los archivos de arranque son el IO.SYS y el MSDOS.SYS, y, junto con el COMMAND.COM, constituyen la parte principal de la arquitectura del sistema operativo MSDOS. Las rutinas contenidas en los dos primeros archivos son las encargadas de manejar todos los dispositivos y controlar las tareas de I/O asociadas con los perifricos. Adems, el segundo de ellos contiene todas las rutinas de servicio del DOS. A todas estas rutinas se accede por medio de interrupciones software y hardware(vistas en el apartado anterior). La importancia de estas rutinas es tal que son utilizadas por el 99.99% de los programas desarrollados para MS-DOS. A una gran parte de esas rutinas se accede por medio de una llamada a la interrupcin 21h, conocida como interrupcin del sistema (en el apndice D se encuentra una lista de todas las interrupciones y de todos los servicios que ofrece esta interrupcin 21h). Es poco probable que el usuario desee modificar las rutinas de servicio ya que ellas proporcionan un marco de referencia para llevar a cabo tareas de programacin muy tediosas.

Ejecucin de programas
Este apartado pretende clarificar, sin entrar en demasiados detalles tcnicos, la forma en que se ejecutan las instrucciones y cmo funciona la CPU.
2

En el captulo 3 de [Nor01] hay informacin muy detallada sobre este proceso. Tambin hay informacin en [Ray00], [PCI00] y [Terr00]

Grupo de Arquitectura de Computadores y Diseo Lgico. UEX, 1997. http://atc.unex.es/gacdl Funcionamiento del 8086/8088 Germn Galeano Gil. Juan A. Gmez Puildo

1. Lo primero que ocurre es que el oscilador (reloj) enva un pulso a la circutera. 2. Entonces la CPU enva por el bus de direcciones la posicin (direccin de memoria) de la instruccin siguiente a la ltima ejecutada. Este paso se denomina tambin fase de bsqueda, y en ella la CPU ordena la transferencia del contenido del contador de programa al registro de seleccin de memoria y enva a la memoria la orden de lectura. 3. Una vez enviada la peticin, el sistema lee el contenido de los bytes de la posicin que contiene la instruccin y sus parmetros, si es que posee, para enviarlos a la CPU a travs del bus de datos. 4. Cuando llega la instruccin a la CPU, sta la decodifica, tras lo cual se inicia la fase de bsqueda de operandos, en la que la CPU transfiere la direccin del operando, en el caso de que ste se encuentre en memoria. Posteriormente se realiza el mismo proceso con el otro operando. 5. Una vez obtenidos los operandos, la instruccin es ejecutada. Para ejecutarse, cada instruccin necesita un nmero diferente de ciclos o seales de oscilador.

You might also like