modos direc

Upload: jaime-arvizu

Post on 29-Feb-2016

4 views

Category:

Documents


0 download

TRANSCRIPT

  • Sistemas Computarizados

    U.A.B.C. Pag. 35

    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 , BXMOV

    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.

  • Sistemas Computarizados

    U.A.B.C. Pag. 36

    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).

  • Sistemas Computarizados

    U.A.B.C. Pag. 37

    Destino

    AX

    Fuente

    BX

    Generacin de Direccin

    Registro

    Inmediato

    Directo

    MOV AX,BX

    MOV BL,3AH

    Registro

    Registro

    Dato

    AX

    3AH

    Registro

    Registro

    BL

    11234H

    10300H

    10500H

    Memoria

    Memoria

    Memoria

    Registro

    Registro

    AX

    AX

    Registro

    Base mas

    MOV 1234H,AX

    MOV [BX],AX

    MOV [BX+SI],AX

    Relativo a

    Relativo a

    MOV [BX+4],AX

    MOV ARRAY[BX+SI],AX

    Registro

    Registro

    AX

    AX

    10304H

    11500H

    Memoria

    Memoria

    (Desp) + (DS X 10H)

    1234H + 10000H

    (BX) + (DS X 10H)

    0300H + 10000H

    (BX) + (SI) + (DS X 10H)

    0300H + 0200H + 10000H

    (BX) + 4 + (DS X 10H)

    0300H + 4 + 10000H

    (BX) + ARRAY + (SI) + (DS X 10H)

    0300H + 1000H + 0200H + 10000H

    Indirecto

    Indice

    Registro

    Base mas Indice 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 Operacin

    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

  • Sistemas Computarizados

    U.A.B.C. Pag. 38

    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

    76AF

    1234

    BX

    CX

    DX

    1234

    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

  • Sistemas Computarizados

    U.A.B.C. Pag. 39

    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.

    AX

    Registros

    6291H 3456H MOV AX,3456H

    Programa

    BX

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

    Tabla 2. Ejemplos de instrucciones con Direccionamiento inmediato

    Lenguaje Ensamblador Operacin

    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 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.

  • Sistemas Computarizados

    U.A.B.C. Pag. 40

    AX

    Registros

    AH AL 12 12

    Memoria

    12 11234H

    BLBHBX

    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 Operacin

    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 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.

  • Sistemas Computarizados

    U.A.B.C. Pag. 41

    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

    AX

    Registros

    6A42

    6A4202001H

    02000H

    6A

    42+ 01000H

    2000BX

    (DS X 10H)

    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 Operacin

    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 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

  • Sistemas Computarizados

    U.A.B.C. Pag. 42

    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 ;direcciona tabla

    MOV CX,50 ;carga contador

    AGAIN:

    IN AL,DATA_PTO_DATOS ;lee voltmetro

    MOV [BX],AL ;guarda datos

    INC BX ;direcciona el sig.

    LOOP AGAIN ;repite 50 veces

    Memoria

    TABLA + 48

    TABLA + 49

    TABLA

    TABLA + 1

    TABLA + 2

    TABLABX

    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.

  • Sistemas Computarizados

    U.A.B.C. Pag. 43

    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

    1000

    AX

    BX

    CX

    DX AB03AB03

    AB

    03

    02011H

    02010H

    0010H + 1000H + 1000H

    SP

    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 Operacin

  • Sistemas Computarizados

    U.A.B.C. Pag. 44

    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 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

    ;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 nmero del elemento en el arreglo, cargado en el

    registro DI, direcciona el elemento del arreglo. Memoria

    DI ARREGLO + 4

    ARREGLO + 5

    ARREGLO

    ARREGLO + 1

    ARREGLO + 2

    ARREGLO + 3ELEMENTO

    BX

    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

  • Sistemas Computarizados

    U.A.B.C. Pag. 45

    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

    03101H

    03100H

    A0

    76A076

    0100

    AX

    BX

    0100H + 1000H + 2000H

    (DS X 10H)

    A076

    (BX) (Desp.) 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 Operacin

    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.

  • Sistemas Computarizados

    U.A.B.C. Pag. 46

    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

    DI ARREGLO + 4

    ARREGLO + 5

    ARREGLO + 6

    ARREGLO

    ARREGLO + 1

    ARREGLO + 2

    ARREGLO + 3ELEMENTO

    ARREGLO

    Desplazamiento

    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-mas-

    ndice aparecen en la tabla 7.

  • Sistemas Computarizados

    U.A.B.C. Pag. 47

    Memoria

    Registros

    A316 A316A3 10131H

    10130H160020

    AX

    BX

    SP

    BP

    0010H + 0100H + 0020H + 10000H

    (DS X 10H)

    0010SI

    (Desp.)

    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 Operacin

    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.

  • Sistemas Computarizados

    U.A.B.C. Pag. 48

    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

    FILE

    Desplazamiento

    REC A

    Figura 13. Direccionamiento relativo a base-mas-ndice para direccionar FILE que contiene mltiples

    registros (REC) que a su vez contiene mltiples elementos.