Вы находитесь на странице: 1из 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
instruccin.
Generalmente se utiliza la instruccin MOV (movimiento de dato) para describir los
modos de direccionamiento de datos. La instruccin MOV transfiere bytes o palabras de
datos entre los registros o entre la memoria y los registros. En la descripcin 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 instruccin MOV es una instruccin de las mas simple y flexible del 8088,
esta provee la base para la explicacin de los modos de direccionamiento de datos. La
figura 1 ilustra la instruccin MOV y define la direccin del flujo de datos. La fuente esta
a la derecha y el destino a la izquierda, prxima al cdigo de operacin 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 operacin ejecutar). Una coma siempre separa el destino de
la fuente en una instruccin.

MOV Destino , Fuente


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

En la figura 1 la instruccin 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
instruccin 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 instruccin MOV CX,DX copia el contenido del tamao 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 tamao de una


palabra o un byte a un registro destino o localidad de memoria (Ejemplo la instruccin
MOV AL,22H copia la palabra de tamao 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 instruccin 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 instruccin
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 instruccin MOV AX,[BX + SI] copia el contenido de 16-bits de
la direccin 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 instruccin MOV AX,[BX+4] o MOV AX,ARRAY[BX]. La primera
instruccin copia una palabra desde una direccin en el segmento de datos, formado por
BX mas 4 en el registro AX . La segunda instruccin 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 instruccin 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 instruccin usa una direccin
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

Generacin de Direccin

Destino

BX

AX
Registro

Registro

MOV AX,BX

Registro
3AH

BL

Inmediato

MOV BL,3AH

Dato

Registro

Directo

MOV 1234H,AX

Registro

Registro
Indirecto

MOV [BX],AX

Registro

MOV [BX+SI],AX

Registro

MOV [BX+4],AX

Registro

AX

11234H
(Desp) + (DS X 10H)
1234H +
10000H

AX

10300H
(BX)
+ (DS X 10H)
0300H +
10000H

Memoria

(BX) + (SI)
+ (DS X 10H)
0300H + 0200H + 10000H

Memoria

(BX) +
0300H +

Memoria

AX
Base mas
Indice

10500H

AX
Relativo a
Registro

10304H
4
4

+ (DS X 10H)
+ 10000H

AX
MOV ARRAY[BX+SI],AX
Relativo a
Base mas Indice

Registro

Memoria

11500H
(BX) + ARRAY + (SI)
+ (DS X 10H)
0300H + 1000H + 0200H + 10000H

Memoria

Figura 2. Modos de Direccionamiento del 8088

Direccionamiento a Registros
El direccionamiento a registros es un modo fcil 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 tambin 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 tamao 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
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
U.A.B.C.

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

Operacin
BL
AL
CL
CH
CX
AX
BP
SP
AX
DS
DI
SI
SI
DI
ES
BX
No permitido
No permitido
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 instruccin MOV tiene 64 diferentes permutaciones. El nico tipo de
instruccin MOV con registros no permitida, es una instruccin MOV de registro de
segmento a registro de segmento. Note que el registro de segmento de cdigo no puede
ser cambiado por una instruccin MOV. La razn es que la direccin de la siguiente
instruccin es encontrada en ambos registros IP y CS . Si es modificado CS, la direccin
de la siguiente instruccin es impredecible.
La figura 3 muestra la funcin de la instruccin 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 ejecucin de la instruccin 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 contena 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 cdigo operacin en la
memoria. El direccionamiento inmediato opera sobre un dato de un byte o una palabra.
La instruccin MOV inmediatamente transfiere una copia del dato inmediato en el
registro o localidad de memoria. La figura 4 ilustra la operacin de la instruccin MOV
AX,3456H. Esta instruccin copia el 3456H desde la instruccin localizada en memoria,
en el registro AX. Como la instruccin MOV ilustrada en la figura 3, el dato fuente
sobrescribe el dato destino.
En lenguaje ensamblador simblico, el smbolo # precede a un dato inmediato con
algunos ensambladores del 8088. La instruccin MOV AX,#3456H es un ejemplo. La
mayora de los ensambladores 8088 no utilizan el smbolo #, pero representan dato
inmediato como en la instruccin MOV AX,3456H.
El ensamblador simblico 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 cdigos especiales o ajustes un ejemplo es 100 decimal en la instruccin MOV


AL,100. Un carcter ASCII codificado es representado en la forma inmediata si el
carcter ASCII esta encerrado entre apstrofes, un ejemplo es la instruccin MOV BH,'A'
la cual mueve el carcter A codificado en ASCII en el registro BH. La tabla 2 muestra
diferentes instrucciones MOV que aplican a datos inmediatos.
Registros
AX

6291H

Programa
3456H

MOV AX,3456H

BX

Figura 4. El efecto de ejecutar la instruccin MOV AX,3456H.


Tabla 2. Ejemplos de instrucciones con Direccionamiento inmediato

Lenguaje Ensamblador
MOV
MOV
MOV
MOV
MOV

BL,44
AX,44H
SI,0
CH,100
SP,3000H

Operacin
2CH
0044H
0000H
64H
3000H

BL
CH
AX
SP
DS

Direccionamiento Directo de Datos


La mayora de los comandos usan direccionamiento directo de datos. El
direccionamiento directo de datos es aplicado en muchas instrucciones en un programa
tpico. Existen dos formas bsicas 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 instruccin en el
conjunto de instrucciones del 8088
Direccionamiento Directo
El direccionamiento directo es solamente permitido con una instruccin 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 instruccin siempre es una instruccin de
longitud de 3 bytes.
La instruccin MOV AL,DATA , tal como se representa en la mayora 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 simblica. (Algunos ensambladores
representan esta instruccin 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
AX AH

AL

BX BH

BL

Memoria
12

12

12

11234H

Figura 5. El efecto de ejecutar la instruccin 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 informacin transfiere una copia del contenido en
tamao en bytes de la localidad de memoria [1234H] en AL. La direccin efectiva esta
formada por la suma de 1234H (la direccin desplazada) a 10000H (la direccin del
segmento de datos).
Tabla 3. Posibles formas de direccionamiento directo

Lenguaje Ensamblador
MOV AL,NUMBER
MOV AX,COW
MOV NEWS,AL
MOV THERE,AX
MOV CH,[1000H]

MOV DATA,BP

Operacin
Un byte es copiado del segmento de datos mas un
desplazamiento NUMBER a AL
Una palabra es copiada del segmento de datos mas un
desplazamiento COW a AX
AL es almacenado en la localidad direccionada por el
segmento de datos mas un desplazamiento NEWS
AX es almacenado en la localidad direccionada por el
segmento de datos mas un desplazamiento THERE
El contenido de la localidad de memoria direccionada por el
desplazamiento 1000H en el segmento de datos, es copiado al
registro CL
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 dems
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 instruccin 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 instruccin direcciona la palabra almacenada en la
localidad de memoria 2000H y 2001H y la transfiere a el registro AX (ver figura 6). Los
smbolos [ ] denotan direccionamiento indirecto en el lenguaje ensamblador del 8088.
Algunas instrucciones tpicas que utilizando direccionamiento indirecto aparecen en la
tabla 4.
Memoria

Registros
AX

6A42

BX

2000

6A42
+ 01000H
(DS X 10H)

6A

02001H

42

02000H

Figura 6. El efecto de ejecutar la instruccin 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 direccin 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
MOV CX,[BX]
MOV [BP],DL
MOV [DI],BH
MOV [DI],[BX]

Operacin
Una palabra de la localidad de memoria direccionada por el
registro BX (dentro del segmento de datos) es copiada a CX
Un byte del segmento de pila es copiado en la localidad
direccionada por BP
Un byte dentro del segmento de datos es copiado en la
localidad direccionada por DI
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 informacin que contenga 50 muestras tomadas de un voltmetro
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 instruccin MOV inmediata.


Despus de inicializar la primer direccin 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 direccin del puerto
;TABLA contiene la direccin del inicio de la tabla
MOV BX,OFFSET TABLA
MOV CX,50

;direcciona tabla
;carga contador

IN AL,DATA_PTO_DATOS
MOV [BX],AL
INC BX
LOOP AGAIN

;lee voltmetro
;guarda datos
;direcciona el sig.
;repite 50 veces

AGAIN:

Memoria

TABLA + 49
TABLA + 48

BX

TABLA

TABLA + 2
TABLA + 1
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 direccin


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 direccin offset de la
localidad de memoria donde se encuentra TABLA y no su contenido. Por ejemplo, la
instruccin MOV BX,DATA copia el contenido de la localidad de memoria donde esta
DATA en BX , mientras que la instruccin MOV BX,OFFSET DATA copia la direccin
de DATA en BX. Cuando la directiva OFFSET es usada con la instruccin MOV, el
ensamblador calcula la direccin y entonces usa una instruccin MOV inmediatamente
para cargar la direccin 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 voltmetro 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 instruccin LOOP repite el ciclo 50 veces. La instruccin LOOP decrementa (resta 1)
el contador (CX) y si CX no es cero, salta a AGAIN. Si CX se convierte en cero, no
ocurre ningn 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 posicin
relativa de un elemento en el arreglo. Recuerde que cuando BP direcciona memoria de
datos, ambos, el registro de segmento y BP forman la direccin efectiva.
Direccionamiento de Datos
La figura 8 muestra como los datos son direccionados por la instruccin MOV
DX,[BX+DI] en este ejemplo, BX = 1000H, DI = 0010H, y DS = 0100H, lo cual se
traduce en la direccin de memoria 02010H. Esta instruccin 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
DX

AB03

AB

02011H

03

02010H

AB03

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
instruccin MOV DX,[BX+DI]. Note que la direccin de memoria 02010H es direccionada por esta
instruccin debido a que DS (0100H), BX(1000H) y DI(0010H) se suman para generar esta direccin.
Tabla 5. Ejemplos de instrucciones usando direccionamiento base-mas-ndice

Lenguaje Ensamblador

U.A.B.C.

Operacin

Pag. 43

Sistemas Computarizados

MOV CX,[BX+DI]
MOV CH,[BP+SI]
MOV [BX+SI],SP
MOV [BP+DI],CS

El registro CX es cargado con el dato de la localidad del


segmento de datos direccionada por la suma de BX y DI
El registro CH es cargado con el dato de la localidad del
segmento de pila direccionada por la suma de BP y SI
El contenido del registro SP es almacenado en el segmento de
datos en la localidad direccionada por la suma de BX y SI
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 direccin inicial del
arreglo y DI (ndice) con el nmero 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

MOV
MOV
MOV
MOV
MOV

;usando el modo de direccionamiento base-mas-ndice


;
BX,OFFSET ARREGLO ;direcciona el arreglo
DI,10H
;elemento 10H
AL,[BX +DI]
;toma el dato
DI,20H
;cuyo elemento es 20H
[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 nmero del elemento en el arreglo, cargado en el
registro DI, direcciona el elemento del arreglo.
Memoria

DI
ELEMENTO
BX
ARREGLO

ARREGLO + 5
ARREGLO + 4
ARREGLO + 3
ARREGLO + 2
ARREGLO + 1
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 operacin de la instruccin:MOV AX,[BX+1000H]. En este
ejemplo, BX = 0100h y DS = 0200h, por lo que la direccin 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
AX

A076

BX

0100

A076

A0

03101H

76

03100H

0100H + 1000H + 2000H


(BX)
(Desp.) (DS X 10H)

Figura 10. Efecto de ejecutar la instruccin MOV AX,[BX+100H] si BX=0100H y DS=0200H.


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

Lenguaje Ensamblador
MOV AX,[DI+100H]
MOV ARRAY[SI],BL

MOV LIST[BP],CL

MOV DI,SET[BX]

Operacin
AX es cargado con un dato del segmento de datos
direccionado por el suma de DI y 100H
El contenido de BL es almacenado en el segmento de datos
en el arreglo de memoria direccionado por ARRAY, en el
elemento SI
El contenido de CL es almacenado en al segmento de pila en
el arreglo de memoria direccionado por LIST, en el elemento
BP
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

MOV
MOV
MOV
MOV

;usando el modo de direccionamiento relativo a registro


;
DI,10H
;elemento10H
AL,ARREGLO[DI]
;toma el dato
DI,20H
;cuyo elemento es 20H
ARREGLO[DI],AL
;salva el dato
Memoria

DI
Desplazamiento

ELEMENTO

ARREGLO

ARREGLO + 6
ARREGLO + 5
ARREGLO + 4
ARREGLO + 3
ARREGLO + 2
ARREGLO + 1
ARREGLO

Figura 11. Direccionamiento relativo a registro utilizado para direccionar un elemento de ARREGLO.
Notes que DI selecciona el elemento y ARREGLO posee la direccin 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 direccin 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 estn direccionados si la instruccin ejecutada por el 8088 es una
MOV AX,[BX+SI+100H]. El desplazamiento de 100H se suma a BX y SI para formar la
direccin offset con el segmento de datos. As los registros BX = 0020H, SI = 0010H y
DS = 1000h, forman la direccin efectiva 10130H para esta instruccin - 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 tpicas utilizando direccionamiento relativo a base-masndice aparecen en la tabla 7.

U.A.B.C.

Pag. 46

Sistemas Computarizados

Memoria
Registros
AX

A316

BX

0020

SP

A3

10131H

16

10130H

0010H + 0100H + 0020H + 10000H

BP
SI

A316

(Desp.)

(DS X 10H)

0010

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


instruccin MOV AX,[BX+SI+100H]. Esta instruccin 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
MOV DH,[BX+DI+20H]

MOV AX,FILE[BX+DI]

MOV LIST[BP+DI],CL

Operacin
DH es cargado con un dato de una localidad del segmento
de datos direccionada por la suma de BX, DI, y el
desplazamiento 20H
AX es cargado con un dato de una localidad del segmento
de datos direccionada por la suma de BX, DI y el
desplazamiento FILE
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

MOV
MOV
MOV
MOV
MOV
MOV

;usando el modo de direccionamiento relativo a base-mas-ndice


;
BX,OFFSET RECA
;direcciona el record A
DI,0
;elemento 0
AL,FILE[BX+DI]
;toma el dato
BX,OFFSET RECC
;direcciona el record C
DI,2
;y elemento 2
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 mltiples
registros (REC) que a su vez contiene mltiples elementos.

U.A.B.C.

Pag. 48