Você está na página 1de 7

Arquitectura del procesador X86

Arquitectura en pipeline Los procesadores previos al 8086, estaban limitados en su desempeo por la necesidad de realizar los dos pasos principales de ejecucin del procesador: Fetch/Execute, en forma secuencial. Es decir, no se puede ejecutar una instruccin hasta que se traiga de memoria (Fetch); y no podan traerse instrucciones de memoria mientras ejecutaba una instruccin, pues el procesador estaba ocupado. Resumiendo, un alto porcentaje del tiempo, el procesador estaba ocupado haciendo Fetch, cuando su funcin debiera ser ejecutar las instrucciones. La capacidad de ejecutar instrucciones slo se ocupaba en un bajo porcentaje.

Para solucionar esto, Intel desarroll la arquitectura en pipeline del Fetch/Execute, en la cual simplemente se divide la tarea en dos secciones: una encargada del Fetch (BIU), y otra del Execute (EU). De esta manera, existen circuitos separados para cada funcin, los cuales trabajan en paralelo. Si bien el proceso an es secuencial, solamente al principio se requiere desperdiciar tiempo en el Fetch. A partir de ah, Fetch va adelante del Execute, y trae instrucciones al procesador mientras este ejecuta las anteriores.

BIU: Basic Interface Unit


El BIU es la parte del 8086 que se encarga de hacer el Fetch; es decir, su funcin es estar continuamente accesando la memoria, trayendo de ella las instrucciones para ser ejecutadas por el procesador. Contiene los siguientes elementos: 1.Los registros de segmentos 2.La cola de prefetch 3.El generador de direcciones fsicas 4.El Bus C Su funcionamiento es de la manera siguiente:

1. Registros de segmentos
Estos registros son localidades de 16 bits dedicados a las funciones de acceso a memoria. Se decidi, como se describir ms adelante al analizar el mecanismo de segmentacin, dividir el Megabyte de memoria al que puede accesar un 8086. Los registros de segmentos nos van a indicar qu seccin de memoria seleccionamos. Existen 4 registros de segmentos: DS: Data Segment (Segmento de Datos) Este registro selecciona una seccin de 64 Kb. que se dedica generalmente a colocar en ella nuestras variables, por lo cual toma su nombre: seccin de memoria dedicada a datos. CS: Code Segment (Segmento de Cdigo) Este registro selecciona el rea de 64 Kb. que generalmente dedicamos al cdigo. En este caso, el CPU (especficamente, el BIU), siempre toma las instrucciones de esta regin de memoria; por lo que cuando requerimos ms de 64 Kb. de cdigo (instrucciones), este registro tendr que moverse, tomando distintos valores segn recorremos distintas regiones de memoria. SS: Stack Segment (Segmento de Pila) Este registro selecciona la regin de 64 Kb. que va a contener la pila del sistema. Como su nombre lo indica, tendremos una estructura de datos, con poltica LIFO (Last In, First Out = El ltimo elemento en entrar, es el primero en salir), con instrucciones bsicas PUSH y POP para su manejo. Esta estructura es usada por los programas de aplicacin, pero tambin por el procesador para el control de instrucciones que lo requieren, tales como las llamadas a subrutinas yla atencin de interrupciones.

ES: Extra Segment (Segmento Extra) Este registro nos permite seleccionar una seccin de 64 Kb., que no est destinada a ningn uso especfico; por lo que el programador puede aplicarla como comodn, generalmente como un segundo segmento de datos; o bien, para el acceso a regiones de memoria del sistema, tales como la memoria de video o las variables del BIOS.

2. Cola de prefetch
Ya que el BIU trabaja en paralelo con el EU, requieren de un mecanismo para comunicarse. Esto se logra con una cola, estructura de datos que permite que el EU obtenga instrucciones para ejecutar en el mismo orden en que el BIU las coloc en la misma. As, el EU puede solicitar instrucciones en cuanto est listo para ejecutar la siguiente, sin importar en qu paso est el BIU en la obtencin de instrucciones; y viceversa, el BIU puede continuar su bsqueda de instrucciones, depositando la que acaba de obtener en la cola, sin importar si el EU en este momento est ocupado ejecutando.

3. Generador de direcciones fsicas


Como las direcciones son de 20 bits, y los registros que nos permiten accesarlas son de 16, se requiere de 2 registros para que en combinacin formen la direccin. Esta combinacin est basada en la arquitectura segmentada que veremos ms adelante. La funcin del generador de direcciones fsicas consiste en realizar esa combinacin, para lo cual contiene la circuitera necesaria para calcular la frmula: Direccin Fsica = Segmento * 0010h + Desplazamiento

4. Bus C
Este bus interno del procesador permite que la informacin fluya entre la interfaz con la memoria y los distintos elementos del BIU. Se requiere un bus independiente, para que la informacin que usa el EU no se interfiera con la que est procesando el BIU.

EU: Execution Unit


El EU es la parte del 8086 que Contiene los siguientes elementos: 1.Unidad de control 2.Registros de propsito general 3.Registros de ndice 4.ALU 5.Registro de Banderas 6.Bus A

Unidad de Control
Es la seccin del procesador que contiene la lgica de funcionamiento del mismo; es decir, esta circuitera gobierna el comportamiento de los distintos elementos en el procesador, coordinando los procesos de Fetch y Execute, as como las distintas microoperaciones necesarias para la ejecucin. Por tanto, tiene dos funciones principales: Generar la secuencia de estados del procesador, lo que logra gracias a la ejecucin del microcdigo.

Decodificar las instrucciones, determinando as los pasos para su ejcucin

Registros de Propsito general


Son 4 registros de 16 bits, que el programador usar para una diversidad de funciones. Tienen varias caractersticas en comn: Pueden ejecutar la mayora de las operaciones del procesador, incluyendo la generalidad de las instrucciones aritmticas y lgicas, salvo la multiplicacin y divisin. Se dividen lgicamente en 2 registros de 8 bits cada uno, llamados parte alta y parte baja; refirindose el registro de parte baja a los bits 0-7 (menos significativos) y la parte alta a los bits 8-15 (ms significativos). Pueden conectarse a los registros de segmentos; de hecho, siempre se har acceso a los registros de segmento a travs de un registro de propsito general, o de la pila.

Los 4 registros tienen su nombre propio y ciertas especializaciones: AX: Registro de acumulador Este registro es el ms usado, siendo de propsito general; y tiene ciertas especializaciones, de ah su nombre: Es el nico que puede ser usado como multiplicando en la multiplicacin Es el nico que puede ser usado como dividendo en la divisin Es el parmetro que selecciona los distintos servicios Operativo, usados mediante el mecanismo de Interrupciones. del Sistema

BX: Registro de Base Este registro, adems de las caractersticas generales de los registros de propsito general, se especializa en el acceso a memoria en combinacin con los registros de ndice, especialmente para el manejo de arreglos. CX: Registro de Contador Este registro, como su nombre indica, ser ampliamente usado como contador. Puede ser usado como cualquier registro de propsito general, pero tiene capacidades especiales para ser usado en instrucciones: de manejo de ciclos como contador en los corrimientos de manejo de memoria y strings DX: Registro de Datos Este registro de propsito general tiene como especializaciones: Formar con AX nmeros de 32 bits, siendo en este caso la parte ms significativa. El acceso a puertos. Las instrucciones IN y OUT, que permiten dicho acceso, requerirn en ciertos casos que el nmero de puerto est en DX.

Registros de ndice

Estos registros, de 16 bits, son muy similares a los de propsito general, pero no tienen todas las capacidades de los mismos; en particular:

No pueden conectarse directamente con los registros de segmentos. No pueden verse como dos registros de 8 bits (parte alta y parte baja).

Ahora bien, tienen sus propias habilidades. Especficamente, estn diseados para combinarse con los registros de segmento, ser usados como desplazamientos y as intervenir en el acceso a memoria. Se les usa, por ello, para el acceso a arreglos o como apuntadores. Los 4 registros que se consideran en este grupo son: SI: Source Index, o Apuntador a la Fuente Este registro se especializa en el acceso a bytes o words dentro del segmento de datos; existen instrucciones que lo toman por defecto como el registro que apunta a una localidad de memoria que se va a leer, por lo cual toma su nombre. DI: Destination Index, Apuntador al Destino Este registro se especializa en el acceso a bytes o words dentro del segmento de datos o el extra; existen instrucciones que lo toman por defecto como el registro que en combinacin con el ES apunta a una localidad de memoria que se va a escribir, por lo cual toma su nombre. BP: Base Pointer, o apuntador a la Base de la Pila. Este registro es usado para accesar, dentro del segmento de pila, la informacin. Principalmente nos permite determinar cuando hay un underflow, es decir, cuando se quiere sacar ms informacin de la pila que la que se ha colocado en ella; y el acceso a variables locales y parmetros. SP: Stack Pointer, o apuntador al tope de la Pila. Este registro tambin est siempre asociado al manejo de la pila. Su funcin especial es marcar el tope de la pila, y por tanto, indica en qu localidad de memoria se localiza la informacin de la pila; se incrementa cuando se hace un POP, con lo que apunta al siguiente elemento en la pila; y se decrementa al hacer un PUSH, con lo que controla el acceso a la memoria de la pila.

ALU: Unidad Aritmtica-Lgica


Este componente, como su nombre indica, contiene la circuitera necesaria para realizar las diversas operaciones aritmticas y lgicas. Recibe sus operandos por el Bus A, y genera los resultados regresndolos al mismo bus. Una particularidad que es importante recalcar es su conexin al registro de banderas, por lo cual todas las operaciones aritmticas y lgicas, de acuerdo a su resultado, lo alterarn.

Registro de Banderas
Este es un registro de 16 bits, usados como banderas. Esto quiere decir que cada uno de los bits seala un evento dentro del procesador; cuando el bit tiene un valor de 0, el evento no ocurri (falso); y cuando tiene un valor de

1, el evento mencionaremos:

ocurri

(verdadero).

Entre

las

banderas

ms

importantes

ZF: Bandera de resultado 0 Se prende cuando el resultado de la ltima operacin realizada en el ALU fue un 0. CF: Bandera de carry Se prende cuando el resultado de la ltima operacin realizada en el ALU (necesariamente, una suma o resta) gener un carry o un borrow. OF: Bandera de overflow Se prende cuando el resultado de la ltima operacin realizada en el ALU excedi la capacidad del registro donde se almacena (overflow). SF: Bandera de signo Se prende cuando el resultado de la ltima operacin realizada en el ALU fue negativo, segn la representacin de complemento a 2 que mencionamos en clases anteriores. AF: Bandera de carry auxiliar Se prende cuando el resultado de la ltima operacin realizada en el ALU gener un carry cuando estaba a la mitad. Por ejemplo, si sumamos dos nmeros de 16 bits, nos indicar si la suma de las partes bajas (primeros 8 bits) haba generado carry; si sumamos dos nmeros de 8 bits, indica si el resultado intermedio despus de sumar los 4 bits menos significativos, gener carry para sumarse a los bits 5. DF: Bandera de direccin A diferencia de las anteriores, esta bandera no se prende como resultado del ALU, sino que el programador la usa para controlar la direccin del acceso mediante apuntadores, especialmente en las instrucciones de strings. IF: Bandera de interrupcin Se prende cuando el procesador es interrumpido, y est ejecutando una rutina de atencin de interrupcin. Esto evita que el procesador acepte interrupciones mientras est procesando interrupciones previas, de manera que no se pierda el control del procesador.

Bus A
Este bus es el camino por el que viajan los datos dentro de la unidad de ejecucin, principalmente entre los registros y el ALU. Manejo de Memoria: Segmentacin Cuando Intel extendi el bus de direcciones, de 16 a 20 bits, se encontr con el problema de cmo asociar los registros con las direcciones de memoria. Para lograrlo, aplic un concepto ya usado antes en mainframes, conocido como segmentacin; en este modelo, se usan dos registros para seleccionar una localidad de memoria:

Registro de Segmento: indica en qu segmento (regin o seccin) de la memoria se encontrar la localidad deseada. Registro de Desplazamiento: indica en qu desplazamiento, es decir, direccin relativa respecto al inicio de la seccin, se encontrar la localidad deseada.