Вы находитесь на странице: 1из 10

Arquitectura de la Familia de Procesadores 80x86

8086/8088

Caractersticas: * Tecnologa HMOS. Canal N * Empaquetado DIP 40 * Una sola fuente de voltaje. Vcc = 5 V (275 mA) * Velocidad de 5 MHz * 20 bits de direcciones (1 MByte) * Lenguaje ensamblador compatible con 8080/8085 * 14 registros de 16 bits * 24 modos de direccionamiento * Operaciones con Bit, Byte, Word o con bloques * Aritmtica binaria o decimal, de 8 y 16 bits, con o sin signo. Incluye operaciones de multiplicacin y divisin * Interfaz de sistema compatible con Multibus

Diferencia 8086/8088: el tamao de la cola (6 vs.4 bytes) Bus externo de datos ( 16 vs. 8 bits )

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. Bus de datos de 16 bits Los procesadores dominantes antes de la introduccin del IBM PC, basado en el 8086, eran todos de 8 bits; con lo que nos refereimos al bus de datos. Esto quiere decir que se poda accesar un byte de memoria en un solo ciclo de reloj, pues existan 8 cables entre la memoria y el procesador, por donde viajaban a la vez 8 bits de informacin. Que el procesador ahora sea de 16 bits, quiere decir que pueden viajar a la vez 16 bits (2 bytes) entre el procesador y la memoria; por tanto, el procesador puede mover bloques de memoria en la mitad del tiempo, y con la mitad de instrucciones. Esto hace ms eficiente el acceso a memoria por parte del procesador. Al tamao del bus de datos tambin suele llamrsele tamao de palabra. Bus de direcciones de 20 bits Tambin antes del 8086 haba una limitante en la memoria de la que el procesador poda disponer. Los procesadores anteriores contaban con un bus de direcciones de 16 bits, con lo que podan indexar 65536 localidades distintas en memoria; siendo stas bytes. Por tanto, su memoria mxima era de 64 Kb. Intel reconoci que pronto, esta memoria sera insuficiente, por lo que decidi ampliarla. Sin embargo, no pudieron imaginar usos para una memoria mayor a 1 Mb.;

pareca infinita para los estndares de entonces. Por lo que aumentaron las lneas del bus de direcciones a 20, con lo cual se pueden indexar memorias con 1'048,576 elementos (1 Mb.) 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

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, en 65536 partes (segmentos), iniciadas cada 1 Mb / 65536 = 16 bytes. As, podemos en general decir que 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. 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. 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 Fisica = Segmento * 0010h + Desplazamiento 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 ejecucin. 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. En el caso del 8086, los registros son de 16 bits, con lo que un registro de segmento puede tomar 65536 valores distintos; adems, un registro de desplazamiento puede tomar los mismos valores. De ah las siguientes propiedades: Un segmento inicia cada 16 bytes de memoria; de esta manera, a cada seccin de 16 bytes de la memoria se le llama "prrafo". Dos segmentos de memoria llegan a tener sobreposicin; de manera que una misma localidad de memoria puede accesarse en distintas formas. Exactamente, en 4096 formas distintas! La ventaja de esta sobreposicin, que complica el manejo, es que se desperdicia menos memoria entre cdigo y datos, que estn en segmentos distintos; si los segmentos no se sobrepusieran, desperdiciaramos por ejemplo 63 Kb. si nuestros datos ocuparan 1 Kb, para completar el segmento. En cambio, con el esquema de segmentacin con sobreposicin, pueden inclusive no desperdiciarse bytes.

Вам также может понравиться