Tema 02 - Introduccion A La Familia de Procesadores 8086

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 16

Tema 2

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

La arquitectura de 16 bits permitiría una evolución sustancial en la capacidad de


proceso de información. Desgraciadamente, este procesador no empezó a tomarse en
serio hasta finales de 1980, cuando IBM decidió ingresar en él mercado de las
computadoras personales. En ese momento, la arquitectura de computadoras basada
los microprocesadores de 8 bits estaba bastante extendida, ya que otros fabricantes
de semiconductores, tales como, ZILOG, MOTOROLA y MOS TECHNOLOGIES,
entre otros, ofrecían buenas alternativas con sus respectivos diseños de procesador.

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:

• Permitió aprovechar el soporte de componentes de 8 bits existentes


• El diseño de la computadora (hardware) era más económico
• Estructura arquitectónica más simple

Antes de continuar, es necesario aclarar un punto de suma importancia. La diferencia


entre los microprocesadores 8086 y 8088 ocurre básicamente a nivel del bus de datos,
manteniéndose igual el juego de instrucciones y parte del poder de los 16 bits de su
arquitectura interna. Estos detalles que marcan la diferencia serán definidos más
adelante. Por lo pronto, a efectos de explicaciones se hará referencia en forma
indistinta a estos dos procesadores como 8086/8088, solamente denominándolos 8086
u 8088 cuando sea necesario explicar detalles su arquitectura interna.

Arquitectura interna del 8086/8088


La arquitectura es la forma en que fue diseñado internamente el procesador para la
ejecución de dos de sus funciones más básicas: administración de los buses del
sistema y la ejecución de instrucciones. Los microprocesadores 8086/8088 a
diferencia de sus antecesores de 8 bits, establecieron una manera diferente de
procesar la información. Técnicamente hablando, la arquitectura del procesador se
puede dividir en dos partes fundamentales:

• Unidad de interface del bus (BIU)


• Unidad de ejecución (EU)

Este concepto fue nuevo en su momento. Hasta entonces, los microprocesadores de 8


bits tenían un diseño arquitectónico denominado secuencial. Esto es, el procesador
solo podía hacer una de sus dos funciones básicas: Leer y/o escribir en la memoria, o
decodificar y ejecutar instrucciones.

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


Introducción a la familia de microprocesadores 8086 25

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)

Unidad de Ejecución Interface de bus


EU BIU
Figura 2.1 – Arquitectura del 8086 y 8088

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).

Unidad de interface de bus (BIU)


La unidad de interface de bus (BIU) es la encargada de comunicar el microprocesador
con el exterior. También es la parte que diferencia claramente a un 8086 de un 8088.
En efecto, la BIU es quien determina si el acceso al exterior es de 16 bits (8086) o de
8 bits (8088). En ambos casos, el direccionamiento de la memoria es idéntico para
ambos, siendo esta de 20 bits (1Mb de espacio efectivo).

Dentro de la BIU están los siguientes elementos de control

• Cola de instrucciones
• Registros de segmento
• Lógica de control de bus
• Bus de datos
• Bus de direcciones

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


26 Microprocesadores de 16 bits y tecnología PC

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).

Busqueda Ejecución Busqueda Ejecución Busqueda

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.

Espera Ejecución Espera Ejecución Espera

Busqueda Espera Busqueda Espera Busqueda

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.

Para solventar este problema, los ingenieros de Intel introdujeron en la tecnología de


diseño del microprocesador 8086 un nuevo elemento, denominado cola de
instrucciones o pipeline. La cola de instrucciones, implementada en formato FIFO
(First In First Out) trabaja como una especie de lista de espera, esto es, la BIU como
unidad de proceso independiente, lee en forma secuencial la memoria y almacena las
instrucciones leídas en la cola de instrucciones, de tal forma que la EU cada vez que
esté disponible para decodificar y ejecutar una nueva instrucción, simplemente tome
la instrucción siguiente disponible de la cola. Esta modalidad de operación permite
que ambas unidades estén operativas al mismo tiempo (vease figura 2.2).

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


Introducción a la familia de microprocesadores 8086 27

Cola de
EU BIU
Instrucciones

Bus del sistema

BIU Busqueda Busqueda Busqueda Busqueda Busqueda

EU Espera Ejecución Ejecución Ejecución Ejecución

Tiempo

