Anda di halaman 1dari 14

Sistemas Computarizados

Modos de Direccionamiento
El desarrollo de software eficiente para el 8088, y otros miembros de la familia, requiere
una completa familiaridad con los modos de direccionamiento aplicados a cada
instrucción.
Generalmente se utiliza la instrucción MOV (movimiento de dato) para describir los
modos de direccionamiento de datos. La instrucción MOV transfiere bytes o palabras de
datos entre los registros o entre la memoria y los registros. En la descripción del programa
en modo de direccionamiento a memoria, nosotros usamos las instrucciones CALL
(llamar a subrutina) y JUMP (salto) para modificar el flujo del programa.
Los modos de direccionamientos de datos son: registros, inmediato, directo,
registro indirecto, base mas índice, relativo a registro y relativo a base-mas-índice.

Modos de Direccionamiento de Datos

Puesto que la instrucción MOV es una instrucción de las mas simple y flexible del 8088,
esta provee la base para la explicación de los modos de direccionamiento de datos. La
figura 1 ilustra la instrucción MOV y define la dirección del flujo de datos. La fuente esta
a la derecha y el destino a la izquierda, próxima al código de operación de MOV. Este es
el primer problema , porque nosotros naturalmente asumimos que las cosas se mueven de
la izquierda a la derecha, mientras aquí se mueven de derecha a izquierda (Un opcode le
dice al microprocesador que operación ejecutar). Una coma siempre separa el destino de
la fuente en una instrucción.

MOV Destino , Fuente


MOV AX , BX
Figura 1. La instrucción MOV AX,BX mostrando como la fuente se
copia al destino

En la figura 1 la instrucción MOV AX,BX transfiere el contenido de la palabra en el


registro fuente (BX) al registro destino (AX). La fuente nunca cambia , pero el destino
usualmente cambia.

La figura 2 muestra todas las variaciones de los modos de direccionamiento usando la


instrucción MOV. Los modos de direccionamiento del 8088 son los siguientes :

1. Direccionamiento a Registro: - Se usa para transferir un byte o una palabra desde un


registro fuente o desde una localidad de memoria, hacia un registro destino o localidad de
memoria. (Ejemplo: la instrucción MOV CX,DX copia el contenido del tamaño de la
palabra del registro DX en el registro CX.

U.A.B.C. Pag. 35
Sistemas Computarizados

2. Direccionamiento Inmediato: - Transfiere inmediatamente un dato del tamaño de una


palabra o un byte a un registro destino o localidad de memoria (Ejemplo la instrucción
MOV AL,22H copia la palabra de tamaño en bytes 22H en el registro AL.)

3. Direccionamiento Directo : - Mueve un byte o palabra entre una localidad de memoria


y un registro (Ejemplo: la instrucción MOV CX,LIST copia el contenido de la palabra
de la localidad de memoria LIST en el registro CX).

4. Direccionamiento de Registro Indirecto- Se usa para transferir un byte o palabra entre


un registro y una localidad de memoria direccionada por el registro base o el registro
índice. Los registro bases e índices son : BP, BX, DI, y SI (Ejemplo: la instrucción
MOV AX,[BX] copia el dato de 16 bits (palabra) contenido en la localidad de memoria
direccionada por el registro BX al registro AX).

5. Direccionamiento Base-mas-Indice - Transfiere un byte o palabra entre un registro y la


localidad de memoria direccionada por un registro base (BP o BX) mas un registro índice
(DI o SI) (Ejemplo: la instrucción MOV AX,[BX + SI] copia el contenido de 16-bits de
la dirección apuntada por la suma de los registros BX y SI al registro AX).

6. Direccionamiento Relativo a Registro - Mueve un byte o palabra entre un registro y la


localidad de memoria direccionada por un registro índice o base mas un desplazamiento.
(Ejemplo: la instrucción MOV AX,[BX+4] o MOV AX,ARRAY[BX]. La primera
instrucción copia una palabra desde una dirección en el segmento de datos, formado por
BX mas 4 en el registro AX . La segunda instrucción transfiere el contenido de la
localidad de memoria direccionada por ARRAY mas el contenido de BX en el registro
AX.

7. Direccionamiento Relativo a Base-mas-Indice. - Es usada para transferir una palabra o


byte entre un registro y la localidad de memoria direccionada por una base y un registro
índice mas un desplazamiento. (Ejemplo: la instrucción MOV AX,ARRAY[BX+DI] o
MOV AX,[BX+DI+4]. Ambas instrucciones copian una palabra de datos desde una
localidad de memoria en el registro AX. La primera instrucción usa una dirección
formada por la suma de ARRAY, BX, y DI y la segunda por la suma de BX, DI y 4).

U.A.B.C. Pag. 36
Sistemas Computarizados

Fuente Generación de Dirección Destino


BX AX
Registro MOV AX,BX Registro Registro

3AH BL
Inmediato MOV BL,3AH Dato Registro

AX 11234H
(Desp) + (DS X 10H)
Directo MOV 1234H,AX Registro Memoria
1234H + 10000H

AX 10300H
Registro (BX) + (DS X 10H)
MOV [BX],AX Registro Memoria
0300H + 10000H
Indirecto

AX 10500H
(BX) + (SI) + (DS X 10H)
Base mas MOV [BX+SI],AX Registro Memoria
0300H + 0200H + 10000H
Indice
AX 10304H
Registro (BX) + 4 + (DS X 10H) Memoria
Relativo a MOV [BX+4],AX 0300H + 4 + 10000H
Registro
AX 11500H
(BX) + ARRAY + (SI) + (DS X 10H)
Relativo a MOV ARRAY[BX+SI],AX Registro Memoria
0300H + 1000H + 0200H + 10000H
Base mas Indice
Figura 2. Modos de Direccionamiento del 8088

Direccionamiento a Registros
El direccionamiento a registros es un modo fácil de controlar una vez que se han
conocido los registros internos del 8088. El 8088 contiene los siguientes registros de 8
bits cada uno usados con el direccionamiento a registros: AH, AL, BH, BL, CH, CL, DH
y DL. Este también contiene los siguientes registros de 16 bits AX, BX, CX, DX, SP, BP,
DI, CS, DS, SS y ES. Algunas instrucciones MOV y las instrucciones PUSH y POP usan
los registros de segmento de 16 bits (CS, ES, DS y SS) para el direccionamiento de
registros. Es importante que las instrucciones utilicen registros de tamaño uniforme.
Nunca se debe mezclar un registro de 8 bits con uno de 16 bits, porque esto no es
permitido por el conjunto de instrucciones del 8088.

Tabla 1. Ejemplos de instrucciones de Direccionamiento a registros


Lenguaje Ensamblador Operación

MOV AL,BL BL AL
MOV CH,CL CL CH
MOV AX,CX CX AX
MOV SP,BP BP SP
MOV DS,AX AX DS
MOV SI,DI DI SI
MOV DI,SI SI DI
MOV BX,ES ES BX
MOV CS,DS No permitido
MOV BL,BX No permitido

U.A.B.C. Pag. 37
Sistemas Computarizados

La tabla 1 muestra algunos de las diferentes versiones de las instrucciones MOV


con registros. Es imposible mostrar todas las variaciones de direccionamientos a
registros, porque existen tantas posibles combinaciones. Por ejemplo, solo el subconjunto
de 8 bits con la instrucción MOV tiene 64 diferentes permutaciones. El único tipo de
instrucción MOV con registros no permitida, es una instrucción MOV de registro de
segmento a registro de segmento. Note que el registro de segmento de código no puede
ser cambiado por una instrucción MOV. La razón es que la dirección de la siguiente
instrucción es encontrada en ambos registros IP y CS . Si es modificado CS, la dirección
de la siguiente instrucción es impredecible.
La figura 3 muestra la función de la instrucción MOV BX,CX. Note que la fuente
no cambia, pero que el destino si. Aquí, un 1234H se mueve desde el registro CX al
registro BX. Esta transferencia de datos borra el contenido previo (76AFH) de el registro
BX. De hecho, el contenido del registro destino o de la localidad de memoria cambian
para todas las instrucciones, excepto las instrucciones CMP y TEST.

AX

BX 76AF

CX 1234 1234

DX

Figura 3. El efecto de la ejecución de la instrucción MOV BX,CX justo antes de que el


registro BX sea cambiado. Notes que el valor de 1234 es copiado al registro BX y el
valor que contenía BX se pierde..

Direccionamiento Inmediato
Otro modo de direccionamiento de datos es el direccionamiento inmediato. El
termino inmediato implica que el dato inmediatamente sigue del código operación en la
memoria. El direccionamiento inmediato opera sobre un dato de un byte o una palabra.
La instrucción MOV inmediatamente transfiere una copia del dato inmediato en el
registro o localidad de memoria. La figura 4 ilustra la operación de la instrucción MOV
AX,3456H. Esta instrucción copia el 3456H desde la instrucción localizada en memoria,
en el registro AX. Como la instrucción MOV ilustrada en la figura 3, el dato fuente
sobrescribe el dato destino.
En lenguaje ensamblador simbólico, el símbolo # precede a un dato inmediato con
algunos ensambladores del 8088. La instrucción MOV AX,#3456H es un ejemplo. La
mayoría de los ensambladores 8088 no utilizan el símbolo #, pero representan dato
inmediato como en la instrucción MOV AX,3456H.
El ensamblador simbólico muestra datos inmediatos en muchas formas. La letra H
indica datos hexadecimales. Si datos hexadecimales empiezan con una letra, nosotros lo
iniciamos con 0. Por ejemplo, para representar un F2H, nosotros usamos 02FH en
lenguaje ensamblador. Los datos decimales son representados tal como son y no

U.A.B.C. Pag. 38
Sistemas Computarizados

requieren códigos especiales o ajustes un ejemplo es 100 decimal en la instrucción MOV


AL,100. Un carácter ASCII codificado es representado en la forma inmediata si el
carácter ASCII esta encerrado entre apóstrofes, un ejemplo es la instrucción MOV BH,'A'
la cual mueve el carácter A codificado en ASCII en el registro BH. La tabla 2 muestra
diferentes instrucciones MOV que aplican a datos inmediatos.
Registros Programa

AX 6291H 3456H MOV AX,3456H

BX

Figura 4. El efecto de ejecutar la instrucción MOV AX,3456H.

Tabla 2. Ejemplos de instrucciones con Direccionamiento inmediato


Lenguaje Ensamblador Operación

MOV BL,44 2CH BL


MOV AX,44H 0044H CH
MOV SI,0 0000H AX
MOV CH,100 64H SP
MOV SP,3000H 3000H DS

Direccionamiento Directo de Datos


La mayoría de los comandos usan direccionamiento directo de datos. El
direccionamiento directo de datos es aplicado en muchas instrucciones en un programa
típico. Existen dos formas básicas del direccionamiento directo de datos:
(1) direccionamiento directo que solamente aplica a MOV entre una localidad de
memoria y AX o AL. (2) direccionamiento desplazado para cualquier instrucción en el
conjunto de instrucciones del 8088

Direccionamiento Directo
El direccionamiento directo es solamente permitido con una instrucción MOV que
transfiere datos entre una localidad de memoria, localizada en el segmento de datos, y ya
sea el registro AL(8 bits) o AX (16-bits). Esta instrucción siempre es una instrucción de
longitud de 3 bytes.
La instrucción MOV AL,DATA , tal como se representa en la mayoría de los
ensambladores del 8088, transfiere una copia del byte almacenado en la localidad de
memoria DATA (1234H), en el segmento de datos, hacia el registro AL. La localidad de
memoria DATA es una localidad de memoria simbólica. (Algunos ensambladores
representan esta instrucción como MOV AL,[DATA]). El [1234H] es una localidad de
memoria absoluta que no siempre es permitida por el ensamblador.

U.A.B.C. Pag. 39
Sistemas Computarizados

Registros Memoria

AX AH AL 12 12 12 11234H

BX BH BL

Figura 5. El efecto de ejecutar la instrucción MOV AL,[1234H] si DS=1000H. El registro AL se muestra


una vez que ha sido destruido el contenido anterior.

La Figura 5 muestra como esta información transfiere una copia del contenido en
tamaño en bytes de la localidad de memoria [1234H] en AL. La dirección efectiva esta
formada por la suma de 1234H (la dirección desplazada) a 10000H (la dirección del
segmento de datos).

Tabla 3. Posibles formas de direccionamiento directo


Lenguaje Ensamblador Operación

MOV AL,NUMBER Un byte es copiado del segmento de datos mas un


desplazamiento NUMBER a AL
MOV AX,COW Una palabra es copiada del segmento de datos mas un
desplazamiento COW a AX
MOV NEWS,AL AL es almacenado en la localidad direccionada por el
segmento de datos mas un desplazamiento NEWS
MOV THERE,AX AX es almacenado en la localidad direccionada por el
segmento de datos mas un desplazamiento THERE
MOV CH,[1000H] El contenido de la localidad de memoria direccionada por el
desplazamiento 1000H en el segmento de datos, es copiado al
registro CL
MOV DATA,BP BP es copiado en la localidad DATA y DATA+1 en el
segmento de datos

La tabla 3 lista posibles formas de instrucciones de direccionamiento directo.


Estas instrucciones frecuentemente aparecen en programas, de tal forma que Intel decidió
hacerlas especialmente como instrucciones de longitud de 3 bytes. Todas las demás
instrucciones que mueven datos desde una localidad de memoria hacia un registro,
llamadas instrucciones de desplazamiento direccionado, requiere 4 bytes de memoria
para ser almacenadas en un programa.

U.A.B.C. Pag. 40
Sistemas Computarizados

Direccionamiento de Indirecto de Registro

El direccionamiento indirecto de registro permite a los datos ser direccionados hacia


cualquier localidad de memoria por cualquiera de los siguientes registros: BP, BX, DI, y
SI. Por ejemplo, si el registro BX contiene un 1000H y la instrucción MOV AX,[BX] se
ejecuta, el dato en la localidad de memoria 1000h en el segmento de datos, se copia al
registro AX. Si DS=0100H esta instrucción direcciona la palabra almacenada en la
localidad de memoria 2000H y 2001H y la transfiere a el registro AX (ver figura 6). Los
símbolos [ ] denotan direccionamiento indirecto en el lenguaje ensamblador del 8088.
Algunas instrucciones típicas que utilizando direccionamiento indirecto aparecen en la
tabla 4.
Registros Memoria

AX 6A42
6A42
BX 2000 6A 02001H
42 02000H
+ 01000H
(DS X 10H)

Figura 6. El efecto de ejecutar la instrucción MOV AX,[BX] si DS=0100H y BX=1000H.

BP, BX, DI, y SI. En el direccionamiento indirecto de registros o cualquier otro modo de
direccionamiento que use BX, DI o SI, a una dirección de memoria, estos registros
direccionan datos en el segmento de datos (DS). Si el registro BP direcciona memoria,
este usa el segmento de pila (SS). Estos son considerados los ajustes por norma de las
cuatro registros de índice y base.

Tabla 4. Ejemplos de instrucciones usando direccionamiento indirecto de registro


Lenguaje Ensamblador Operación

MOV CX,[BX] Una palabra de la localidad de memoria direccionada por el


registro BX (dentro del segmento de datos) es copiada a CX
MOV [BP],DL Un byte del segmento de pila es copiado en la localidad
direccionada por BP
MOV [DI],BH Un byte dentro del segmento de datos es copiado en la
localidad direccionada por DI
MOV [DI],[BX] Movimientos de memoria a memoria no son permitidos,
excepto en instrucciones de cadena.

El direccionamiento indirecto frecuentemente permite a un programa referirse para


tabular datos localizados en la memoria del sistema. Por ejemplo, suponga que usted debe
crear una tabla de información que contenga 50 muestras tomadas de un voltímetro
digital. La figura 7 muestra la tabla y el registro BX utilizado para direccionar cada
localidad en la tabla de forma secuencial. Para hacer esto, usted necesita cargar la

U.A.B.C. Pag. 41
Sistemas Computarizados

localidad inicial de la tabla en el registro BX con una instrucción MOV inmediata.


Después de inicializar la primer dirección de la tabla, usted utiliza el direccionamiento
indirecto de registro para almacenar las 50 muestras secuencialmente.

EJEMPLO 1
;Secuencia de instrucciones que leen 50 byte de datos desde el un puerto de datos y se
;almacenan en una Tabla
; PTO_DATOS contiene la dirección del puerto
;TABLA contiene la dirección del inicio de la tabla

MOV BX,OFFSET TABLA ;direcciona tabla


MOV CX,50 ;carga contador
AGAIN:
IN AL,DATA_PTO_DATOS ;lee voltímetro
MOV [BX],AL ;guarda datos
INC BX ;direcciona el sig.
LOOP AGAIN ;repite 50 veces

Memoria

TABLA + 49
TABLA + 48

TABLA + 2
TABLA + 1
BX TABLA TABLA

Figura 7. Un arreglo de datos (TABLA) conteniendo 50 bytes que son indirectamente direccionados por
medio del registro BX.

La secuencia mostrada en el ejemplo 1 carga el registro BX con la dirección


inicial de las tabla e inicializa el contador, localizado en el registro CX, hasta 50. La
directiva OFFSET le dice al ensamblador que cargue BX con la dirección offset de la
localidad de memoria donde se encuentra TABLA y no su contenido. Por ejemplo, la
instrucción MOV BX,DATA copia el contenido de la localidad de memoria donde esta
DATA en BX , mientras que la instrucción MOV BX,OFFSET DATA copia la dirección
de DATA en BX. Cuando la directiva OFFSET es usada con la instrucción MOV, el
ensamblador calcula la dirección y entonces usa una instrucción MOV inmediatamente
para cargar la dirección en el registro especificado de 16-bits.

U.A.B.C. Pag. 42
Sistemas Computarizados

Una vez que el contador y el apuntador son inicializados, el ciclo repite-hasta


CX=0 se ejecuta. Aquí los datos son introducidos (IN) del voltímetro y luego
almacenados en la localidad de memoria indirectamente direccionada por el registro BX.
Luego, BX se incrementa (agrega 1) a las siguientes localidades de la tabla y finalmente
la instrucción LOOP repite el ciclo 50 veces. La instrucción LOOP decrementa (resta 1)
el contador (CX) y si CX no es cero, salta a AGAIN. Si CX se convierte en cero, no
ocurre ningún salto y la secuencia de instrucciones termina.

Direccionamiento Base-mas-Indice

El direccionamiento base-mas-índice es similar al direccionamiento indirecto,


porque este indirectamente direcciona datos de memoria. En este tipo de
direccionamiento un registro base (BP o BX) y un registro índice (DI o DS) se usan para
indirectamente direccionar memoria. Frecuentemente el registro base mantiene la
localidad inicial del arreglo de memoria, mientras el registro índice mantiene la posición
relativa de un elemento en el arreglo. Recuerde que cuando BP direcciona memoria de
datos, ambos, el registro de segmento y BP forman la dirección efectiva.

Direccionamiento de Datos
La figura 8 muestra como los datos son direccionados por la instrucción MOV
DX,[BX+DI] en este ejemplo, BX = 1000H, DI = 0010H, y DS = 0100H, lo cual se
traduce en la dirección de memoria 02010H. Esta instrucción transfiere una copia de la
palabra de la localidad 02010h en el registro DX. La tabla 6 lista algunas de las
instrucciones usadas por el direccionamiento base-mas-índice.

Registros Memoria

AX

BX 1000

CX
AB 02011H
DX AB03
AB03
03 02010H

SP
0010H + 1000H + 1000H
BP

DI 0010 (DS X 10H)

Figura 8. Ejemplo que muestra como el modo de direccionamiento base-mas-índice funciona para la
instrucción MOV DX,[BX+DI]. Note que la dirección de memoria 02010H es direccionada por esta
instrucción debido a que DS (0100H), BX(1000H) y DI(0010H) se suman para generar esta dirección.

Tabla 5. Ejemplos de instrucciones usando direccionamiento base-mas-índice


Lenguaje Ensamblador Operación

U.A.B.C. Pag. 43
Sistemas Computarizados

MOV CX,[BX+DI] El registro CX es cargado con el dato de la localidad del


segmento de datos direccionada por la suma de BX y DI
MOV CH,[BP+SI] El registro CH es cargado con el dato de la localidad del
segmento de pila direccionada por la suma de BP y SI
MOV [BX+SI],SP El contenido del registro SP es almacenado en el segmento de
datos en la localidad direccionada por la suma de BX y SI
MOV [BP+DI],CS El contenido del registro CS es almacenado en el segmento
de pila en la localidad direccionada por la suma de BP y DI

Direccionamiento de Arreglos de Datos


El mayor uso del modo de direccionamiento base-mas-índice es direccionar
elementos en un arreglo de memoria. Suponga que necesitamos direccionar los elementos
en un arreglo localizado en el segmento de datos en la localidad de memoria ARREGLO.
Para cumplir esto, necesitamos cargar el registro BX (base) con la dirección inicial del
arreglo y DI (índice) con el número de elemento a ser accesado en un arreglo de datos. La
figura 9 muestra el uso de BX y DI para accesar un elemento de un arreglo de datos.

EJEMPLO 2
;usando el modo de direccionamiento base-mas-índice
;
MOV BX,OFFSET ARREGLO ;direcciona el arreglo
MOV DI,10H ;elemento 10H
MOV AL,[BX +DI] ;toma el dato
MOV DI,20H ;cuyo elemento es 20H
MOV [BX+DI],AL ;salva el dato

Un programa se muestra en el Ejemplo 2 donde el elemento 10H es movido en el


elemento 20H del arreglo. Note que el número del elemento en el arreglo, cargado en el
registro DI, direcciona el elemento del arreglo.
Memoria

ARREGLO + 5
DI ARREGLO + 4
ARREGLO + 3
ELEMENTO
ARREGLO + 2
BX
ARREGLO + 1
ARREGLO ARREGLO

Figura 9. Ejemplo que muestra un direccionamiento base-mas-índice

Direccionamiento de Relativo a Registro

El direccionamiento de relativo a registro es similar al direccionamiento base-mas-índice.


En el direccionamiento relativo a Registro, un dato en un segmento de memoria es

U.A.B.C. Pag. 44
Sistemas Computarizados

direccionado por la suma del desplazamiento de los contenidos de una base o un registro
índice (BP, BX, DI o SI).

La figura 10 muestra la operación de la instrucción:MOV AX,[BX+1000H]. En este


ejemplo, BX = 0100h y DS = 0200h, por lo que la dirección generada es la suma de DS *
10H, BX, y el desplazamiento de 1000H o 03100h. Recuerde que BC, DI o SI direccionan
el segmento de datos y BP direcciona el segmento de pila. La tabla 6 lista algunas
instrucciones que usan direccionamiento de registro relativo.
Memoria

Registros
A0 03101H
AX A076 A076
76 03100H
BX 0100

0100H + 1000H + 2000H


(BX) (Desp.) (DS X 10H)
Figura 10. Efecto de ejecutar la instrucción MOV AX,[BX+100H] si BX=0100H y DS=0200H.

Tabla 6. Ejemplos de instrucciones usando direccionamiento base-mas-índice


Lenguaje Ensamblador Operación

MOV AX,[DI+100H] AX es cargado con un dato del segmento de datos


direccionado por el suma de DI y 100H
MOV ARRAY[SI],BL El contenido de BL es almacenado en el segmento de datos
en el arreglo de memoria direccionado por ARRAY, en el
elemento SI
MOV LIST[BP],CL El contenido de CL es almacenado en al segmento de pila en
el arreglo de memoria direccionado por LIST, en el elemento
BP
MOV DI,SET[BX] DI es cargado con el dato del elemento BX del arreglo de
memoria SET que esta en el segmento de datos

Arreglo de Datos con direccionamiento de registro relativo


Es posible direccionar un arreglo de datos con el direccionamiento relativo a registro de
la misma manera que lo hace el direccionamiento base-mas-índice. En la figura 11,
nosotros ilustramos el direccionamiento de relativo a registro con el mismo ejemplo que
usamos para el direccionamiento base-mas-índice. Este muestra como el Arreglo
desplazado suma el registro índice DI para generar una referencia a un elemento del
arreglo.
El ejemplo 3 muestra como este nuevo direccionamiento puede transferir los contenidos
de un elemento del arreglo 10H en un elemento 20h. Note la similitud entre este ejemplo
2 y el ejemplo 3. La diferencia principal es que en el ejemplo 3 no se utiliza el registro
BX para direccionar área de memoria de ARREGLO; en lugar de ello nosotros usamos
ARREGLO como un desplazamiento para lograr la misma tarea.

U.A.B.C. Pag. 45
Sistemas Computarizados

EJEMPLO 3
;usando el modo de direccionamiento relativo a registro
;
MOV DI,10H ;elemento10H
MOV AL,ARREGLO[DI] ;toma el dato
MOV DI,20H ;cuyo elemento es 20H
MOV ARREGLO[DI],AL ;salva el dato

Memoria

ARREGLO + 6
ARREGLO + 5
DI ARREGLO + 4
ARREGLO + 3
ELEMENTO
Desplazamiento ARREGLO + 2
ARREGLO + 1
ARREGLO ARREGLO

Figura 11. Direccionamiento relativo a registro utilizado para direccionar un elemento de ARREGLO.
Notes que DI selecciona el elemento y ARREGLO posee la dirección de inicio del arreglo.

Direccionamiento Relativo a Base-mas-Indice

El modo final de direccionamiento de datos disponible en el 8088 es el modo de


direccionamiento relativo a base-mas-índice. Este modo es similar al modo de
direccionamiento base-mas-índice, pero agrega un desplazamiento aun usando un registro
base y un registro índice para formar la dirección de memoria. Este tipo de modo de
direccionamiento frecuentemente direcciona un arreglo de dos dimensiones de datos en
memoria.

Datos con el Direccionamiento Relativo a Base-mas-Indice


El direccionamiento relativo a base-mas-índice es el menos usado. La figura 12
muestra como los datos están direccionados si la instrucción ejecutada por el 8088 es una
MOV AX,[BX+SI+100H]. El desplazamiento de 100H se suma a BX y SI para formar la
dirección offset con el segmento de datos. Así los registros BX = 0020H, SI = 0010H y
DS = 1000h, forman la dirección efectiva 10130H para esta instrucción - la suma de
estos registros mas un desplazamiento de 100H.
Este modo de direccionamiento es muy complejo para uso frecuente en un
programa. Algunas instrucciones típicas utilizando direccionamiento relativo a base-mas-
índice aparecen en la tabla 7.

U.A.B.C. Pag. 46
Sistemas Computarizados

Memoria

Registros

A3 10131H
AX A316 A316
16 10130H
BX 0020

SP 0010H + 0100H + 0020H + 10000H

BP
(Desp.) (DS X 10H)
SI 0010

Figura 12. Un ejemplo de direccionamiento relativo a base-mas-índice que se muestra mediante la


instrucción MOV AX,[BX+SI+100H]. Esta instrucción mueve un dato de una localidad de memoria al
registro AX. La localidad de memoria esta direccionada por la suma de DSx10H, 100H, BX y SI.

Tabla 7 Ejemplos de instrucciones con direccionamiento relativo a base-mas-índice


Lenguaje Ensamblador Operación

MOV DH,[BX+DI+20H] DH es cargado con un dato de una localidad del segmento


de datos direccionada por la suma de BX, DI, y el
desplazamiento 20H
MOV AX,FILE[BX+DI] AX es cargado con un dato de una localidad del segmento
de datos direccionada por la suma de BX, DI y el
desplazamiento FILE
MOV LIST[BP+DI],CL El contenido de CL es almacenado en una localidad del
segmento de pila direccionada por la suma de BP, DI y el
desplazamiento LIST

Arreglos con Direccionamiento Relativo a Base-mas-Indice


Suponga que una fila de muchos registros existen en memoria y cada registro
contiene muchos elementos. Este desplazamiento direcciona la fila, el registro base
direcciona un registro (record), y el registro índice direcciona un elemento de un record.
La figura 13 ilustra esta forma muy compleja de direccionar. El ejemplo 4 muestra un
programa que copia el elemento 0 de un record A en un elemento 2 de un record C
usando el modo de direccionamiento relativo a base-mas-índice.

U.A.B.C. Pag. 47
Sistemas Computarizados

EJEMPLO 4
;usando el modo de direccionamiento relativo a base-mas-índice
;
MOV BX,OFFSET RECA ;direcciona el record A
MOV DI,0 ;elemento 0
MOV AL,FILE[BX+DI] ;toma el dato
MOV BX,OFFSET RECC ;direcciona el record C
MOV DI,2 ;y elemento 2
MOV FILE[BX+DI],AL ;salva el dato

Memoria

DI

ELEMENTO REC C

REC B FILE
BX
REC C

REC A
Desplazamiento

FILE

Figura 13. Direccionamiento relativo a base-mas-índice para direccionar FILE que contiene múltiples
registros (REC) que a su vez contiene múltiples elementos.

U.A.B.C. Pag. 48

Anda mungkin juga menyukai