Copy Link
Add to Bookmark
Report

SET 032 0x0E

  

-[ 0x0E ]--------------------------------------------------------------------
-[ Procesadore 8086 ]--------------------------------------------------------
-[ by elotro ]-------------------------------------------------------SET-32--

P R O C E S A D O R

______ ______ ______ _____
| __ | | __ | | __ | | ___|
| |__| | | | | | | |__| | | |____
| __ | | | | | | __ | | __ |
| |__| | | |__| | | |__| | | |__| |
|________| |______| |________| |______|


Si, si. Ya se lo que estan pensando, vieron el enorme [e inutil] ascii
y dijieron : - Uf! Otra vez este otro!.

Pues no soy este otro, sino elotro y seguire molestando con mis articulos
de retroinformatica [y tendran que aguantarse los de electronica tambien !]

He escrito este articulo para aquellos que, cuando vieron las tablas de
instrucciones del Z80, cayeron desmayados por la cantidad de instrucciones
que tenia [y otros cayeron por la cantidad de alcohol que tenian XD).

El procesador 8086 es, como adivinaron, el predecesor de los x86 que la
mayoria de nosotros usamos; asi que las instrucciones que veran seran
relativamente pocas y familiares para todo el que sepa algo de assembler.

Bueno, es momento de dejar de hacerse el gracioso [aunque no tenga nada de
humor] y comenzar el articulo.

Consultas, criticas o lo que quieras ---> elotro.ar@gmail.com


INDICE DE CONTENIDOS - uP 8086
""""""""""""""""""""""""""""""""

1. Un poco de historia
2. Caracteristicas Principales
2.1 Descripcion de los terminales
2.2 Registros del uP
3. Sistema minimo y maximo del 8086
4. Tabla de instrucciones del uP
4.1 Significado de abreviaturas
4.2 Condiciones
4.3 Modos de direccionamiento
5. Agradecimientos
6. Bibliografia



1. Un poco de historia
===================

Cuando este uP salio a la luz (1978), los microprocesadores de 8 bits
dominaban el mercado, tanto en el campo profesional, como en el de la
informatica y automatica de aficionados.

Los microprocesadores de 16 bits quedaban reservados al ambito extremo de
lo profesional, entre otras cosas porque la realizacion de una CPU con estos
procesadores era costosa y compleja, principalmente porque el uP estaba
compuesto de unos cuantos microchips.

La aparicion del 8086 produjo una revolucion, en la que se comenzaron a
tomar en cuenta los uP de 16 bits, que aventajaban por mucho a sus
predecesores de 8 bits.


2. Caracteristicas Principales
===========================

Las caracteristicas mas importantes de este microprocesador son :

* Bus de datos de 16 bits

* Capacidad de direccionamiento que se extiende hasta un megabyte (1048576
bytes, era suficiente y en algunos casos mucho para su epoca)

* Esta fabricado en tecnologia HMOS (High MOS, MOS de alta velocidad), lo
que le permite operar a una frecuencia minima de 5 MHz; proporcionando
un tiempo de ejecucion de aproximadamente 500 nanosegundos para las
instrucciones mas cortas.

* Fue concebido para trabajar con lenguajes de alto nivel, como Basic,
Cobol, Fortran o Pascal; y su utilizacion en computadoras personales.

* Posee un amplio repertorio de instrucciones (menos que el Z80), que le
permiten operar tanto con 8 como con 16 bits.

* Su alimentacion es unica y de 5V.



2.1 Descripcion de los terminales
=============================


.----------.---------.----------.
GND | | | | Vcc (+5V)
AD14 | \_______/ | AD15
AD13 | | A16/S3
AD12 | | A17/S4
AD11 | | A13/S5
AD10 | | A19/S6
AD9 | #### #### #### #### | BHE/S7
AD8 | # # # # # # # | MN/MX <-------------
AD7 | #### # # #### # #### | RD _ |
AD6 | # # # # # # # # | RQ/GTO(HOLD | |
AD5 | #### #### #### #### | RQ/GT1(HLDA | Terminales
AD4 | | LOCK (WR) | de doble
AD3 | | S2 (M/I0) | funcion
AD2 | | S1 DT/R | segun
AD1 | | S0 (DEN) | estado
AD0 | | QS0 (ALE) | de MN/MX
NMI | | QS1 INTA _|
INTR | | TEST
CLX | | READY
GND | | RESET
|_______________________________|


El 8086 esta encapsulado en el formato clasico de 40 patas, cuyas funciones
son:

- AD0-AD15: Son los terminales del bus de direcciones y de datos, ya que
ambos buses salen al exterior en tiempos diferentes. Existen 4 tiempos de
funcionamiento T1, T2, T3 y T4, durante T1 sale al exterior la direccion,
durante T2 a T4 salen al exterior los datos.

- A16-A19: Son 4 terminales por donde sale la parte alta de la direccion
para poder acceder al megabyte de espacio de memoria. Esto ocurre durante
T1. Durante T2 a T4 se usan estos bits para indicar el uso de los
registros internos. (S3 a S6)

- BHE: Durante T1 este terminal en combinacion con ADO da las funciones
siguientes:

BHE=0,ADO=0 : Bus de datos 16 bits
BHE=1,ADO=0 : El byte inferior esta redirigido a las direcciones pares.
BHE=0,ADO=1 : El byte superior del bus de datos esta referido a las
direcciones impares.
BHE=1,ADO=1 no se utiliza

- RD: Salida para indicar el ciclo de lectura (READ)

- READY: Entrada para la adaptacion de memorias y perifericos lentos. Es
muy util en el 8086, teniendo en cuenta su velocidad y los perifericos
de su epoca.

- INTR: Entrada de interrupcion enmascarable.

- NMI: Entrada de interrupcion no enmascarable.

- TEST: Entrada de comprobacion de la instruccion TEST.

- RESET: Inicializacion del uP

- CLX: Clock externo (Aprox. 5 MHz)

- Vcc y GND: Terminales de alimentacion. Vcc=+5V, GND=Masa o tierra

- MN/MX: Discrimina algunas seniales con respecto a su conexion a un
sistema minimo de funcionamiento (MN/MX=1) o a un sistema maximo o
de mayor envergadura (MN/MX=1). Para MN/MX=1 los terminales tienen
estas funciones:

- HOLD: Peticion de acceso a bus desde algun periferico.

- HOLDA: Salida de reconocimiento por parte del uP al acceso y permiso del
mismo.

- WR: Ciclo de escritura (WRITE)

- M/IO: Por esta salida el uP activa la memoria cuando es uno, debido a
alguna instruccion referida a la misma; o activa los circuitos de INPUT/
OUTPUT (I/O), cuando es un cero, debido a la ejecucion de una instruccion
referida a los circuitos I/O a los que se pueden conectar perifericos o
bloques de datos de hasta 64 KB, que es la extension del I/O.

- DT/R: Salida por donde se indica el ciclo de transmision o recepcion de
datos para circuitos especializados que se aniaden al uP en un sistema
minimo, como por ejemplo un IC 8287 (demultiplexor de bus)

- DEN: Salida para la habilitacion de los datos en un sistema minimo que
utilize el 8287.

- ALE: Esta salida habilita el latch (acceso) de direcciones.

- INTA: Indica a un periferico que ha solicitado una interrupcion, que esta
sera atendida a partir de ese momento.

Cuando MN/MX=0, los terminales numerados del 32 al 34 tienen los siguientes
cometidos por este mismo orden. (ver figuras)

- RQ/GT0: Otro uP asociado puede pedir acceso a un bus comun una vez que
el uP anterior haya concluido la instruccion en curso.

- RQ/GT1: Por esta salida el uP pide acceso al bus comun compartido por
varios microprocesadores en un sistema complejo.

- LOCK: Indica a otros uP que no pueden acceder al bus comun mientras este
en estado bajo o cero.

- S0-S2: Son tres terminales que decodifican alguno de los ocho posibles
estados segun:

S0=0,S1=0,S2=0: Reconocimiento de interrupcion
S0=1,S1=0,S2=0: Lectura de circuitos I/O
S0=0,S1=1,S2=0: Escritura circuitos I/O
S0=1,S1=1,S2=0: Paro, halt
S0=0,S1=0,S2=1: Codigo de acceso a interrupcion, fetch (ir por interrupt)
S0=1,S1=0,S2=1: Lectura de memoria
S0=0,S1=1,S2=1: Escritura de memoria
S0=1,S1=1,S2=1: No opera

- QS0 y QS1: Son salidas que indican el estado del uP en el manejo de las
instrucciones segun:

QS1=0,QS0=0: No opera
QS1=0,QS0=1: Primer byte del codigo OP desde la cola
QS1=1,QS0=0: Cola vacia
QS1=1,QS0=1: Byte subsiguiente desde la cola. No era el primero.



2.2 Registros del uP
================


El 8086 posee un completo repertorio de registros, tal como se muestra en la
figura.

El juego de instrucciones del uP permite operar con ocho o 16 bits, segun
lo indique la instruccion, de ahi que el primer bloque de registros sean
acumuladores de 8, denominados AH, BH, CH, DH y DL (A,B,C,D indica el
registro, H (high) indica parte alta y L (low) indica parte baja). Cuando los
acumuladores son tratados como de 16 bits, reciben los nombres de AX, BX, CX y
DX.

El siguiente bloque de registros contiene el puntero stack y tres punteros
mas denominados base, fuente y destino para el movimiento interno de los
datos o con respecto a la memoria.

El tercer bloque contiene el puntero de instruccion, que hace de contador
de programa y el registro de flags, que es realmente, el registro de estado;
tipico de todos los uP. Estos bits indican el signo del dato operado, si ha
habido acarreo, overflow, la paridad, el estado de las interrupciones
enmascarables mediante el bit 1, el autoincremento o decremento de un registro
y un bit auxiliar llamado trap. El ultimo bloque lo componen cuatro registros
de 16 bits, que definen de forma independiente cuatro areas de memoria de
64 KB cada una.

_____________
AX : | AH | AL | Registro Acumulador
BX : | BH | BL | Registro Base
CX : | CH | CL | Registro Contador
DX : | _DH | DL | Registro de Datos
`------'------'
________
| SP | Registro del apuntador de la pila (stack)
| BP | Registro de apuntadores base
| SI | Registro ¡ndice fuente
| DI | Registro ¡ndice destino
`--------'
___________________
|________IP_________| Registro de apuntador de siguiente instrucci¢n
| FLAGS | FLAGS | Registro de banderas (flags)
`---------'---------'
________
| CS | Registro del segmento de c¢digo
| DS | Registro del segmento de datos
| SS | Registro del segmento de pila
| ES | Registro del segmento extra
`--------'
________
| PC | Contador de programa
`--------'
________
| SR | Registro de estado
`--------'


Diagrama del registro de estado:
_____________________________________________________________________
| | | | | | | | | | | | | | | | |
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|____|____|____|____|____|____|___|___|___|___|___|___|___|___|___|___|
| | | | | | | | |_ ACARREO
| | | | | | | |____ PARIDAD (P)
OVERFLOW ______________| | | | | | |_______ ACARREO AUXILIAR
AUTOINC/DEC _______________| | | | |_______________________ CERO (Z)
DE SI Y DI(D) | | |__________________________ SIGNO (S)
INTERRUPCIONES __________________| |
TRAP(T) _____________________________|


Para mayor informacion sobre las caracteristicas de cada registro, consulta
el articulo 'Diseccion del 8086', por Sir Willy the Psikopath, en SET 13.


3. Sistema minimo y maximo del 8086
================================

El 8086 fue concebido para trabajar de dos formas: en uns sistema minimo,
y en un sistema maximo.

En el sistema minimo el uP trabaja independiente con la circuiteria tipica
de este microprocesador, a la cual se le conecta, es decir, el sistema minimo
de cualquier otro microprocesador.

Todos los microprocesadores de la serie 80 tienen algo en comun, por ejemplo
el circuito 8284, que es el clock que se usa en todos los demas.

Como ya mencione, su bus de 16 bits es comun para los datos y las direciones
por lo que hace falta un latch que almacene la direccion por la que sale el
bus en el primer ciclo, para luego operar con los datos que salen por el bus
en esta direccion.

En realidad, este el el sistema seguido por otros microprocesadores de 16
bits, que tambien se encuentran encapsulados en 40 terminales. El circuito
8286 es, basicamente, un amplificador bidireccion del bus de datos, que
atiende al flujo de entrada y salida.

El sistema de conexion maximo, denominado asi por su mayor extension
comparativa con el minimo, esta especialemte concebido para operar en sistemas
mucho mas complejos y para la union con otros microprocesadores 8086,
trabajando enlazadamente (PCs de multiprocesamiento multiprocesador)

En un sistema multiprocesador en el que operan independientemente varios
micro procesadores compartiendo a veces buses comunes, siempre hay uno de
ellos cuyo software esta pensado para que haga como master o maestro del
sistema, trabajando como esclavos los demas. En el sistema de configuracion
maxima, ademas de los circuitos de generacion del clock, latch y amplificador
de bus, es posible aniadir alguno mas, como el 8288 como controlador de buses,
y el 8285, como controlador de interrupciones, que en el 8086 son similares
a los de su predecesor, el 8085.

En el esquema veras la representacion del sistema maximo de conexion, con
todos los circuitos en LSI (large scale integration/integracion a gran escala)


.------. .------------. .-------. .--------------.
| 8284 | ---> | | <==== | 8259A | <==== |Interrupciones|
|______| | 8086 | |_______| |______________|
| |
|____________|
|| | |
.------. || _| |_
| 8288 | <=======/ \___/
|______| .-----------.
|| | 8282/8289 |
|| | 8286/8287 |
|| |___________|
|| | | | |
|| | | | |
|| | | | |==========> .-----------.
||===================================> | Memoria |
|| | |================> |___________|
|| | | | |
|| | | | |
|| | | | |==========> .-----------.
||===================================> | 8087 |
|| | |================> |___________|
|| | | | |
|| | | | |
|| | | | | .------------------------------.
||===================================> | Chips del sistema |
|| | | | |==========> | 8202 Control RAM dinamica |
|| | |================> | 8251A UART |
|| D | | | | | 8253.5 Timer de intervalos |
|| A | | | | D | 8255A.5 Interface Perifericos|
|| T | | | | I | 8257.5 Controlador DMA |
|| O | | | | R | 8271 Control Floppy Disk |
|| S | | | | E | 8273 Control HDLC/SDLC |
|| | | | | C | 8275 Control CRT |
|| | | | | C | 8278/79 Interface Teclado/ |
|| | | | | I | Display ___________|
|| | | | | O | 8291 GPIB I/O |IEEE 488BUS|
|| | | | | N | |___________|
|| | | | | E | 8292 GPIB control bus |
|| | | | | S | 8295 Control Imp. |
|| | | | | | Matriz de punto |
|| | | | | |______________________________|
|| | | | |
|| | | | |
|| | | | |
|| | | | |==================> .--------.
|| | |========================> | 8089 |
||===========================================> |________|
|| | | | | .------------|--|--|-----------.
|| | | | | | .------------|--|--------. | |
|| | | | | | | .------------|----. | | |
|| | | | | | | | | | | | | | |
_||_ _| |__| |_ | | | | | | | | | |
\__/ \____/\____/ \_/\_/ V \_/\_/ V V \_/\_/
.------------------------------. .---------. .--------. .--------.
| Interfaz multiprocesador | | Memoria | | I/O | | DMA |
|______________________________| |_________| |________| |________|
|| | | | |
_||_ _| |__| |_
\__/ \____/\____/

