ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Modos De Direccionamiento


Enviado por   •  13 de Febrero de 2012  •  2.095 Palabras (9 Páginas)  •  775 Visitas

Página 1 de 9

MODOS DE DIRECCIONAMIENTO Y GENERACIÓN DEL CÓDIGO OBJETO

Generación de la dirección de la instrucción.

Todos los registros internos del 8086/8088 son de 16 bits. El bus de dirección es de 20 bits, por lo que se usa más de un registro interno para generar la dirección de 20 bits.

Los 2 registros usados para la dirección de la instrucción son el IP y el CS. Se combinan en una forma especial para generar la dirección de 20 bits. dirección de 20 bits = 1610 * CS + IP

Por ejemplo: Si los registros CS e IP contienen los valores:

CS = 1000H

IP = 0414 H

La dirección de 20 bits es:

1610 * 1000H + 0414H = 10000H + 0414H = 10414H

Esta es la dirección en memoria desde la cual la nueva instrucción debe buscarse. Al registro IP se le refiere como offset, el registro CS * 1610 apunta a la dirección de nicio o segmento en memoria desde el cual se calcula el offset. La Figura A muestra gráficamente cómo se calcula la dirección de 20 bits.

Cada dirección generada por el 8086/8088 usa uno de los 4 registros de segmento. Este registro de segmento es recorrido 4 bits hacia la izquierda antes de ser sumado al offset.

La instrucción del CPU especifica cuáles registros internos se usan para generar el offset. Vamos a ver los diferentes modos de direccionamiento tomando como ejemplo la instrucción MOV.

Instrucción MOV

Transfiere un byte desde el operando fuente al operando destino. Tiene el siguiente formato:

MOV destino, fuente

Direccionamiento Inmediato

El operando fuente aparece en la instrucción. Un ejemplo, es el que mueve un valor constante a un registro interno.

MOV AX, 568

Direccionamiento a Registro

Indica que el operando a ser usado está contenido en uno de los registros internos de propósito general del CPU. En el caso de los registros AX, BX, CX o DX los registros pueden ser de 8 a 16 bits

Ejemplos:

MOV AX, BX ; AX . BX

MOV AL, BL ; AL . BL

Cuando usamos direccionamiento a registro, el CPU realiza las operaciones internamente, es decir, no se genera dirección de 20 bits para especificar el operando fuente.

Direccionamiento Directo

Especifica en la instrucción la localidad de memoria que contiene al operando. En este tipo de direccionamiento, se forma una dirección de 20 bits.

Ejemplo:

MOV CX, COUNT

El valor de COUNT es una constante. Es usada como el valor offset en el cálculo de la dirección de 20 bits

El 8086/8088 siempre usa un registro de segmento cuando calcula una dirección física. ¿Cuál registro se debe usar para esta instrucción? Respuesta: DS

En la Figura B, se muestra el cálculo de la dirección desde la cual se tomará el dato que se carga en CX.

Este es el segmento por omisión que se usa. Sin embargo, cualquiera de los 4 segmentos puede usarse. Esto se efectúa especificando el registro apropiado en la instrucción.

Por ejemplo, suponga que deseamos usar el registro ES en lugar del DS:

MOV CX, ES: COUNT

Direccionamiento de Registro Indirecto

Con el modo de direccionamiento de registro índice, la dirección offset de 16 bits está contenida en un registro base o registro índice. Esto es, la dirección reside en el registro BX, BP, SI o DI.

Ejemplo:

MOV AX, [SI]

El valor de 16 bits contenido en el registro SI debe ser el offset usado para calcular la dirección de 20 bits.

Otra vez, debe usarse un registro de segmento para generar la dirección final. El valor de 16 bits en SI se combina con el segmento apropiado para generar la dirección.

Direccionamiento de Registro Indirecto con Desplazamiento

Este tipo de direccionamiento incluye a los dos modos de direccionamiento anteriores. La dirección offset de 16 bits se calcula sumando el valor de 16 bits especificado en un registro interno y una constante.

Por ejemplo, si usamos el registro interno DI y el valor constante (desplazamiento), donde COUNT ha sido previamente definido, el nemotécnico para esta construcción es:

MOV AX, COUNT [DI]

Si: COUNT = 0378H

DI = 04FAH

0872H

Entonces, la dirección offset de 16 bits es 0872H

Direccionamiento de Registro Indirecto con un Registro Base y un Registro Índice

Este modo de direccionamiento usa la suma de dos registros internos para obtener la dirección offset de 16 bits a usarse en el cálculo de la dirección de 20 bits.

Ejemplos:

MOV [BP] [DI], AX ; el offset es BP + DI

MOV AX, [BX] [SI] ; el offset es BX + SI

Direccionamiento de Registro Índice Indirecto con un Registro Base, un Registro Índice y un Registro Constante

Este es el modo de direccionamiento más complejo. Es idéntico al modo de direccionamiento anterior, excepto que se suma una constante.

Ejemplo: Suponga que tenemos los siguientes valores en los registros:

DI = 0367H

BX = 7890H

COUNT = 0012H

7C09H

Este modo de direccionamiento indica que el offset especificado por la suma de DI + BX

+ COUNT sea usado para mover el dato en memoria en el registro AX.

MOV AX, COUNT [BX] [DI]

La dirección offset de 16 bits es 7C09H. La dirección completa en 20 bits se calcula de la expresión:

1610*DS + 7C09H

Si el DS contiene 3000H, la dirección completa de 20 bits es:

3000H + 7C09H = 37C09H

Código Objeto del 8086/8088

Como programador, debes escribir los nemotécnicos. El código objeto es generado por la computadora (son los bytes que ejecuta el CPU) Con el conjunto de instrucciones del 8086/8088, cada tipo de modo de direccionamiento puede requerir un número diferente de bytes. En los ejemplos siguientes proporcionaremos el número de bytes requeridos por cada modo de direccionamiento.

Bit W y campo REG

La instrucción MOV AX, 568H

Indica mover inmediatamente al registro interno AX el valor 568H. El registro interno puede ser de 1 byte o de una palabra. Esta instrucción requiere 2 o 3 bytes, como se indica en la Figura C.

El primer byte contiene los

...

Descargar como (para miembros actualizados) txt (12 Kb)
Leer 8 páginas más »
Disponible sólo en Clubensayos.com