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.
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.
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]).
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
|
Sí
|
No
|
No
|
No
|
SP
|
No
|
Sí
|
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)
|




romo pasame tu correo jaja ;D
ResponderEliminarya lo tienes
Eliminar