Tema 02 - Introduccion A La Familia de Procesadores 8086
Tema 02 - Introduccion A La Familia de Procesadores 8086
Tema 02 - Introduccion A La Familia de Procesadores 8086
Introducción a la familia de
microprocesadores 8086
En el año 1971 se presento en el mercado un pequeño chip, que sin saberlo estaba
destinado a marcar una nueva era. El invento fue denominado 4004 y fue el primer
microprocesador de la historia. Para aquel entonces la también pequeña empresa
inventora, Intel, no se imaginaba el revuelo que su pequeño circuito causaría a escala
mundial.
Desde ese entonces ha corrido mucha tinta, pero lo cierto es que, ese pequeño invento
fue la base para toda una serie de desarrollos en lo que era para ese momento, el
emergente negocio de las computadoras personales.
La familia 8086
El primer procesador creado por Intel para sector micro informático fue el 8086. Este
venia a desplazar el modelo anterior de la empresa, el celebre 8080. El 8086 apareció
en el año 1978 y entre sus características más destacables podemos nombrar:
• Arquitectura de 16 bits
• Juego de instrucciones más poderoso que sus antecesores de 8 bits
• Capacidad de direccionamiento de 1Mb de memoria
• Capacidad de manipular hasta 64K puertos
• Posibilidad de trabajar en modo paralelo/multiprocesador
• Velocidad de reloj de hasta 12MHz
• Alimentación con fuente única de 5 voltios
• Compatible con el juego de instrucciones del 8080
• Orientado a sistemas multiproceso/multitarea
24 Microprocesadores de 16 bits y tecnología PC
En vista de ello, Intel creó una variante híbrida del 8086, denominada 8088, con un
bus de datos de 8 bits, por petición directa de IBM. Este procesador seria utilizado en
el diseño del proyecto “IBM-PC”, el cual saldría al mercado a mediados de 1981.
Las razones de usar una versión de 8 bits del 8086 en vez del diseño original de 16
bits fueron las que siguientes:
Bus de direcciones
(20 bits)
AH AL
BH BL
Bus de
CH CL datos
Registros 16 bits (8086)
DH DL
generales 8 bits (8088)
SP CS
BP DS Bus
DI SS Logica 8086/8088
Control
SI ES
de
IP Bus
Bus de datos ULA Registros de
(16 bits) internos de
comunicación
Registros temporales
Sistema
de
1 2 3 4 5 6 Cola 8086
control
ULA EU
1 2 3 4 Cola 8088
Cola de instrucciones
Banderas (pipeline)
Descripción de la BIU y de la EU
En la figura 2.1, puede observarse un esquema simplificado que describe la estructura
interna del microprocesador. Esta estructura está dividida en dos partes bien
diferenciadas, la BIU (a la derecha) y la EU (a la izquierda).
• Cola de instrucciones
• Registros de segmento
• Lógica de control de bus
• Bus de datos
• Bus de direcciones
Cola de instrucciones
La cola de instrucciones o pipeline es uno de los elementos innovadores en la
arquitectura del microprocesador. Esta permite establecer un almacenamiento
temporal adelantado de las instrucciones que el procesador va a ejecutar. Para
comprender más claramente este punto, vamos a explicarlo algo más gráficamente.
Los procesadores de 8 bits, tales como el 8080, Z80, 6800, etc., ejecutaban los
programas en forma estrictamente lineal o secuencial. Un microprocesador consta
básicamente (a grandes rasgos) de dos etapas de operación bien definidas. Una
denominada búsqueda (fetch), y otra llamada ejecución (execute).
Tiempo
0
Si había algo que caracterizaba a los microprocesadores de 8 bits era que, o bien
estaban en proceso de búsqueda de instrucciones (Fetch, acceso a memoria) o estaban
ejecutando una instrucción (Decode-Execution, decodificación-ejecución), pero
nunca hacían estas dos operaciones al mismo tiempo.
Tiempo
Si analizamos este aspecto operativo desde el punto de vista del uso de cada unidad
en el tiempo (unidad de bus y unidad de ejecución) puede notarse fácilmente que
mientras una efectúa sus operaciones, la otra siempre está ociosa. Esto desperdicia
tiempo efectivo de procesamiento.
Cola de
EU BIU
Instrucciones
Tiempo
Registros de segmento
Estos son registros de uso especial que permiten establecer las modalidades de lectura
y escritura de la memoria. Dado su especial interés, la explicación de estos será
postergada para más adelante (véase Tema 3). Por lo pronto podemos decir que su
lógica de operación es idéntica tanto para el 8086 como para el 8088.
Bus de datos
El bus de datos es el canal de comunicación e intercambio de datos entre el
microprocesador y el exterior. Este canal es el que determina la velocidad de proceso
relativa del procesador. De esta manera, el 8086 posee un canal de datos de 16 bits
Procesadores de 8 bits
Flujo de instrucciones
Byte 3
Palabras no alineadas en 16 bits
Byte 2
8086 : 4 accesos en 4 ciclos
Palabra 2 Byte 1
8088 : 4 accesos en 4 ciclos
Palabra 1 Byte 0
Por otro lado, si la disposición de las instrucciones está alineada en forma impar
(even) tanto el 8086 como el 8088 necesitaran 4 ciclos de lectura, ejecutando ambos
entonces a la misma velocidad.
Bus de direcciones
El bus de direcciones es idéntico para ambos microprocesadores. Tiene un ancho de
20 bits, permitiendo así un direccionamiento máximo de 1Mb de memoria. La parte
inferior del bus (los bits menos significativos) es usada en forma compartida para el
direccionamiento de puertos E/S. Dado que solo se usan 16 líneas de dirección, esto
nos permitirá un máximo de 65536 puertos. Las condiciones de uso y administración
del bus de direcciones se discutirán posteriormente.
Registros de datos
Estos son los denominados registros de propósito general. Permiten las operaciones
básicas (leer/escribir, operaciones aritméticas, etc.). También son los únicos que
pueden ser separados en sus partes altas y bajas, ambas completamente
direccionables. Esto significa que cada registro puede usarse como un único
componente de 16 bits, o como dos registros de 8 bits. Usados como registros de 16
bits se denominan AX, BX, CX y DX. Para operaciones de 8 bits estos pueden ser
divididos en byte alto y byte bajo, denominados AL, AH, BL, BH, CL, CH, DL y
DH. (véase figura 2.3). Por ejemplo, AH es la parte alta de AX, esto es, esta
conformado por los bits más significativos (del 8 al 15). Por otro lado, AL es la parte
baja de AX (bits del 0 al 7). Esto es aplicable a los otros tres registros. Cada uno de
estos registros tiene funciones especiales asociadas (véase la tabla Uso implícito de
los registros de uso general). Solo los registros de datos gozan de esta característica.
El resto de los registros del procesador no son divisibles.
Figura 2.3
Registros de banderas
El registro de banderas (flags), es un registro de 16 bits que está constituido por 3
banderas de control y 6 banderas de status. Las banderas de status almacenan
características especificas de los resultados de instrucciones lógicas y aritméticas (bits
0, 2, 4, 6, 7 y 11). Las banderas de control controlan las operaciones del CPU
proporcionando su estado o modificando su modo operativo (bits 8, 9 y 10). Tómese
en cuenta lo siguiente. Las banderas de status proveen información de la EU después
de reflejar ciertas propiedades de los resultados en operaciones lógico aritméticas.
Diferentes instrucciones afectan de diversas formas las banderas de status. En
general, las banderas reflejan las siguientes condiciones:
Las tres banderas de control son usadas por los programas para alterar el flujo de las
operaciones o programa del procesador a una o varias vías especificas. La bandera de
dirección (Direction Flag) controla la dirección de las manipulaciones de cadenas de
datos, el de interrupción (Interrupt Flag) habilita o deshabilita las interrupciones
externas, y el de paso (Trap Flag) obliga al procesador a funcionar en modo paso-a-
paso (single-step), usada normalmente para la depuración de programas.
Banderas de status :
Acarreo (carry)
Paridad (parity)
Acarreo auxiliar (auxiliar carry)
Cero (zero)
Signo (sign)
Desbordamiento (overflow)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Registro de banderas
OF DF IF TF SF ZF AF PF CF
(flags)
Banderas de control :
Paso simple(trap flag)
Interrupción
Dirección
Esta modalidad establece el uso de dos registros de 16 bits para direccionar el espacio
físico de un 1Mb, que denominaremos dirección lógica, la cual se establece con el
formato segmento:desplazamiento. Bajo este esquema, los registros de segmento y
15 0
15 0
Dirección de
Dirección lógica 0000 segmento
Sumador
19 0
Figura 2.5
C0000H +
A000H
_______
CA000H
Memoria
PILA
CS DATOS1
SS
DS DATOS2
ES
PROGRAMA
Figura 2.6
Direccionamiento de la memoria
Basándonos en lo explicado anteriormente, el procesador organiza la memoria en
juegos de segmentos. Cada segmento consiste en una secuencia lineal de memoria,
cuyo tamaño máximo es de 64Kbytes. Estos bytes están almacenados
secuencialmente desde el byte 0000 hasta el byte FFFF hexadecimal.
La memoria es direccionada usando dos componentes de dirección (punteros) que
consisten en un segmento de base de 16 bits (que especifica la dirección de comienzo
en el segmento de la memoria) y un desplazamiento de 16 bits (que especifica la
dirección relativa al comienzo del segmento). Los valores base están contenidos en
cuatro registros internos de segmento (CS, DS, SS y ES).
El direccionamiento físico de la memoria de 20 bits es calculado multiplicando por 16
el registro de segmento y luego sumando este resultado al registro de desplazamiento.
Esto equivale a desplazar el valor del registro de segmento cuatro bits hacia la
izquierda (estos bits son iniciados siempre a cero)
Memoria Memoria
CODIGO
CS CS
PILA
SS SS
DS DS
DATOS CODIGO
ES ES
PILA
EXTRA DATOS
EXTRA
Figura 2.7