Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
U.A.B.C.
Pag. 35
Sistemas Computarizados
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
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
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 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
6291H
Programa
3456H
MOV AX,3456H
BX
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
U.A.B.C.
Pag. 39
Sistemas Computarizados
Registros
AX AH
AL
BX BH
BL
Memoria
12
12
12
11234H
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
U.A.B.C.
Pag. 40
Sistemas Computarizados
Registros
AX
6A42
BX
2000
6A42
+ 01000H
(DS X 10H)
6A
02001H
42
02000H
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.
U.A.B.C.
Pag. 41
Sistemas Computarizados
;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.
Pag. 42
Sistemas Computarizados
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
MOV
MOV
MOV
MOV
MOV
DI
ELEMENTO
BX
ARREGLO
ARREGLO + 5
ARREGLO + 4
ARREGLO + 3
ARREGLO + 2
ARREGLO + 1
ARREGLO
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
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
U.A.B.C.
Pag. 45
Sistemas Computarizados
EJEMPLO 3
MOV
MOV
MOV
MOV
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.
U.A.B.C.
Pag. 46
Sistemas Computarizados
Memoria
Registros
AX
A316
BX
0020
SP
A3
10131H
16
10130H
BP
SI
A316
(Desp.)
(DS X 10H)
0010
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
U.A.B.C.
Pag. 47
Sistemas Computarizados
EJEMPLO 4
MOV
MOV
MOV
MOV
MOV
MOV
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