PDF de programación - Esamblador 8086/88

Imágen de pdf Esamblador 8086/88

Esamblador 8086/88gráfica de visualizaciones

Actualizado el 15 de Diciembre del 2018 (Publicado el 4 de Diciembre del 2018)
856 visualizaciones desde el 4 de Diciembre del 2018
152,0 KB
20 paginas
Creado hace 19a (13/10/2004)
Ensamblador 8086/88

1. Introducción
2. Registros internos
3. Modos de direccionamiento
4. Juego de Instrucciones
5. Etiquetas, cometarios y directivas
6. Problemas

1. Introducción
El lenguaje ensamblador como cualquier lenguaje de programación es un conjunto de palabras
que le indican al ordenador lo que tiene que hacer. Sin embargo la diferencia fundamental es que
cada instrucción escrita en lenguaje ensamblador tiene una correspondencia exacta con una
operación en el procesador. Por lo que son operaciones muy sencillas tales como: “Cargar 32 en
el registro BX” o “Transferir el contenido del registro CL al CH”. Así pues, las palabras del lenguaje
ensamblador son nemotécnicos que representan el código máquina, lenguaje que entiende el
procesador.

1.1. Tamaño de los datos
En el 8086/88 se definen los siguientes tamaños de datos:
4 bits nibble
8 bits byte
16 bits word
32 bits dword

1.2. Almacenamiento de datos
El 8086/88 usa el formato de almacenamiento denominado “little endian”, esto quiere decir que el
byte menos significativa (LSB) del dato es guardada en la parte baja de la memoria. Por ejemplo
el dato 0x1122 será almacenado en memoria:

000….0

22
11

FFF….F



Es importante tener esto en cuanta a la hora de acceder a los datos para operar con ellos.
1.3. Segmentación
El 8086/88 tiene un ancho de bus de datos de 16 bits y un ancho de bus de direcciones de 20 bits.
Con 20 bits de direcciones se puede acceder a 220 = 1 Mega posiciones de memoria. Como cada
dirección de memoria contiene un byte, el total de memoria accedido por el procesador es de 1
Mbyte. El bus de datos de 16 bits lo que implica que en cada acceso a memoria se leen dos

1

Ensamblador 8086/88
posiciones. Esta es la razón por que la que es importante saber el modo de almacenamiento de
los datos en memoria, visto en el apartado anterior.
El problema que se les planteó a los diseñadores fue que siendo los registros internos del
procesador de 16 bits, y el bus de direcciones de 20; faltaban 4 bits para poder aprovechar al
máximo las capacidades de direccionamiento del procesador. Para resolver esto, cada dirección
de memoria será especificada como un segmento y un desplazamiento dentro de ese segmento.
Esta solución divide la memoria en segmemtos de 64 K, lo cual limitó bastante los diseños de los
procesadores posteriores de la familia (80286,80386 etc.); aunque posteriormente se idearon
métodos para resolver este problema, como la memoria extendida (no compatible, por supuesto,
con el 8086/88).
Así pues el 8086/88 dispone de una serie de registros para almacenar los valores de segmentos,
como veremos en los siguientes apartados.
Para obtener la dirección de memoria (dirección efectiva): se toma el valor de registro de
segmento, se desplaza 4 bits, y se le suma el valor del desplazamiento.

Segmento
Desplazamiento +
Dirección efectiva

Esta operación la realiza el procesador de forma interna automáticamente.

0000 0000 0000 1010

0101 1111 0000 1010
0000 0101 1111 0101 1010

desplazado 4 bits



2. Registros internos
El 8086/88 dispone de 4 registros de datos, 4 registros de segmento, 5 registros de índice y 1
registro de estado.

2.1. Registros de datos
Los registros de datos son de 16 bits, aunque están divididos. lo que permite su acceso en 8 bits.
Estos registros son de propósito general aunque todos tiene alguna función por defecto.
AX (acumulador) se usa para almacenar el resultado de las operaciones, es al único registro con
el que se puede hacer divisiones y multiplicaciones. Puede ser accedido en 8 bits como AH para
la parte alta (HIGH) y AL (LOW) para la parte baja.


BX (registro base) almacena la dirección base para los accesos a memoria. También puede
accederse como BH y BL, parte alta y baja respectivamente.
CX (contador) actúa como contador en los bucles de repetición. CL (parte baja del registro)
almacena el desplazamiento en las operaciones de desplazamiento y rotación de múltiples bits.
DX (datos) es usado para almacenar los datos de las operaciones.

AX:

AL

AH

2.2. Registros de segmento
Los registros de segmento son de 16 bits (como ya se dicho antes) y contienen el valor de
segmento.
CS (segmento de código) contiene el valor de segmento donde se encuentra el código. Actúa en
conjunción con el registro IP (que veremos más adelante) para obtener la dirección de memoria
que contiene la próxima instrucción. Este registro es modificado por las instrucciones de saltos
lejanos.

2

Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla

DS (segmento de datos) contiene el segmento donde están los datos.
ES (segmento extra de datos) es usado para acceder a otro segmento que contiene más datos.
SS (segmento de pila) contiene el valor del segmento donde está la pila. Se usa conjuntamente
con el registro SP para obtener la dirección donde se encuentra el último valor almacenado en la
pila por el procesador.

2.3. Registros de índice
Estos registros son usados como índices por algunas instrucciones. También pueden ser usados
como operandos (excepto el registro IP).
IP (índice de programa) almacena el desplazamiento dentro del segmento de código. Este registro
junto al registro CS apunta a la dirección de la próxima instrucción. No puede ser usado como
operando en operaciones aritmético/lógicas.
SI (índice de origen) almacena el desplazamiento del operando de origen en memoria en algunos
tipos de operaciones (operaciones con operandos en memoria).
DI (índice de destino) almacena el desplazamiento del operando de destino en memoria en
algunos tipos de operaciones (operaciones con operandos en memoria).
SP (índice de pila) almacena el desplazamiento dentro del segmento de pila, y apunta al último
elemento introducido en la pila. Se usa conjuntamente con el registro SS.
BP (índice de base) se usa para almacenar desplazamiento en los distintos segmentos. Por
defecto es el segmento de la pila

2.4. Registro de estado
El registro de estado contiene una serie de banderas que indican distintas situaciones en las que
se encuentra el procesador

15

0

-

-

-

-

AF

CF

OF DF IF TF SF ZF

-
OF: Desbordamiento
DF: Dirección en operaciones con cadenas
IF: Indicador de interrupción
TF: Modo traza
SF: Indicador de signo en operaciones con signo
ZF: Indicador de cero
AF: Acarreo del bit 3 en AL
PF: Bit de paridad
CF: Acarreo
OF (desbordamiento) es el principal indicador de error producido durante las operaciones con
signo. Vale 1 cuando:

-

PF

-



• La suma de dos números con igual signo o la resta de dos números con signo opuesto

producen un resultado que no se puede guardar (más de 16 bits).

• El bit más significativo (el signo) del operando ha cambiado durante una operación de

desplazamiento aritmético.

• El resultado de una operación de división produce un cociente que no cabe en el registro

de resultado.

DF (dirección en operaciones con cadenas) si es 1 el sentido de recorrido de la cadena es de
izquierda a derecha, si es 0 irá en sentido contrario.
IF (indicador de interrupción) cuando vale 1 permite al procesador reconocer interrupciones. Si se
pone a 0 el procesador ignorará las solicitudes de interrupción.



3

Ensamblador 8086/88
TF (modo traza) indica al procesador que la ejecución es paso a paso. Se usa en la fase de
depuración.
SF (indicador de signo) solo tiene sentido en las operaciones con signo. Vale 1 cuando en una de
estas operaciones el signo del resultado es negativo.
ZF (indicador de cero) vale 1 cuando el resultado de una operación es cero.
AF (acarreo auxiliar) vale 1 cuando se produce acarreo o acarreo negativo en el bit 3.
PF (paridad) vale 1 si el resultado de la operación tiene como resultado un número con un número
par de bits a 1. Se usa principalmente en transmisión de datos.
CF (bit de acarreo) vale 1 si se produce acarreo en una operación de suma, o acarreo negativo en
una operación de resta. Contiene el bit que ha sido desplazado o rotado fuera de un registro o
posición de memoria. Refleja el resultado de una comparación.

3. Modos de direccionamiento
Los modos de direccionamiento indican la manera de obtener los operandos y son:

Direccionamiento de registro
Direccionamiento inmediato
Direccionamiento directo
Direccionamiento indirecto mediante registro
Direccionamiento indirecto por registro base
Direccionamiento indexado
Direccionamiento indexado respecto a una base

MOV destino, origen

MOV AX,BX ;transfiere el contenido de BX en AX


El tipo de direccionamiento se determina en función de los operandos de la instrucción.
La instrucción MOV realiza transferencia de datos desde un operando origen a un operando
destino (se verá más con más detalle en los siguientes apartados). Su formato es el siguiente:

3.1. Direccionamiento de registro
Cuando ambos operando son un registro.
Ejemplo:

3.2. Direccionamiento inmediato
Cuando el operando origen es una constante.
Ejemplo:

3.3. Direccionamiento directo
Cuando el operando es una dirección de memoria. Ésta puede ser especificada con su valor entre
[ ], o bien mediante una variable definida previamente (cómo definir etiquetas se verá más
adelante).
Ejemplo:

MOV AX,500 ;carga en AX el valor 500.

MOV BX,[1000]
MOV AX,TABLA

; almacena en BX el contenido de la dirección de
memoria DS:1000.
; almacena en AX el contenido de la dirección de
memoria DS:TABLA.

4

Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sev
  • Links de descarga
http://lwp-l.com/pdf14420

Comentarios de: Esamblador 8086/88 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad