0% encontró este documento útil (0 votos)
146 vistas6 páginas

8086

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1/ 6

LA FAMILIA 80X86. INSTRUCCIONES Y DATOS. PROGRAMACIN.

REGISTROS

Los registros son porciones de memoria dentro de la CPU dnde se pueden


almacenar, recuperar y manipular nmeros. El 8086 posee cinco tipos de registros de
16 bits: Registros de Uso General, Registros de Segmento, Registros ndice, Registros
de Pila y Registros de Banderas.

REGISTROS DE USO GENERAL

Hay cuatro registros de uso general: AX, BX, CX y DX. stos son registros de 16
bits pero puede dividirse a cada uno en dos registros de 8 bits. AX, por ejemplo, se
divide en AH que contiene el byte superior (High) y en AL que contiene el byte inferior
(Low). Cada registro de 8 bits se puede usar separadamente.

REGISTROS NDICE

Tambin llamados punteros, son registros de 16 bits. SI (Source Index o ndice


Fuente) y DI (Destination Index o ndice Destino) se usan principalmente para el
manejo de strings (cadenas o secuencias de datos).
IP (Instruction Pointer o Puntero de Instruccin) almacena la direccin de la
siguiente instruccin a ejecutar y no debe ser alterado.

REGISTROS DE PILA

Los registros de pila son: BP (Base Pointer o Puntero Base) y SP (Stack Pointer
o Puntero de Pila) y se utilizan como punteros a la zona de memoria que ocupa la pila.
REGISTROS DE SEGMENTO

El procesador 8086 fue diseado originalmente para acceder a 1M (220)


direcciones de memoria y para ello debe emplear 20 bits. Como cada registro puede
almacenar 16 bits y por lo tanto puede direccionar solamente 64K (216), se utilizan dos
registros: un registro de segmento y un registro de desplazamiento u offset. Hay cuatro
registros de segmento: CS (Code Segment o Segmento de Cdigo), DS (Data Segment o
Segmento de Datos), ES (Extra Segment o Segmento Extra) y SS (Stack Segment o
Segmento de Pila).
La direccin fsica se forma de la siguiente manera: Se desplaza cuatro bits hacia
la izquierda (o se multiplica por 10h) al contenido del registro de segmento y luego se le
suma el desplazamiento. La direccin obtenida tendr 20 bits como se buscaba.
El mximo desplazamiento dentro de un segmento dado es de 64K.
Una direccin de memoria se expresa simblicamente de la forma
segmento:desplazamiento y la direccin fsica se obtiene multiplicando el segmento
por 16 y sumndole el desplazamiento u offset.

Por ejemplo:
0040h:0001h equivale a la direccin 00401h (0040h*10h+0001h)
1000h:0050h equivale a la direccin 10050h (0100h*10h+0050h)

Los registros de segmento tienen asociados ciertos registros particulares de


desplazamiento.
El cdigo (instrucciones) se direcciona con CS:IP siempre
Los datos se direccionan con DS:BX, DS:SI o DS:DI (*)
La pila se direcciona con SS:SP o SS:BP

El registro de segmento extra se utiliza como segmento auxiliar en el acceso a zonas de


datos. Las anteriores asignaciones son las que el 8086 realiza por defecto pero pueden
cambiarse.

(*) En las instrucciones de manejo de cadenas, los datos de origen se seleccionan con DS:SI y los datos
de destino, con ES:DI
REGISTRO DE BANDERAS

El registro de banderas se utiliza como informacin del resultado de una


operacin aritmtica o lgica, y como control de algunas operaciones del
procesador. Cada bandera es un bit dentro del registro cuyo significado es la
existencia o no de cierta condicin, es decir, si sta es verdadera o falsa. Hay 9
banderas (los 7 bits restantes del registro no se utilizan)
De las 9 banderas disponibles, existen 6 banderas de estado y 3 banderas de
control.
Banderas de estado:
C (Carry) Bandera de acarreo. Indica acarreo en las instrucciones aritmticas
con nmeros sin signo.
O (Overflow) Bandera de desbordamiento aritmtico con nmeros signados.
Z (Zero) Bandera de resultado cero.
S (Sign) Bandera de resultado negativo.
P (Parity) Bandera de paridad (resultado con nmero par de bits).
A (Auxiliar) Bandera auxiliar. Indica si hay necesidad de ajuste en las
operaciones aritmticas con nmeros BCD.
Banderas de control:
D (Direction) Bandera de direccin. Controla la direccin (hacia delante o hacia
atrs) en las operaciones con cadenas de caracteres incrementando o
decrementando automticamente los registros ndices SI y DI.
I (Interrupt) Bandera de interrupciones. Indica si se permiten o no las
interrupciones de los dispositivos externos.
T (Trap) Bandera de atrape. Controla la ejecucin de instrucciones paso a paso
(usada por el programa DEBUG).