Figura 2.2 – Operación del pipeline

De esta forma, el tiempo desperdiciado es mínimo, ya que cuando mucho la EU


tendrá uno o dos ciclos de espera mientras aparece la primera instrucción en la cola.
Nótese que para el 8086 el tamaño de la cola es de 6 bytes, mientras que en 8088 es
de solo 4 bytes. Esto es debido a que, los accesos a la memoria del 8086 son de 16
bits (2 bytes por ciclo de lectura) lo cual permitirá almacenar un máximo de 6
instrucciones de un byte o 3 de dos bytes. En cambio, el 8088 tiene un bus de 8 bits,
lo cual lo restringe a leer un único byte por ciclo de lectura (véase el gráfico
comparativo entre tecnologías de 8 y 16 bits en la pagina siguiente).

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.

Lógica de control de bus


Este apartado corresponde a las líneas de control para los dispositivos externos, así
como para los accesos a la memoria y los puertos. Es igual para ambos
microprocesadores. Su explicación se dejara para los apartados de bus de
direccionamiento de memoria y descripción física del microprocesador.

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

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


28 Microprocesadores de 16 bits y tecnología PC

de ancho, con el cual puede acceder a dos localizaciones de memoria en un ciclo de


lectura/escritura. En cambio el 8088 posee un canal de solo 8 bits de ancho, con lo
cual solo puede acceder a un byte por ciclo de lectura/escritura. Visto de esta manera,
podría decirse que el 8086 es el doble de rápido que un 8088. Esta afirmación no es
del todo cierta, ya que depende de un factor muy importante, y es la alineación de
código o instrucciones.
Tiempo transcurrido

CPU: Ejecución Escritura Busqueda Ejecución Busqueda Lectura Ejecución

Procesadores de 8 bits

BUS: Ocupado Ocupado Ocupado Ocupado

EU: Ejecución Ejecución Busqueda

Procesador 8086/8088 BIU: Busqueda Busqueda Escritura Busqueda Lectura Busqueda

BUS: Ocupado Ocupado Ocupado Ocupado Ocupado Ocupado

Flujo de instrucciones

1ra instrucción (ya buscada) ejecutada y con resultado escrito

2da instrucción: solo ejecutada

3ra instrucción : leyendo operando y ejecutando

4ta instrucción : indefinida

5ta instrucción : indefinida

La alineación consiste en una distribución optima de las instrucciones y de los datos


que el microprocesador va a leer. Para un 8086 la memoria puede ser accedida en
bytes o en words. Para un 8088 la única manera de acceder la memoria es en bytes.
En el gráfico superior puede observarse una comparativa de tiempo entre los ciclos de
lectura - ejecución de un microprocesador de 8 bits y el 8086. El proceso es optimo
si el programa esta alineado, esto es, cada instrucción a ejecutar esta alineada en una
dirección par de la memoria. En el gráfico de la pagina siguiente puede observarse
este detalle con más facilidad.

En efecto, puede notarse que para un juego (hipotético) de 4 instrucciones


ejecutables, las cuales conforman 4 bytes, la ejecución del procesador no es igual. Si
estos están alineados en forma par (odd) el 8086 lee la información de la memoria en
solo dos ciclos de lectura, gracias a su bus de 16 bits.

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


Introducción a la familia de microprocesadores 8086 29

En cambio en 8088 leerá la misma información en cuatro ciclos de lectura. De esta


manera, el 8086 es el doble de rápido que un 8088.

Palabras alineadas en 16 bits


8086 : 2 accesos en 2 ciclos
Palabra 2 Byte 3 Byte 2
8088 : 4 accesos en 4 ciclos
Palabra 1 Byte 1 Byte 0

Dir. Par Dir. Impar

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

Dir. Par Dir. Impar

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.

Este detalle es importante a la hora de programar y establecer el tiempo efectivo de


procesamiento. Por supuesto, este trabajo de la alineación es tarea del compilador
que se utilice. De aquí la razón por la cual en ocasiones se habla de código
optimizado para 16 bits.

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.

Unidad de ejecución (EU)


