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.
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.
U.A.B.C. Pag. 35
Sistemas Computarizados
U.A.B.C. Pag. 36
Sistemas Computarizados
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.
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
AX
BX 76AF
CX 1234 1234
DX
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
BX
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
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).
U.A.B.C. Pag. 40
Sistemas Computarizados
AX 6A42
6A42
BX 2000 6A 02001H
42 02000H
+ 01000H
(DS X 10H)
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.
U.A.B.C. Pag. 41
Sistemas Computarizados
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
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.
U.A.B.C. Pag. 42
Sistemas Computarizados
Direccionamiento Base-mas-Indice
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
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.
U.A.B.C. Pag. 43
Sistemas Computarizados
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
ARREGLO + 5
DI ARREGLO + 4
ARREGLO + 3
ELEMENTO
ARREGLO + 2
BX
ARREGLO + 1
ARREGLO ARREGLO
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).
Registros
A0 03101H
AX A076 A076
76 03100H
BX 0100
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.
U.A.B.C. Pag. 46
Sistemas Computarizados
Memoria
Registros
A3 10131H
AX A316 A316
16 10130H
BX 0020
BP
(Desp.) (DS X 10H)
SI 0010
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