Vous êtes sur la page 1sur 44

HISTORIA DE LA FAMILIA

80X86

Arquitectura de Von Newman

Evolucin de los uP x86


Producto

8080

8085

8086

8088

80286

80386

80486

2a3

3a8

5 a 10

5a8

6 a 16

16 a 33

25 a 50

64k

64k

1M

1M

16M

4G

4G

Bus de datos
interno

16

16

16

32

32

Bus de datos
externo

16

16

32

32

Bus de
Direcciones

16

16

20

20

24

32

32

Tipo de datos
(bits)

8, 16

8, 16

8, 16

8, 16, 32

8, 16, 32

CLK(MHz)
Memoria Fsica

80X86
Motivos para escoger un 80x86/88:
Ofrece un mejor costo de implementacin.
Mejor desempeo y mayor espacio de direccionamiento.
En 1980 IBM comienza con el desarrollo de su propia computadora
personal.

Arquitectura abierta para que otras empresas pudiesen hacer sus


modelos compatibles con los de IBM.
Optaron por el microprocesador de Intel 8088 de 16bits, a 4.77MHz
con 16K de RAM ampliable a 256K gracias a sus 5 ranuras de
expansin

Ser la nica eleccin en relacin a las implementaciones de la


competencia, ( la IBM quera ser la lder del mercado).

El 8086

Arquitectura del 8086/8088

El 8086

Arquitectura en pipeline

Los procesadores antecesores al 8086, estaban


limitados en su desempeo debido a la necesidad de
realizar dos pasos principales de ejecucin.

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

El 8086

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.

El 8086

Diagrama de bloques interno del 8088/86

Estos microprocesadores
tienen 2 procesadores
conectados internamente,
estos procesadores son:
EU: Unidad de ejecucin
(Execution Unit).
BIU: Unidad de interfaz
con el Bus (Bus Interface
Unit).

El 8086

UNIDAD DE EJECUCIN (EU)

La unidad de ejecucin (EU) se encarga de realizar las


operaciones aritmticas y lgicas, adems de proporcionar
las direcciones lgicas al BIU, una direccin lgica est
formada de dos direcciones, la primera indica el segmento en
el cual se est trabajando y la otra indica el offset, o
desplazamiento, de este segmento; esto es segment:offset

La EU tiene una unidad aritmtica lgica (ALU) de 16 bits, un


registro de banderas y un conjunto de registros de propsito
general. El registro de banderas contiene 6 banderas de
estado (que la EU manipula para indicar el estado del
resultado de una operacin lgica o aritmtica) y 3 banderas
de control que se pueden manipular por los programas para
alterar las operaciones del procesador .

El 8086

Unidad de Interfase con el Bus (BIU)

Es la responsable de la comunicacin externa del


procesador. Esta unidad de proceso se encarga de traducir
las direcciones lgicas a direcciones fsicas de la memoria
con ayuda de los registros de segmento DS, SS, ES, CS e
IP.

Para convertir una direccin lgica en una direccin fsica el


BIU corre el valor del registro de segmento 4 posiciones a la
izquierda (que es equivalente a multiplicar por 16h) y suma
el valor del offset para obtener un valor de 20 bits
necesarios

El 8086

MODELO DE
PROGRAMACIN DEL
8086.

El 8086

MODELO DE PROGRAMACIN 8086

Registros del 8088/86 por categora:


CATEGORA BITS

NOMBRE

General

16
8

Punteros

16

AX, BX, CX, DX


AH, AL, BH, BL, CH, CL,
DH, DL
SP, BP

Indexado

16

SI, DI

Segmentos

16

CS, DS, SS, ES

Instruccin

16

IP

Banderas

16

FR

El 8086

Registros de datos o de propsito general


AX, BX, CX, DX: pueden utilizarse bien como registros de 16 bits o
como dos registros separados de 8 bits (byte superior e inferior)
cambiando la X por H o L segn queramos referirnos a la parte alta o
baja respectivamente. Por ejemplo, AX se descompone en AH (parte
alta) y AL (parte baja). Evidentemente, cualquier cambio sobre AH o
AL altera AX.y
AX = Acumulador Primario.
Todas las operaciones de I/O son realizadas con el apoyo de este
registrador.
Operaciones que utilizan datos inmediatos necesitan de menos
memoria cuando son hechas a travs de AX.
Algunas operaciones con strings e instrucciones aritmticas piden el
uso de este registrador.
Generalmente, es usado, por los compiladores, para guardar valores
retornados de subrutinas.

El 8086

Registros de propsito general


BX = Base.
Es el nico registro de propsito general que puede ser utilizado en el
clculo de direccionamiento de memoria.
Todas las referencias a la memoria que usa este registro en el clculo
de direccionamiento toman el registro de segmento DS como segmento
padrn. De esta manera, no es preciso indicar una posicin de memoria
fija, sino la nmero BX (as, haciendo avanzar de unidad en unidad a
BX).
CX = Contador.
Es decrementado durante las operaciones con loops y strings.
Es usado para controlar el nmero de repeticiones de una instruccin
antecedida por el prefijo REP.
Es usado para controlar rotaciones y desplazamientos de varios bits.

El 8086

Registros de propsito general


DX = Direccionador de I/O y registro de Datos.

Es el nico registro en el cual se guarda la direccin de los puertos de


I/O.

Utilizado en operaciones aritmticas, incluyendo multiplicacin y


divisin.

Puede ser usado por compiladores, juntamente con AX, para guardar
valores retornados de subrutinas.

El 8086

Registros de propsito general


Las operaciones pueden ser realizadas en apenas 8 bits de estos
registros afectando el conjunto de 16 bits:
mov ax, 2155h
mov ah, 43h

AX = 2155h
AX = 4355h

Operaciones que operan con una parte de 8 bits, no afectarn la


otra parte del registro de 16 bits:
mov dx, 21FFh
inc dl

DX = 21FFh
DX = 2100h

El 8086

Registros de segmento:
Cuando se proyect el 8086, la Intel se preocup en facilitar el
acesso y el gerenciamento de memoria de la CPU que podra llegar
a 1 MByte. Por eso, decidi dividir esa memoria en segmentos de
64 K (16 bits). Todo acesso a la memoria del 8086 es realizado
direccionando segmentos de 64 K.
Los registros de Segmento funcionan como seleccionadores
de estos segmentos de direccionamiento. Cada registro especifica
el inicio de un segmento de 64 K direccionados consecutivamente.
El acceso a direcciones dentro de un segmento es hecho a travs
de um desplazamiento (offset) a partir de la direccin-base.
Son 4 tipos de segmentos considerados: CDIGO, DATOS, PILA y
EXTRA

El 8086

Registros de segmento:
SS = Registro de segmento de pila (stack segment).
Segmento de pila.

Todos los accesos a datos que utilizan los registros SP o BP


toman como referencia este registro.
ES = Registro de segmento extra (extra segment).
Segmento de ampliacin para zona de datos:
Operaciones con strings que usan DI para calcular el
direccionamiento son hechas usando el registro ES para definir
el segmento.
Es extraordinariamente til actuando en conjuncin con DS: con
ambos se puede definir dos zonas de 64 Kb, tan alejadas como
se desee en el espacio de direcciones, entre las que se pueden
intercambiar datos.

El 8086

Registros de segmento:
CS = Registro de segmento de cdigo (code segment).

Contiene la direccin del segmento con las instrucciones del programa.


Los programas de ms de 64 Kb requieren cambiar CS peridicamente.

Todos los acessos al cdigo de programa toman este registro como


selector. El offset es el registro IP.

DS Segmento de Datos (Data Segment): Todo acesso a datos