La unidad de ejecución es la encargada de decodificar y ejecutar las instrucciones de
programa. Esta contiene los registros de uso general, la unidad lógico aritmética
(ULA) y el registro de banderas. La estructura de esta unidad es idéntica para el 8086
y el 8088. Bajo este punto de vista, puede pensarse que el 8086 es en realidad dos
procesadores en uno, ya que tiene unidades operativas que trabajan en forma
cooperativa y paralela. De hecho, la EU no tiene ninguna competencia con el manejo
de buses y la memoria. Esta solamente toma las instrucciones de la cola y procede a
su ejecución.

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


30 Microprocesadores de 16 bits y tecnología PC

Registros del procesador


El microprocesador posee dos juegos de registros bien diferenciados: los registros de
la unidad de ejecución, denominados registros de uso general, y los contenidos en la
BIU, denominados registros de segmento, conformado un total de 14 registros de 16
bits (9 en la EU y 5 en la BIU)

Registros de uso general


Estos registros tiene funciones análogas a los existentes en los procesadores de 8 bits,
y están agrupados en registros de datos, registros de índice y registros apuntadores.

Uso implícito de los registros de uso general


Registro Operación

AX Multiplicación y división de palabras, E/S


de palabras
AL Multiplicación y división de bytes, E/S
bytes, transferencia, aritmética decimal
AH Multiplicación de bytes, división de bytes
BP Entrada y salida de datos (pila)
BX Transferencia de datos
CX Operaciones con cadenas de datos,
contador
CL Variable de cambio y rotación
DX Multiplicación y división de palabras, E/S
indirecto
SP Operaciones con la pila
SI Operaciones con cadenas, índice
DI Operaciones con cadenas, índice
Tabla 2.1 – Registros del procesador

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

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


Introducción a la familia de microprocesadores 8086 31

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.

BP SP y BP para el paso de parametros, manejo de tablas y


AH AL AX
SP manejo de la pila
BH BL BX
CH CL CX
SI SI y DI para el manejo de cadenas y estructuras de
DH DL DX
DI datos

Figura 2.3

Registros apuntadores y de índice


Estos registros permiten ejecutar funciones especiales de alto nivel. El registro BP se
usa para apuntar a tablas de datos y para el paso de parámetros, tomando como
referencia base el registro de segmento de pila SS. Por otro lado el registro SP
permite definir y direccionar la pila del procesador. Los registros SI y DI, también
denominados registros índice, permiten manejar cadenas y estructuras de datos. Su
uso se enfoca en la lectura secuencial y/o transferencia de bloques de datos en la
memoria. De esta manera, el registro SI o source index, apuntará al principio de los
datos (generalmente en forma de tabla o vector), y el registro DI o destination index
apuntará al final de estos datos o en la dirección de memoria de destino. Esto permite
un manejo cómodo y eficiente de grandes estructuras de datos. Adicionalmente, estos
registros pueden ser usados como registros de uso general si es necesario, y en
algunos casos intervienen en operaciones aritmético-lógicas.

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:

• Si AF es activo (AF=1), ha ocurrido un acarreo (suma) desde un nibble bajo a uno


alto, o un préstamo (resta) desde un nibble alto a uno bajo (en el byte bajo de un
registro de 16 bits). Esta bandera es usada por instrucciones de aritmética
decimal.

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


32 Microprocesadores de 16 bits y tecnología PC

• Si CF es activo, hay un acarreo o préstamo en el bit más significativo del


resultado (8 o 16 bits). Esta bandera es usada por instrucciones de adición y
substracción para de números multi-bytes (mas de un byte). Las instrucciones de
rotación de bits también pueden afectar esta bandera.
• Si OF es activo, ha ocurrido un desbordamiento en una operación aritmética. Esto
significa que el dígito (bit) más significativo se ha perdido porque el tamaño del
resultado (numérico) excede la capacidad de la localización de destino. Un vector
de interrupción opcional, el vector On Overflow, esta disponible para generar una
interrupción para esta situación (véase vectores de interrupción).
• Si SF esta activo, el bit de mayor orden esta a 1 lógico. Dado que normalmente
los números binarios negativos son representados por la notación complemento a
dos, SF indica el resultado (0=positivo, 1=negativo).
• Si PF esta activo, el resultado de la operación tiene paridad par. Esta bandera es
usada normalmente para chequear por errores en transmisión de datos. (Solo el
byte bajo es chequeado). Si ZF esta activo, el resultado de la operación es cero.

Registro de banderas: bits de funciones


Bit Nombre Función
0 CF Carry Flag : 1=acarreo 16 bits, 0=no acarreo
2 PF Parity Flag : 1=byte bajo tiene paridad par, 0=paridad impar
4 AF Auxiliar Carry: 1=nibble bajo AL con acarreo, 0=no acarreo
6 ZF Zero Flag: 1=resultado igual a cero, 0=resultado diferente de cero
7 SF Sign Flag: 0=positivo, 1=negativo
8 TF Single Step Flag: 0=positivo, 1=negativo
9 IF Interrupt-enable Flag: 1=hay interrupcion
10 DF Direction Flag: 1=auto-incremento, 0=auto-decremento (reg. Indice)
11 OF Overflow Flag: 1=desbordamiento en la operación
Tabla 2.2 – Descripción del registro de banderas

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.

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


Introducción a la familia de microprocesadores 8086 33

• Activando DF causa que las instrucciones de manipulación de cadenas funcionen


en la modalidad de auto-decremento, esto es, la cadena se procesa desde la
dirección más alta hasta la más baja. Desactivando DF provoca el auto-
incremento, o procesamiento de la cadena de datos desde la dirección más baja
hasta la más alta.
• Activando IF se hace que la CPU reconozca las peticiones de interrupción
enmascarables. Desactivándolo, el CPU ignora estas interrupciones. Tómese nota
de que IF no afecta a las interrupciones no-enmascarables (NMI) generadas
externamente.
• Activando TF el procesador se conmuta al modo paso-a-paso, modalidad
normalmente usada para el chequeo del hardware y la depuración de programas.
En esta modalidad el CPU genera automáticamente una interrupción interna
después de cada instrucción, permitiendo que el programa en ejecución sea
inspeccionado (monitoreado) instrucción por instrucción.

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

Figura 2.4 – Registro de banderas

Registros de control y segmento


Estos registros residen en la BIU. Están conformados por los registros de segmento y
el apuntador de instrucciones. Los registros de segmento se usan para administrar la
memoria en forma segmentada, esto es, en bloques de 64Kb. Dado que los registros
del procesador son de 16 bits, no es posible direccionar con ellos directamente 1Mb
de memoria, ya que para ello se necesitan 20 bits. De lo anterior puede concluirse que
no es posible direccionar el espacio completo. Para poder lograr esto, es necesario
usar una modalidad de direccionamiento denominada segmento - desplazamiento.

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

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


34 Microprocesadores de 16 bits y tecnología PC

desplazamiento adquieren valores desde 0000H hasta FFFFH. El registro segmento


direcciona la memoria en pasos de 16 bytes, o lo que es igual, su valor de 16 bits es
multiplicado por 16 para obtener un valor de direccionamiento de 20 bits. De hecho,
puede considerarse que, por ejemplo, la dirección de segmento C000H se puede
interpretar realmente como C0000H, simplemente agregando un cero en el extremo
menos significativo de la cifra. Incrementar en una unidad el registro de segmento es
realmente incrementar el direccionamiento en 16 bytes. Tomando el ejemplo
anterior, si incrementamos en uno el valor C0000H obtendremos realmente como
resultado C0010H.

Por otro lado, el registro de desplazamiento es el encargado de leer en forma


secuencial las instrucciones de la memoria. Este es el registro IP, Instruction Pointer,
o apuntador de instrucciones. Este registro direcciona la memoria en forma lineal
hasta un máximo de 64K (véase figura 2.5).

15 0

Dirección lógica Dirección de desplazamiento

15 0
Dirección de
Dirección lógica 0000 segmento

Sumador

19 0

Dirección fisica de memoria


(20 bits)

Figura 2.5

Aclaremos esto con un ejemplo. Supongamos que tenemos la dirección lógica


C000:A000H y deseamos obtener la dirección física o dirección efectiva de memoria
en el espacio de direcciones de 20 bits. Para ello tomemos la dirección de segmento
y la multiplicamos por 16 (0FH), esto es, C000H x 0Fh = C0000H, obteniendo de
esta manera parte de la dirección en formato de 20 bits. A continuación, sumamos a
este resultado el valor de desplazamiento (el cual corresponde al registro IP) como se
muestra a continuación:

C0000H +
A000H
_______
CA000H

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


Introducción a la familia de microprocesadores 8086 35

Esta es la dirección efectiva en formato de 20 bits. Esta aritmética de memoria


permite direccionar el espacio completo de memoria sin mayores inconvenientes,
siempre y cuando el programa pueda residir en el segmento, de máximo 64K.

