domingo, 1 de septiembre de 2013

MODOS DE DIRECCIONAMIENTO



Modos de Direccionamiento.
El 8086 ofrece una multitud de vías para direccionar la información: registro a registro, direccionamiento inmediato, direccionamiento directo y varios tipos diferentes de direccionamiento indirecto.

Direccionamiento Registro.
Es aquel en el cual la operación se lleva a cabo entre los contenidos de dos registros. Por ejemplo, la instrucción

mov AX,BX

indica que el contenido del registro BX sea copiado en el registro AX.

MOV Rn,A ; Carga en el registro Rn el contenido del acumulador: Rn <--- (A).
Este direccionamiento ocupa muy poca memoria de programa y permite acceder de manera rápida a los datos más frecuentemente utilizados.

Direccionamiento Inmediato.
En este modo de direccionamiento, uno de los operandos está presente en el o los bytes siguientes al código de operación. Por ejemplo, la instrucción

add AX,3064h

indica que el número 3064h sea sumado al contenido del registro AX y el resultado almacenado en dicho registro.
MOV A,#255 ; Carga en el acumulador el número decimal 255.
MOV DPTR,#36CAH ; Carga en el registro DPTR el valor 36CAH. 

Direccionamiento Directo.
EL 8086 implementa el direccionamiento directo a memoria, sumando un desplazamiento de 16 bits, indicado por los dos bytes que siguen al código de operación, al contenido del registro de segmento de datos. La suma es pues, la posición de memoria direccionada. Por ejemplo, la instrucción


mov AH,TABLA

señala que el contenido de la posición de memoria cuya dirección está indicada por el identificador TABLA, sea copiado en el registro AH.

ADD A,3BH ; esta instrucción suma (ADD) al contenido del acumulador el contenido de la posición de memoria 3BH: A <--- (A) + ([3B]). 

Direccionamiento Indirecto.
El modo de direccionamiento indirecto es el más difícil de comprender, pero también el más poderoso. Existen cuatro métodos de direccionamiento indirecto: indirecto a registro, relativo a base, indexado e indexado a base.

Indirecto a Registro.
En el modo de direccionamiento indirecto a registro, la dirección de memoria donde se encuentra uno de los operandos es indicada a través del contenido de los registros BX, BP, SI o DI. La instrucción

mov AX,[DI]

establece que el contenido de la palabra de memoria cuya dirección está indicada por el contenido del registro DI, sea copiado en el registro AX.

Relativo a Base.
El direccionamiento a la memoria de datos, relativo a base simplemente usa el contenido del registro BX o BP como base para la posición efectiva de memoria. La instrucción

mov CL,[BP]+DESP

copia el contenido de la posición de memoria cuya dirección está determinada por la suma del contenido de BP y DESP, en el registro CL.

Indexado.
El direccionamiento indexado directo está permitido especificando los registros SI o DI como índices. Empleando este modo de direccionamiento es posible acceder a los elementos de un vector. La instrucción

sub AH,MATRIZ[SI]

resta del contenido del registro AH, el valor contenido en la posición de memoria especificada por la suma del desplazamiento indicado por el identificador MATRIZ y el contenido del registro SI.

Indexado a Base.
Resulta de la combinación de los modos de direccionamiento Relativo a Base e Indexado Directo. La instrucción

mov DH,VECTOR[BX][DI]

señala que el contenido de la posición de memoria cuya dirección viene indicada por la suma de los contenidos de los registros BX y DX y del desplazamiento establecido por el identificador VECTOR, sea copiado en DH.



Combinaciones de registros de segmento y desplazamiento.


Como se ve en los modos de direccionamiento, hay casos en los que se indica explícitamente el registro de segmento a usar para acceder a los datos. Existen unos segmentos asociados por defecto a los registros de desplazamiento (IP, SP, BP, BX, DI, SI); sólo es necesario declarar el segmento cuando no coincide con el asignado por defecto. En ese caso, el ensamblador genera un byte adicional (a modo de prefijo) para indicar cuál es el segmento referenciado. La siguiente tabla relaciona las posibles combinaciones de los registros de segmento y los de desplazamiento:

CS
SS
DS
ES
IP
No
No
No
SP
No
No
No
BP
con prefijo
por defecto
con prefijo
con prefijo
BX
con prefijo
con prefijo
por defecto
con prefijo
SI
con prefijo
con prefijo
por defecto
con prefijo
DI
con prefijo
con prefijo
por defecto
con prefijo(1)
 

2 comentarios: