Vous êtes sur la page 1sur 6

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 del Sistema


Operativo, usados mediante el mecanismo de Interrupciones.

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 ocurri (verdadero). Entre las banderas ms importantes
mencionaremos:

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.