Вы находитесь на странице: 1из 49

Modos de Direccionamiento

De Memoria
Integrantes:
Eduar Rubn Apaza Yez 06-29619
Renzo Zegarra Calisaya 06-29601
Introduccin
Para desarrollar software eficiente para el microprocesador se requiere de
una completa familiaridad con los modos de direccionamiento empleados
por cada instruccin.
En esta exposicin se utiliza la instruccin MOV para describir los modos de
direccionamiento de datos.

La instruccin MOV transfiere bytes o palabras de datos entre registros, o


entre registros y la memoria en los microprocesadores 8086 y 80286
Los Modos de Direccionamiento de datos son: de registro, inmediato,
directo, de registro indirecto, de base mas ndice, de registro relativo y de
base relativa mas ndice en los microprocesadores 8086 al 80286.
Modos de Direccionamientos de Datos
Como la instruccin MOV es muy comn y flexible, proporciona una
base para la explicacin de los modos de direccionamiento de datos.

MOV AX,BX

destino origen

Aqu se ilustra la instruccin MOV y define la direccin de flujo de


datos. El origen est a la derecha y el destino est a la izquierda,
enseguida del cdigo de operacin MOV
Direccionamiento de Registros
Este modo de direccionamiento es el ms comn para direccionar
datos y es el ms fcil de aplicar una vez que se aprenden los nombres
de los registros. El microprocesador contiene los siguientes nombres
de registros de 8 bits que se utilizan en el direccionamiento de
registros: AH,AL,BH,BL,CH,CL,DH,DL.

Tambin estn presentes los siguientes nombres de registros de 16


bits: AX, BX, CX, DX, SP, BP, SI, DI.

Es importante que las instrucciones utilicen registros del mismo


tamao.
Direccionamiento de Registros
Arreglo de Registros
EAX
EBX 2 2 3 4 7 6 A F
ECX 1 1 A C 1 2 3 4

Esta figura muestra la operacin de la instruccin MOV BX, CX.


Direccionamiento de Registros
{ Ejemplos

Lenguaje Tamao Operacin


Ensamblador
MOV AL, BL 8 Bits Copia BL en AL
MOV CH, CL 8 Bits Copia CL en CH
MOV AX, CX 16 Bits Copia CX en AX
MOV ECX, EBX 32 Bits Copia EBX en ECX
MOV DS, CX 16 bits Copia CX en DS
MOV ES, DS --- No Se Permite
MOV BL, DX -- No Se Permite
Direccionamiento Inmediato
El trmino inmediato implica que los datos siguen inmediatamente del
cdigo de operacin hexadecimal en la memoria. Los datos inmediatos
son datos constantes, mientras que los datos que se transfieren de un
registro o una posicin de memoria son datos variables.

La instruccin MOV inmediata transfiere una copia de los datos


inmediatos hacia un registro o una posicin de memoria.

La siguiente figura muestra la operacin de una instruccin MOV EAX,


13456H.
Direccionamiento Inmediato
Arreglo de Registros
EAX 3 3 3 3 6 2 9 1
EBX

13456H

Programa
MOV EAX, 13456H
Direccionamiento inmediato
Los Datos decimales se representa como estn y no requieren
cdigos especiales ni ajustes. Uno o varios caracteres del cdigo
ASCII pueden representarse en el formato inmediato si los datos
ASCII van encerrados en apstrofe ( ).

Los datos binarios se representan si el nmero de binario va


seguido de la letra B o, en algunos ensambladores, la letra Y.
Direccionamiento inmediato
{ Ejemplos

Lenguaje Tamao Operacin


Ensamblador
MOV BL, 44 8 Bits Copia el 44 decimal (2CH) en BL
MOV AL,A 8 Bits Copia el carcter ASCII A en AL
MOV AX,44H 16 Bits Copia el 0044H en AX
MOV ESI, 12 32 Bits Copia el decimal 12 en ESI
MOV EAX, 100B 32 Bits Copia el 100 binario en EAX
Direccionamiento Directo de Datos
La mayora de las instrucciones pueden usar el modo de
direccionamiento directo de datos. De hecho, este modo se aplica a
muchas instrucciones en un programa comn. Hay dos formas
bsicas de direccionamiento directo de memoria.

Direccionamiento Directo : que se aplica a una instruccin MOV


entre una posicin de memoria y AL, AX o EAX.

Direccionamiento por desplazamiento : que se aplica a casi


cualquier instruccin en el conjunto de instrucciones.
Direccionamiento Directo de Datos
{ Direccionamiento Directo

El Direccionamiento Directo con una instruccin MOV transfiere


datos entre una posicin de memoria(ubicada dentro del segmento de
datos) y el registro AL(8 Bits), AX(16 Bits) o EAX(32 Bits).
Una instruccin MOV que utiliza este tipo de direccionamiento es por
lo general de 3 bytes.
La instruccin MOV AL, DATOS que representa la mayora de los
ensambladores carga AL en base a la posicin de memoria del
segmento de datos DATOS (1234H). La posicin de memoria DATOS
es una posicin de memoria simblica, y 1234H es la posicin
Hexadecimal Actual.
Direccionamiento Directo de Datos
{ Direccionamiento Directo

Lenguaje Tamao Operacin


Ensamblador
Copia en AL el contenido tipo byte de
MOV AL, NUMERO 8 Bits la posicin de memoria NUMERO
del segmento de datos
MOV AX, VACA 16 Bits Copia en AX el contenido tipo
palabra de la posicin de memoria
VACA del segmento de datos
MOV NOTICIAS,AL 8 Bits Copia AL en la posicin de memoria
NOTICIAS tipo byte.
MOV AHI, AX 16 Bits Copia AX en la posicin de memoria
AHI tipo palabra
Direccionamiento Directo de Datos
{ Direccionamiento por desplazamiento

Este modo de direccionamiento es casi idntico al direccionamiento


directo, excepto que la instruccin es de 4 bytes en vez de 3. Este
tipo de direccionamiento de datos es mucho mas flexible, ya que la
mayora de las instrucciones la utilizan.
Direccionamiento Directo de Datos
{ Direccionamiento por desplazamiento

Lenguaje Tamao Operacin


Ensamblador
Copia en CH el contenido tipo byte
MOV CH, PERRO 8 Bits de la posicin de memoria PERRO
del segmento de datos
MOV ES,DATOS6 16 Bits Copia en ES el contenido tipo palabra
de la posicin de memoria DATOS6
del segmento de datos
MOV NUMERO, SP 16 Bits Copia SP en la posicin de memoria
NUMERO del segmento de datos
MOV DATOS1, EAX 32 Bits Copia EAX en la posicin de
memoria DATIS1 del segmento de
datos
Direccionamiento Indirecto de
Registros
Este modo de direccionamiento que se direccionen datos en cualquier
posicin de memoria, a travs de una memoria de desplazamiento que se
guarde en cualquiera de los siguientes registros: BP, BX, DI y SI. Por
ejemplo, si el registro BX contiene 1000H y se ejecuta la instruccin MOV
AX,[BX], el contenido tipo palabra de la direccin de desplazamiento
1000H del segmento de datos se copia en el registro AX.
Si el microprocesador se opera en modo real DS=0100H, esta
instruccin direcciona una palabra almacenada en los bytes de
memoria 2000H y 2001H, y la transfiere hacia el registro AX.

Los smbolos [ ], denotan un direccionamiento indirecto en


lenguaje ensamblador.
Direccionamiento Indirecto de
Registros
{ Ejemplos

Lenguaje Tamao Operacin


Ensamblador
Copia en CH el contenido de tipo
palabra de la posicin de memoria
MOV CH, [BX] 16 Bits
del segmento de datos direccionado
por BX.
MOV [DI],BH 8 Bits Copia BH, en la posicin de memoria
del segmento de datos direccionado
por DI.
MOV ECX,[EBX] 32 Bits Copia en ECX el contenido tipo doble
palabra de la posicin de memoria
del segmento de datos direccionado
por EBX
Direccionamiento de Base mas ndice
Este modo de direccionamiento es similar al direccionamiento
indirecto, ya que direcciona los datos de la memoria en forma
indirecta. En los microprocesadores 8086 al 80286 este tipo de
direccionamiento utiliza un registro base (BP o BX) y un registro
ndice (DI o SI) para direccionar la memoria de forma indirecta.

A menudo el registro base guarda la posicin inicial de un arreglo de


memoria, mientras que el registro ndice guarda la posicin relativa de
un elemento en un arreglo.
Direccionamiento de Base mas ndice
{ Localizacin de datos con el direccionamiento de base mas ndice

La imagen 1-1 muestra cmo la instruccin MOV DX,[BX+DI] direcciona los


datos cuando el microprocesador opera en el modo real. En este ejemplo,
BX=1000H, DI=0010H y DS=0100H, lo cual se traduce en la posicin de
memoria 02010H. Esta instruccin transfiere una copia de la palabra de la
posicin 02010H hacia el registro DX.
Direccionamiento de Base mas ndice 02015H
02014H
EAX
EBX 1*0 0 0 02013H
02012H
ECX
A B 02011H
EDX A B 0 3
0 3 02010H
0200FH

ESP
1000H
EBP
ESI
0010H 2010H
EDI 0 0 1 0 + +
1010H

DSx10H
Direccionamiento de Base mas ndice
{ Localizacin de datos con el direccionamiento de base mas ndice

Lenguaje
Tamao Operacin
Ensamblador
Copia en CX el contenido tipo
palabra de la posicin de memoria
MOV CX, [BX+DI] 16 Bits
del segmento de datos direccionado
por BX ms DI
MOV CH, [BP+SI] 8 Bits Copia en CH el contenido tipo byte de
la posicin de memoria del segmento
de datos direccionado por BP ms SI
MOV [BX+SI],SP 16 Bits Copia SP en la posicin de memoria
del segmento de datos direccionado
por BX ms SI
Direccionamiento de Base mas ndice
{ Localizacin de datos de un arreglo con el direccionamiento de base mas
ndice
Un uso importante del modo de direccionamiento de base ms ndice es
para direccionar elementos en un arreglo de memoria. Suponga que se
debe tener acceso a los elementos en un arreglo ubicado en el segmento de
datos de la posicin de memoria ARREGLO.

Para logra esto se carga el registro BX base con direccin inicial del arreglo,
y el registro DI(ndice) con el numero de elemento al que se va a tener
acceso.
La imagen 1-2, muestra el uso de BX y DI para acceder a un elemento en
un arreglo de datos
Direccionamiento de Base mas ndice
{ Localizacin de datos de un arreglo con el direccionamiento de base mas
ndice
MEMORIA

ARREGLO+5
ARREGLO+4

ELEMENTO ARREGLO+3
ARREGLO+2
BX
ARREGLO+1
ARREGLO ARREGLO

IMAGEN 1-2
Direccionamiento Relativo de Registros
Este modo de direccionamiento s similar al direccionamiento de base mas
ndice y al direccionamiento por desplazamiento. En el direccionamiento
relativo de registros, los datos en un segmento de memoria se direccionan
mediante la suma del desplazamiento al contenido de un registro base o
ndice (BP,BX,DI o SI).
La figura 1-3 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 DSx0H, BX y el desplazamiento de 1000H, con lo
cual se direcciona la posicion 03100H.
Direccionamiento de Base mas ndice
{ Localizacin de datos de un arreglo con el direccionamiento de base mas
ndice

MOV AX,[BX+1000H]

Arreglo de Registros
A 0 03101H
EAX 2 2 2 2 A 0 7 6
7 6 03100H
EBX 0 0 0 0 0 1 0 0
0100H

1000H +

1100H

DSx10H +
3100H
Direccionamiento de Registros
{ Direccionamiento de un arreglo con el modo relativo de registros

Es posible direccionar datos de un arreglo con el direccionamiento


relativo de registros, tal como se hace con el direccionamiento de
base ms ndice. En la figura 1-4 se muestra el direccionamiento
relativo de registros. Esto muestra cmo se suma el desplazamiento
ARREGLO al registro ndice DI, para generar una referencia a un
elemento del arreglo.
Direccionamiento de Base mas ndice
{ Localizacin de datos de un arreglo con el direccionamiento de base mas
ndice
MEMORIA

ARREGLO+5
ARREGLO+4

ELEMENTO ARREGLO+3
ARREGLO+2
DESPLAZAMIENTO
ARREGLO+1
ARREGLO ARREGLO

IMAGEN 1-3
Direccionamiento de base relativa
mas ndice

Este modo de direccionamiento es similar al direccionamiento


de base mas ndice, solo que se suma un desplazamiento
adems de usar un registro base y un registro para formar la
direccin de memoria. Este tipo de modo de direccionamiento a
menudo direcciona un arreglo bidimensional de datos en la
memoria.
Direccionamiento de base relativa
mas ndice
{ Direccionamiento de datos con base relativa mas ndice

El direccionamiento de base relativa mas indice es el modo


de direccionamiento menos utilizado. La siguiente figura
muestra como se hace referencia a los datos si la instruccin
que ejecuta el microprocesador es MOV AX[BX+SI+100H].

El desplazamiento de 100H se suma a BX y SI para formar la


direccin de desplazamiento dentro del segmento de datos.

Los valores de los segmentos son BX=0020H, SI=0100H y


DS=1000H
Direccionamiento de base relativa mas ndice

MOV AX,[BX+SI+100H]

Arreglo de Registros
A 3 10131H
EAX A 3 1 6
1 6 10130H
EBX 0 0 2 0
0020H

0030H 0130H
10130H
0 0 1 0 + + +
ESI
0010H
10000H

0100H DS x 10H
Direccionamiento de base relativa mas ndice
{ Direccionamiento de datos con base relativa mas ndice

Este modo de direccionamiento es demasiado complejo


como para utilizarlo con frecuencia en la programacin. En la
tabla siguiente aparecen algunas instrucciones tpicas que
utilizan el direccionamiento de base relativa ms ndice.
Direccionamiento de base relativa mas ndice
{ Direccionamiento de datos con base relativa mas ndice
Tama
Lenguaje Ensamblador Operacin
o
Copia en DH el contenido tipo byte de la posicin
MOV DH,[BX+DI+20H] 8 Bits de memoria del segmento de datos direccionada
por la suma de BX,DI y 20H
MOV AX,ARCHIVO[BX+DI] 16 Bits Copia en AX el contenido tipo palabra de la
posicin de memoria del segmento de datos
direccionado por la suma de: ARCHIVO, BX y DI

MOV LISTA[BP+DI],CL 8 Bits Copia CL en la posicin de memoria del segmento


de pila direccionada por la suma de LISTA, BP y DI

MOV LISTA[BP+SI+4],DH 8 Bits Copia DH en la posicin de memoria del segmento


de pila direccionada por la suma de LISTA, BP, SI y
4

MOV 32 Bits Copia en EAX el contenido tipo doble palabra de la


EAX,ARCHIVO[EBX+ECX+2] posicin de memoria direccionada por la suma de
ARCHIVO, EBX, ECX y 2
Direccionamiento de base relativa
mas ndice
{ Direccionamiento de arreglos con el modo de base relativa mas ndice

Suponga que existe un archivo de muchos registros en


memoria y que cada registro contiene muchos elementos. El
desplazamiento direcciona el archivo, el registro base
direcciona un registro y el registro ndice direcciona un
elemento de un registro.
Direccionamiento de ndice escalado

Este modo de direccionamiento es nico para los


microprocesadores del 80386 al Pentium 4. Utiliza dos
registros de 32 bits (un registro base y un registro ndice)
para acceder a la memoria. El segundo registro (ndice) se
multiplica por un factor escala. Este factor escala puede ser
1x, 2x, 4x u 8x.
Direccionamiento de ndice escalado
El factor de escala 1x esta implcito y no necesita incluirse en la
instruccin del lenguaje ensamblador (MOV AL,[EBX+ECX]).

El factor de escala 2x se utiliza para direccionar arreglos de


memoria del tamao de una palabra.

El factor de escala 4x se utiliza con los arreglos de memoria del


tamao de una doble palabra
.
El factor de escala 8x se utiliza con los arreglos de memoria del
tamao de una palabra cudruple.
Direccionamiento de ndice escalado
{ Ejemplo

MOV AX,[EDI+2*ECX]

Esta instruccin utiliza el factor de escala de 2x, el cual


multiplica el contenido de ECX por 2 antes de sumarlo al
registro EDI para formar la direccin. Si ECX contiene
00000000H, se direcciona el elemento 0 del tamao de una
palabra; si ECX contiene 00000001H, se direcciona el
elemento 1 del tamao de una palabra, y as sucesivamente.

La instruccin MOV EAX,[4*EDI] es una instruccin de ndice


escalado que utiliza un registro para acceder a la memoria de
forma directa.
Direccionamiento de ndice escalado
{ Ejemplos de Direccionamiento de ndice escalado

Lenguaje Ensamblador Tamao Operacin


Copia en EAX el contenido tipo doble palabra de la
MOV EAX,[EBX+a*ECX] 32 Bits posicin de memoria del segmento de datos
direccionada por la suma de 4 por ECX mas EBX
MOV [EAX+2*EDI+100H],CX 16 Bits Copia CX en la posicin de memoria del segmento
de datos direccionado por la suma de EAX, 100H y
2 por EDI

MOV AL,[EBP+2*EDI+2] 8 Bits Copia en AL el contenido tipo byte de la posicin


de memoria del segmento de pila direccionada por
la suma de EBP, 2 y 2 por EDI
MOV EAX,ARREGLO[4*ECX] 32 Bits Copia en EAX el contenido tipo doble palabra de la
posicin de memoria del segmento de pila
direccionada por la suma ARREGLO y 4 por ECX
Modos de direccionamiento de
memoria de un programa

Estos modos de direccionamiento, si se utilizan con las


instrucciones JMP (salto) y CALL (llamada), consisten de tres
formas distintas: directo, relativo e indirecto.
Modos de direccionamiento de
memoria de un programa
{ Direccionamiento Directo de memoria de programa

Este modo de direccionamiento es el que utilizaban muchos de


los primeros microprocesadores para todos los saltos y
llamadas. El direccionamiento de memoria de programa
tambin se utiliza en los lenguajes de alto nivel, como las
instrucciones GOTO y GOSUB del lenguaje BASIC.
Modos de direccionamiento de
memoria de un programa
{ Direccionamiento Directo de memoria de programa

Las instrucciones para el desplazamiento directo de memoria


de programa almacenan la direccin con el cdigo e operacin.
{ Direccionamiento Directo de memoria de programa

Cdigo de Compensacin Compensacin Segmento Segmento


Operacin (baja) (alta) (bajo) (alto)

E A 0 0 0 0 0 0 1 0

La figura muestra la instruccin JMP directa intersegmentos y los 4


bytes para almacenar la direccin 1000H.

Un salto intersegmentos es un salto a cualquier posicin de memoria


dentro de todo el sistema de memoria completo.
Modos de direccionamiento de
memoria de un programa
{ Direccionamiento Relativo de memoria de programa

Este modo de direccionamiento no esta disponible en todos los


primeros microprocesadores. El trmino relativo significa
relativo al apuntador de instrucciones (IP).

Las instrucciones JMP y CALL relativas contienes un


desplazamiento de 8 bits o uno de 16 bits, el cual permite una
referencia de memoria hacia adelante o una referencia de
memoria hacia atrs.
{ Direccionamiento Relativo de memoria de programa

Este modo de direccionamiento no esta disponible en todos los


primeros microprocesadores. El trmino relativo significa
relativo al apuntador de instrucciones (IP).

Las instrucciones JMP y CALL relativas contienes un


desplazamiento de 8 bits o uno de 16 bits, el cual permite una
referencia de memoria hacia adelante o una referencia de
memoria hacia atrs.
Modos de direccionamiento de
memoria de un programa
{ Direccionamiento Indirecto de memoria de programa

El microprocesador permite varias formas de direccionamiento


indirecto de memoria de programa para las instrucciones JMP
y CALL.
{ Direccionamiento Indirecto de memoria de programa

Lenguaje Ensamblador Operacin


Salta a la posicion del segemento de codigo actual
JMP AX direccionada por el contenido de AX

JMP CX Salta a la posicion del segemento de codigo actual


direccionada por el contenido de CX

JMP NEAR PTR[BR] Salta a la posicion del segemento de codigo actual


direccionada por el contenido de la posicion del
segmento de datos direccionada por BX
JMP TABL[BX] Salta a la posicion del segemento de codigo actual
direccionada por el contenido de la posicion de
memoria del segmento dtos direccionada por
TABLA mas BX
Bibliografa:
Microprocesadores Intel. Sptima Edicin.
Barry B. Brey.
GRACIAS