LA PILA

La pila o stack es un rea de memoria dnde se pueden almacenar y recuperar


datos. Dicha rea de memoria se comporta como una pila de platos (El ltimo plato que
se coloca en lo alto de la pila es el primero que se debe sacar). Esta forma de
almacenamiento se conoce como LIFO (Last In First Out o ltimo que Ingresa,
Primero que Sale). El Registro Puntero de Pila (SP) apunta siempre a la direccin de
memoria correspondiente al tope de la pila.
La pila se ubica en una direccin alta, y a medida que ingresan datos, va
creciendo hacia abajo (decreciendo en memoria).
INSTRUCCIONES DEL 8086

El procesador 8086 es un procesador con arquitectura CISC (conjunto de


instrucciones complejo) con alrededor de 100 instrucciones.
Una instruccin es codificada en una serie de nmeros binarios para que pueda
ser ejecutada por el procesador. Dichos nmeros constituyen el Cdigo de Mquina o
Lenguaje de Mquina.
Las instrucciones se representan con unos pocos caracteres alfabticos, ms
fciles de recordar, llamados nemotcnicos. El conjunto de nemotcnicos constituye el
Lenguaje Ensamblador. El proceso de traduccin de Lenguaje Ensamblador a Lenguaje
de Mquina lo realiza un programa llamado Programa Ensamblador o Assembler.

El formato de una instruccin en Ensamblador consta de cuatro campos:

[etiqueta] nombre_instruccin [operandos] [comentario]

Los campos encerrados entre corchetes son opcionales.


Los campos se separan entre s con espacios o tabulaciones.

La etiqueta es un nombre simblico asignado a la posicin de la instruccin. Si


la etiqueta se referencia desde un mismo segmento o zona de cdigo debe terminar con
dos puntos :. Una etiqueta debe comenzar siempre con una letra.
El nombre de la instruccin es el nemotcnico de dos a seis letras que la
representa (Ej: PUSH)
Los operandos dependen de la instruccin y pueden ser 0, 1 2. Si hay dos
operandos, el primero es el destino (lugar hacia dnde va dirigido el dato) y el segundo
el fuente (origen del dato).
Los comentarios comienzan luego de un punto y coma ;, y sirven para
explicar el programa. Cualquier cosa luego de un punto y coma es ignorada por el
Programa Ensamblador.

Ejemplo de escritura de instrucciones en ensamblador:


Etiq. Nombre Operando(s) Comentario
PUSH CX ; Guarda CX
Lazo: MOV [CX],AX ; Memoria[CX] = AX
DEC CX
JNZ Lazo ; Si CX distinto de 0 vuelve a Lazo
POP CX ; Si CX = 0 sale y recupera CX

La estructura bsica de un programa pequeo en Ensamblador consta de la


siguiente secuencia de directivas:

.MODEL SMALL
.STACK
.DATA
; Aqu se colocan los datos
.CODE
Etiqueta:
; Aqu se colocan las instrucciones
END Etiqueta
Dicha secuencia de directivas indican al programa Ensamblador:
- El tipo de programa generado. Los programas SMALL (pequeos) se definen
como programas que contienen un mximo de 64K de cdigo y hasta 64K de
datos.
- La declaracin del segmento de pila (stack), que es un rea de memoria de
reserva para construir la pila del procesador. Por defecto, la cantidad de
memoria reservada para sta es de 1024 Bytes (1K).
- El segmento de datos (data), donde deben colocarse las variables y los datos
que se usan en el programa.
- El segmento de cdigo (code), que contiene las instrucciones del programa.
- El fin del programa, junto con una etiqueta que identifique el punto de
comienzo del mismo.

Las instrucciones del procesador se emplean para construir programas y se


colocan en el rea de cdigo.

Las instrucciones utilizadas para guardar y retirar datos de la pila son dos: PUSH
y POP.

PUSH
Colocar palabra en la pila (PUSH WORD ONTO STACK)

Coloca un dato de 16 bits en la cima de la pila.


Sintaxis: PUSH Fuente
Ejemplo: PUSH AX ; Coloca el contenido del registro AX en la
; cima de la pila

POP
Sacar palabra de la pila (POP WORD OFF STACK TO DESTINATION)

Saca el dato de la cima de la pila y lo coloca en un registro.


Sintaxis: POP Destino
Ejemplo: POP AX ; Coloca el dato ubicado en la cima de la pila
; en AX

La instruccin PUSH permite guardar un dato de 16 bits en la pila, mientras que


la instruccin POP realiza la operacin inversa, recuperando el dato de la cima de la pila
y colocndolo en un registro o variable.

Otras instrucciones relacionadas:

PUSHF
Colocar Banderas en la pila (PUSH FLAGS ONTO STACK)

Coloca el registro de Banderas en la cima de la pila.


Sintaxis: PUSHF

POPF
Sacar Banderas de la pila (POP FLAGS OFF STACK)

Saca el dato de la cima de la pila y lo coloca en el registro de Banderas.


Sintaxis: POPF
Este ejemplo muestra cmo usar las instrucciones PUSH y POP para preservar el
contenido de registros.

PUSHF ; Guarda el registro de Banderas


PUSH AX ; Guarda el registro AX en la pila
PUSH BX ; Guarda el registro BX en la pila

; Aqu pueden alterarse los registros AX, BX y las Banderas.

POP BX ; Recupera el registro BX


POP AX ; Recupera el registro AX
POPF ; Recupera el registro de Banderas

(Analizar el porqu del orden inverso en la secuencia de PUSHs y POPs)

MOV
Mover (MOVE)

Mueve (transfiere) un dato desde un lugar a otro.


Sintaxis: MOV Destino,Fuente
Operacin: Destino = Fuente
Ejemplo: MOV AX,BX ; Transfiere el contenido del registro BX
; al registro AX

IMPORTANTE: La instruccin MOV no altera las Banderas.


Es posible transferir un dato desde la memoria principal hacia un
registro, o viceversa, pero no se puede transferir un dato desde una posicin de memoria hacia
otra posicin de memoria directamente.

MODOS DE DIRECCIONAMIENTO

Los operandos de las instrucciones del 8086 pueden ser de siete tipos distintos. Cada
uno corresponde a un determinado modo de direccionamiento. Los modos de
direccionamiento son:

Modo Operando R Ejemplo Comentario


1 Registro Registro - MOV AX,BX ; Mueve el contenido de BX a AX
2 Inmediato Valor - MOV AX,500 ; Coloca el nmero 500 en AX
3 Directo Variable DS MOV AX,[4] ; Coloca el dato contenido en la
; direccin DS:4 en el registro AX
4 Indirecto [BX] DS MOV AX,[BX] ; Coloca el dato apuntado por
mediante [BP] SS ; DS:BX en el registro AX
Registro [DI] DS MOV [BX],AX ; Coloca el dato contenido en el
[SI] DS ; registro AX en la posicin DS:BX

5 Relativo a etiqueta[BX] DS MOV AX,TABLA[BX] ; Coloca el dato ubicado en


Base etiqueta[BP] SS DS:TABLA+BX en el registro AX
6 Directo etiqueta[DI] DS MOV AL,TABLA[DI] ; Coloca el dato ubicado en
Indexado etiqueta[SI] DS DS:TABLA+DI en el registro AL
7 Indexado a etiqueta[BX+SI] DS MOV ; Coloca el dato ubicado en
Base etiqueta[BX+DI] DS AX,TABLA[BX+DI] DS:TABLA+BX+DI en el registro AL
etiqueta[BP+SI] SS
etiqueta[BP+DI] SS

También podría gustarte