usa este registro como referencia, pero hay 3 excepciones:
Direcciones para acceso a una pila que usan el registro SS.
Direcciones para acceso a datos que usan el BP y son calculados a
partir de SS.
Operaciones con strings, que usan DI en el clculo de la direccin, son
hechas usando ES.

El 8086

Registros punteros de pila

Una pila es particularmente importante en lo que se refiere


al uso de subrutinas. Cuando una instruccin llama a una
subrutina, es preciso marcar cual instruccin del programa
debe ser ejecutada luego de terminar la subrutina.

Otra aplicacin para una pila es la posibilidad de la


ubicacin dinmica de variables. Las variables ubicadas en
la pila son accesadas con el auxilio de BP.

El 8086

Registros punteros de pila


SP = Puntero de pila (stack pointer). Apunta al inicio de la pila.
Utilizado en las instrucciones de manejo de la pila.

Almacena el offset del direccionamiento del tope de la pila,


controlando la localizacin dinmica de variables y el apilamiento de
direcciones de retorno de subrutinas.
Todas las referencias al SP, por definicin, usan el registro SS.
BP = Puntero base (base pointer).

Es un puntero de base, que permite accesar datos localizados en la


pila, dedicada al almacenamiento de datos (variables locales y
parmetros de las funciones en los programas compilados).
Permite accesar a parmetros que fueron pasados por la pila para
una determinada subrutina.

El 8086

Puntero de instrucciones o contador


de programa
IP= Puntero de instruccin (instruction pointer) (IP):
Marca el desplazamiento de la instruccin en curso dentro
del segmento de cdigo. Es automticamente modificado
con la lectura de una instruccin.
El puntero de instruccin (IP) y el registro CS, juntos, son
responsables por marcar la direccin de la prxima
instruccin a ser ejecutada.

El 8086

Registros ndices:

Son usados para accesar datos en la memoria de datos.


Son usados en las operaciones con strings.
Pueden ser usados como operandos en las operaciones
lgicas y aritmticas de 16 bits.

SI = ndice fuente (source index). Utilizado como registro de


ndice en ciertos modos de direccionamiento indirecto,
tambin se emplea para guardar un valor de desplazamiento
en operaciones de cadenas.
DI = ndice destino (destination index). Se usa en determinados
modos de direccionamiento indirecto y para almacenar un
desplazamiento en operaciones con cadenas.

El 8086

Registro de estado o de indicadores (flags)

Es un registro de 16 bits de los cuales 9 son utilizados para


indicar diversas situaciones durante la ejecucin de un programa.
Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condicin, que
reflejan los resultados de operaciones del programa
Los bits del 8 al 10 son indicadores de control y el resto no se
utilizan.
Estos indicadores pueden ser comprobados por las instrucciones
de salto condicional, lo que permite variar el flujo secuencial del
programa segn el resultado de las operaciones.

Bit

Indicador de:

Uso
Indicador de arrastre del bit de mayor orden,
que puede ocurrir en las operaciones
aritmticas suma y resta.

CF

Acarreo ("Carry Flag")

PF

Paridad ("Parity Flag")

AF

Acarreo auxiliar

Indicador de ajuste en operaciones


aritmticas con cantidades BCD

ZF

Cero ("Zero Flag")

Est activo si el resultado de operacin es


cero o resultado de comparacin igual.

SF

Signo ("Sign Flag")

Si est activo indica que el resultado de


operacin o de comparacin son negativos.

TF

IF

Detencin ("Trap Flag")

Interrupcin ("Interrupt Flag")

Si est activo indica un nmero par de bits


activos (bits cuyo contenido es 1). Esta
informacin es til cuando el procesador
controla transmisiones de datos.

Si est activo, el procesador genera


automticamente una interrupcin despus
de la ejecucin de cada instruccin, lo que
permite controlar paso a paso la ejecucin
del programa. Este bit debe estar
normalmente inactivo (a 0).
Este bit controla el estado del sistema de
interrupciones enmascarables . Cuando
est activo (1) permite las interrupciones; el
estado inactivo (0) las deshabilita.

DF
DF

Direccin ("Direction Flag")


Direccin ("Direction Flag")

Determina si las operaciones con strings van


a incrementar o decrementar los registros de
indexacin SI y DI

OF

Desbordamiento (Overflow Flag")

Seala desbordamiento aritmtico

El 8086

Bit

Indicador de:

Indicativo si bit 1

Indicativo si bit 0

CF

Acarreo

CY ("Carry yes")

NC ("No Carry")

PF

Paridad

PE ("Parity Even") paridad par

PO ("Parity Odd") paridad impar

AF

Acarreo auxiliar

AC ("Auxiliar Carry")

NA ("No Auxiliar")

ZF

Cero

ZR ("Zero")

NZ ("No Zero")

SF

Signo

NG ("Negative") negativo

PL ("Plus") positivo

IF

Interrupcin

EI

DI ("Disabled Interrupt") desactivada

DF

Direccin

DN ("Down") decremento

UP incremento

OF

Desbordamiento

OV ("Overflow")

NV ("No overflow")

("Enabled Interrupt") activa

Registro de banderas en operaciones


aritmticas:
Si tiene las siguientes instrucciones, identificar el estado de los bits
del registro de banderas:
MOV
AX,34F5H
ADD
AX,95EBH
Solucin:
34F5
0011 0100 1111
+95EB
0101 1110 1011
CAE0
1100 1010 1110
CF=0, no existe acarreo del b15
PF=0, el nmero de unos del resultado es impar
AF=1, existe acarreo de b3
ZF=0, el resultado obtenido es distinto de cero
SF=1, el b15 es 1

El 8086

Segmentacin de la Memoria en el 8086

El 8086

SEGMENTACIN
FFFFF

Direccin lgica
Direccin fsica
SEGMENTO

Desplaz
amiento

Registro de segmento

Direccin de segmento

CPU
0

Memoria

El 8086

Segmento de Memoria
FFFFF

SEGMENTO

Memoria

Un segmento es un rea
continua de memoria que puede
tener hasta 64K-bytes, que debe
comenzar en una localidad de
memoria cuya direccin sea
lmite de 16 bytes (cantidad
denominada prrafo) y que
puede traslaparse con otros
segmentos.

El 8086

Segmentos de Memoria

El segmento de cdigo (tiene como base el contenido


del registro CS).
En este segmento se encuentran las instrucciones que
forman el programa. Para acceder a los datos
contenidos en l, se usa el registro IP como
desplazamiento.
El segmento de datos (que tiene como base el registro
DS).
Contiene los datos que utiliza el programa (variables,
etc.) Para acceder a los datos contenidos en l, se suele
utilizar los registros SI y DI como desplazamiento.

El 8086

Segmentos de Memoria
El segmento de pila (con SS como base).
- En l se desarrolla la pila del programa, utilizada para
almacenar temporalmente datos, llamadas a funciones,
etc. Debe estar presente en todos los programas EXE de
forma obligada. Se utiliza el registro SP para acceder a los
datos de este segmento.
El segmento extra (con ES como base).
- Su uso es opcional, y en l se encuentra un segmento
definido por el usuario y que, regularmente, contiene datos
adicionales. Al igual que ocurre con el segmento de datos,
para acceder a los datos contenidos en l, se suelen
utilizar los registros SI y DI.

El 8086

SEGMENTACIN
TRASLAPE DE SEGMENTOS

CS

CS
SEGMENTO DE
CDIGO

PROGRAMA

SEGMENTO DE
CDIGO

DS
SEGMENTO DE
DATOS
OTRO SEGMENTO
ES
SEGMENTO EXTRA
DE DATOS
SS
STACK

MEMORIA

MEMORIA

El 8086

SEGMENTACIN
Relocalizacin de un programa usando el registro CS

02000
600
PROGRAMA

SEGMENTO DE
CDIGO EN CURSO

nuevo (CS)=1A30

1A300
600
PROGRAMA

MEMORIA

SEGMENTO DE
CDIGO
RELOCALIZADO

El 8086

Direccin Fsica y Direccin Lgica

Cada localidad de memoria tiene dos tipos de direcciones:


Direccin Fsica y Direccin Lgica o efectiva
Una direccin Fsica es el valor nico de 20 bits que identifica la
localizacin de cada byte en el espacio de memoria de 1 Mbyte.
Los programas tratan con direccin Lgicas mas que con la
direccin Fsica.
Para cualquier localidad de memoria, el valor base del segmento
ubica el primer byte del contenido del segmento y el valor del
offset es la distancia, en bytes , de la localizacin destino del
principio del segmento.

El 8086

Formacin de una Direccin Fsica


Siempre que una memoria es accesada, se genera una direccin
fsica a partir de la direccin lgica.
Direccin
efectiva,
lgica u
offset

4 bits

Direccin de
segmento

0000
0000

Direccin fsica

20 BITS

EL REGISTRO DE
SEGMENTO SE
DESPLAZA 4 BITS
HACIA LA
IZQUIERDA
(MULTIPLICACIN
x16)

DIRECCIN FSICA:

Ejemplo:
si DS=5000 y BX=1950, la direccin lgica es
5000:1950 y la direccin fsica es:
50000
+1950
51950

El 8086

Formacin de una Direccin Fsica

El 8086

Formacin de una Direccin Fsica

Por Ejemplo:
Si la direccin base del segmento es
2915h, entonces las direcciones en
este segmento inician en 2915:0000
y van hasta 2915:FFFF

SEGMENTO DE CDIGO:

Para ejecutar un programa el uP busca y decodifica


las instrucciones del CS.
Direccin Lgica: CS:IP
Ejemplo:
Dir. LgicaOpcode
Assembly L.
1132:0100 B057
MOV AL,57
1132:0102 B686
MOV DH,86
1132:0104 B272
MOV DL,10110101b
1132:0106 01D0
ADD AX,DX

SEGMENTO DE DATOS:

Para facilitar el manejo de datos el 8086 tiene


asignada un rea de memoria especfica que se
llama DS.

Direccin Lgica: el segmento de datos tiene como


offset los registros BX, SI y DI.

Ejemplo: si DI=0200 y se desea almacenar los datos


25H, 12H y 25FFH; los datos se almacenan en las
siguientes localidades de memoria:
DS:0200=25H
DS:0201=12H
DS:0202=FFH
DS:0203=25H

SEGMENTO DE PILA:

Es una seccin para leer y/o


escribir en la RAM.
La pila es de tipo LIFO,
ltimo en entrar, primero en
salir.
Los dos registros utilizados
para manejar el SS son: SP
y BP.
La instruccin para
almacenar en la pila es
PUSH y para vaciar la pila
es POP.

Ejemplo:siSP=1236,AX=24B6,BX=85C2,
DX=5F93.Muestreelcontenidodelapila
conlassiguientesinstrucciones.
PUSHAX
PUSHBX
PUSHDX

SS:1230

93

SS:1231

5F

SS:1232

C2

C2

SS:1233

85

85

SS:1234

B6

B6

B6

SS:1235

24

24

24

PUSH AX

PUSH BX

PUSH DX

SS:1236

START

SOBRELAPAMIENTO DE SEGMENTOS:

Dos segmentos estn sobrepuestos


cuando tienen la misma direccin
DS:SI
fsica.
64K
El sistema operativo sobrepone los
CS:IP
segmentos cuando considera
necesario. (para no desperdiciar
memoria)
Ejemplo:
Dir. Lgica
Dir. Fsica
DS:SI=1234:4321
1000:5020
15020
CS:IP=1665:0011
1500:0020
15020
Dir.F1=Dir.
F2=16661H
1302:2000
15020

64K

Vous aimerez peut-être aussi