El microprocesador posee cuatro registros de segmento, denominados CS, DS, SS y


ES. El registro CS es el Code Segment, o segmento de código. Este registro apunta a
la dirección de segmento origen del código ejecutable del procesador. Trabaja en
conjunción con el registro IP, que determina el desplazamiento lineal en la lectura de
las instrucciones. Ambos juntos CS:IP conforman la dirección lógica de la instrucción
que se este ejecutando en ese instante.

El registro DS es el Data Segment o segmento de datos. Este define un espacio de


direccionamiento propio para los datos que manipulará el código ejecutable. El
desplazamiento se determina por direcciones lógicas de 16 bits que normalmente son
los descriptores de datos (variables, tablas, etc.). Los registros asociados a DS son el
BX (DS:BX) y el DX (DS:DX) para el direccionamiento de datos.

El registro SS es el Stack Segment o segmento de pila. Este define a partir de donde


se localiza la pila y trabaja en conjunto con el registro SP en el formato SS:SP.
También permite direccionar datos de paso entre procedimientos y funciones usando
el registro BP bajo la forma SS:BP

El registro ES es el Extra Segment o segmento extra. Este se encuentra disponible


para ser usado por el programador y permite direccionar bloques de memoria
alternos. Usa los mismos registros asociados a DS para generar la dirección efectiva.

Memoria

PILA

CS DATOS1
SS
DS DATOS2
ES
PROGRAMA

Figura 2.6

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


36 Microprocesadores de 16 bits y tecnología PC

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)

El 8086/8088 permite direccionar en forma independiente segmentos de datos para


los programas de propósito general. Cada registro permite direccionar un segmento
de la memoria y estos segmentos pueden solaparse o no. Para el código o programa el
registro es el CS (code segment), DS (data segment) permite definir el segmento de
datos, SS (stack segment) define el segmento de la pila y finalmente ES (extra
segment) es un registro para usos alternativos.

Esta es una de las características más importantes de este procesador. El uso de


memoria segmentada permite la conversión rápida de programas para procesadores
de 8 bits hacia este procesador. Por otro lado, el uso de diferentes registros para
manipular la memoria en pedazos permite, a nivel de las instrucciones del procesador,
el uso de estructuras de datos muy complejas en forma cómoda, cosa que era difícil o
casi imposible con un procesador de 8 bits.

Memoria Memoria

CODIGO

CS CS
PILA
SS SS
DS DS
DATOS CODIGO
ES ES
PILA
EXTRA DATOS
EXTRA

Figura 2.7

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


Introducción a la familia de microprocesadores 8086 37

Otra característica a considerar es la posibilidad de usar el microprocesador en


sistemas multiprogramados o multitarea, esto es, tiene la habilidad de ejecutar varios
programas en forma alternativa, simplemente cambiando el apuntador de programa
(CS) a otra localización. Esto se denomina relocalización de segmentos (véase figura
2.7)

Este aspecto es de mucha utilidad en entornos operativos multitarea o de


multiprocesamiento, ya que permite organizar la memoria y acomodarla según la
necesidad del momento. Por ejemplo, para el caso de las multitareas, en la memoria
pueden residir dos o más programas (hasta la capacidad máxima de la misma). Estos
programas obtienen la atención del microprocesador por turnos, siendo necesario para
ello cambiar la dirección en que apunta CS e IP regularmente.

Por otro lado, en el aspecto de la relocalización, en ocasiones la memoria se


fragmenta por la entrada y salida continua de procesos y datos, dejando huecos en la
misma de tamaño variable. Esto puede llegar hasta el punto de que, la suma de todos
los huecos de memoria es mayor o igual que la memoria requerida para la ejecución
de una aplicación especifica, y esta ¡no puede cargarse en memoria!. Gracias al
esquema de segmentos, y dado que las referencias de las instrucciones ejecutables son
relativas a los registros de segmento y no a la dirección efectiva de memoria, es
posible relocalizar los programas y/o datos sin que estos sufran modificaciones en su
comportamiento. Este esquema de trabajo es típico en sistemas operativos como
Windows 98, Windows 2000 y en UNIX.

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ


38 Microprocesadores de 16 bits y tecnología PC

Ing. Antonio Román V. – UNEXPO PUERTO ORDAZ

También podría gustarte