Hacia otros microprocesadores



Referencias :
"""""""""""""
8284 : Generador del clock
8086 : Microprocesador
8259A : Controlador de interrupciones
8288 : Controlador de Bus
8282/8283 : Demultiplexor de Bus
8286/8287
8087 : Procesador de datos numericos
8089 : Procesador de Input/Output

Puedes ampliar los datos sobre los diferentes circuitos integrados mediante
una buena busqueda en internet, o en la pagina de intel: www.intel.com


4. Tabla de instrucciones del 8086
===============================

Estas instrucciones son MUY familiares a las que ustedes, chicos que conocen
assembler, o que vos, cracker, estas acostumbrado a cambiar.
(supongo que no crackearas programas comerciales, o no ?) :)
Por supuesto que no veras nada del estilo de INC EAX por que esa es una
instruccion de 32 bits y este es un uP de 16 bits.


Instrucciones de Transferencia:

MOV : Trasfiere una palabra (16 bits) o un byte (8 bits)
XCHG : Intercambia una palabra o un byte
LEA : Carga una direccion en un registro
LDS : Carga un puntero mediante Ds
LES : Carga un puntero mediante Es
LAHF : Carga los flags
SAHF : Transfiere los flags
PUSHF : Coloca los flags en el stack
POPF : Saca los flags
XLAT : Transforma un caracter de un codigo EBCDID a uno ASCII [ util no? ]


Instrucciones aritmeticas:

ADD : Suma de dos palabras o bytes con o sin signo
ADC : Suma teniendo en cuenta el acarreo
SUB : Resta
SUBB : Resta teniendo en cuenta el borrow
MUL : Multiplicacion de dos palabras o bytes con o sin signo
IMUL : Multiplicacion de datos enteros
DIV : Division de datos de 32 y 16 bits por datos de 16 y 8 bits sin signo
IDIV : Division entera sin signo
CMP : Compara palabras o datos
CBN : Extension de signo al pasar de 8 a 16 bits
CWD : Extension de signo al pasar de 16 a 32 bits
DAA : Ajuste decimal para sumar
DAS : Ajuste decimal para restar
DEG : Negacion de un numero
AAM : Ajuste decimal para multiplicar
AAD : Ajuste decimal para dividir
INC : Incrementar
DEC : Decrementar


Instrucciones Logicas:

NOT : Negacion
OR : Operacion OR
AND : Operacion AND
XOR : Operacion XOR
TEST : Operacion AND para comprobar los flags


Instrucciones de salto e interrupcion:

JMP : Salto sin condicion
J : Salto segun 30 condiciones diferentes
Las mas comunues son:
JE : Jump if equal, salta si es igual
JNE: Jump if not equal, salta si no es igual
JZ : Jump if is zero, salta si es cero
JNZ: Salta si no es cero.
JA : Salta si es mayor.
JNA: Salta si no es mayor
JBE: Salta si es menor o igual.
JNB: Salta si no es menor
JAE: Salta si es mayor o igual.


JCX : Salto si el valor de CX=0
LOOP : Regula de 5 formas el final de un bucle
INT : Interrupcion por software
INTO : Interrupcion condicional
IRET : Retorno de una interrupcion
LODS : Transfiere un dato a AL y AX
STOS : Transfiere un dato desde AL y AX
SCAS : Compara un dato con AL y AX
CMPS : Compara dos caracteres
MOVSB : Transfieren bytes o palabras
MOVSM


Instrucciones de control:

NOP : No opera
WAIT : Para el procesador hasta que TEST=0
HALT : Para el procesador
LOCK : Permite a LOCK que pase a 0, durante la ejecucion de la proxima
instruccion
CLD
y CLI : Ponen a 0 los flags D e I, respectivamente
STD
y STI : Ponen a 1 los flags D e I
CLC
y STC : Ponen a 0 y 1 los flags de acarreo
CMC : Complementa el flag de acarreo
IN : Entrada de un periferico y transfiere a AL o AX
OUT : Salida de AL o AX a un periferico
ROL : Rotacion a la izquierda
ROR : Rotacion a la derecha
RCL : Rotacion a la izquierda incluyendo el nit (o flag) carry del status
RCR : Rotacion a la derecha incluyendo el nit (o flag) carry del status
CALL : Salto a sub(rutina)
RET : Retorno desde sub
PUSH : Carga un dato en el stack
POP : Saca un dato del stack
REP : Repetir
REPE : Repetir si es igual
REPNE : Repetir si no es igual
REPZ y
REPNZ : Repetir si es cero o no, respectivamente. Son instrucciones que
manejan cadenas de caracteres, usando como punteros los registros
SI y DI



4.1 Significado de abreviaturas
===========================

AL = Registro de 8 bits
AX = Registro acumulador de 16 bits
CX = Registro contador
DS = Segmento de datos
ES = Segmento extra


4.2 Condiciones
===========

* Si Mod=11 entonces r/m se trata como un registro
* Si Mod=00 entonces DISP=0 (sin desplazamiento, excepto si r/m=110,
entonces EA indica el desplazamiento
* Si Mod=01 entonces (DISP) el desplazamiento bajo es de 16 bits con signo
(no hay desplazamiento alto)
* Si Mod=10 entonces Desplazamiento.Alto=Desplazamiento.Bajo

* Si r/m=000 entonces EA=(BX)+(SI)+desplazamiento
* Si r/m=001 entonces EA=(BX)+(DI)+desplazamiento
* Si r/m=010 entonces EA=(BP)+(SI)+desplazamiento
* Si r/m=011 entonces EA=(BP)+(DI)+desplazamiento
* Si r/m=100 entonces EA=(SI)+desplazamiento
* Si r/m=101 entonces EA=(DI)+desplazamiento
* Si r/m=110 entonces EA=(BP)+desplazamiento
* Si r/m=111 entonces EA=(BX)+desplazamiento

* Si S=W=01, entonces toma el dato como 16 bits
* Si S=W=01, entonces el dato de un byte es extendido a 16 bits

* Si V=0 entonces Count=1
* Si V=1 entonces Count en (CL)

* X=Cualquier valor

* Prefijo de segmento=001 reg 1101
* Reg es asignado segun la tabla

Las instrucciones con referencia a los bits o flag del status usan 16 bits.

El simbolo de los flags es:
FLAGS=XXXX(OF): (DF): (IF): (TF): (SF): (ZF): X: (AF): X: (PF):X(CF)



4.3 Modos de direccionamiento
=========================

Existen 7 modos de direccionamiento disponibles en el 8086

* Registro base: La direccion se obtiene mediante la suma del contenido
de un registro base y el dato de la instruccion.

* Inmediato: Indicado por la propia instruccion

* Registro indirecto: La direccion se encuentra en BX, BP, SI o DI

* Directo: La direccion esta en la misma instruccion

* Relativo: Usado por instrucciones de salto y acceso a subrutinas

* Registro indexado: La direccion se obtiene sumando a un registro indice
el dato de la instruccion

* Registro base indexado: La direccion es la suma del contenido del registro
base mas el registro indice mas el dato de la instruccion.


5. Agradecimientos
===============

Como siempre, a todo el staff de SET, a madfran y a todos que tienen y
tuvieron algo que ver con SET.

Y a vos que estas leyendo el articulo.


6. Bibliografia
============

Microprocesadores - Editorial Nueva Lente
Informatica - Editorial Nueva Lente
Microprocesadores de 16 bits - Jose Maria Angulo - Ed. Paraninfo

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT