Está en la página 1de 29

Modos de Direccionamiento

Conjunto de Instrucciones 386


– Conjunto de Instrucciones Básico ≡ conjunto de instrucciones
del 8086/8088
– Conjunto de Instrucciones Extendido : 80286; algunas
instrucciones nuevas y modos de direccionamiento adicionales
– Conjunto de instrucciones específico del 80386:

80286 80386
Protected Mode
8086/8088 System control System control
Instruction set Instruction set

Basic Basic + Basic +


Instruction Extended Extended+
80386 specific
Set Instruction Instruction
Set Set

Real Mode
Conjunto de Instrucciones 386
• Modos de Direccionamiento de Datos del 80386DX
– Modos de direccionamiento: métodos para especificar operandos
• Operandos : en registro, dentro de instrucción, memoria,
puertos E/S
– * Control de puertos : direccionamiento directo, indirecto
– Modos de Direccionamiento disponibles:
Direccionamiento por Registro : registro
Direccionamiento inmediato: dentro de instrucción
Direccionamiento directo
Direccionamiento indirecto por Registro
Direccionamiento Base
Direccionamiento Indexado
MEM o E/S
Direccionamiento Indexado Base
Modos de Direccionamiento
– Direccionamiento por registro
• Puede accesarse por bytes, palabras, palabras dobles.
• MOV AX, BX
• Byte: AL, AH, BL, BH, CL, CH, DL, DH
Palabra: AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, SS,
ES, FS, GS
Palabra doble: EAX, EBX, ECX, EDX, ESP, EBP, ESI,
EDI

– Direccionamiento Inmediato
• Un operando es parte de la instrucción
• MOV AL, 15H
• 8 bits, 16 bits, y 32 bits
Direccionamiento por Registro
Dirección Contenido
Instrucción
80386 0000 IP
Memoria
uP
0100 CS 01000 89 MOV AX, BX
DS 01001 D8
SS 01002 XX
ES
FS
GS

XXXX
ABCD AX
ABCD BX
CX
DX

SP
BP
SI
DI
Direccionamiento Inmediato
Contenido
Dirección
de Instrucción
80386 0000 IP Memora
MPU
0100 CS 01000 B0 MOV AL, 15H
DS 01001 15
SS 01002 XX
ES
FS
GS

15
XX AX
BX
CX
DX

SP
BP
SI
DI
Direccionamiento Directo

• Operandos de 16 y 32 bits en memoria


– Dirección del dato = Segmento : EA (dirección efectiva)
• Dirección Segmento Base : localidad inicial del
segmento
• EA : desplazamiento (offset)del operando desde el
inicio del segmento
EA = Base + Index + Desplazamiento
Base = BX or BP, Index = SI o DI,
desplazamiento = 8-bits o 16-bits
Direccionamiento Directo
– Ejemplo
• PA = Segmento Base*16 + EA del dato
• Ejemplo: MOV BX, [1234H]
01000 8B MOV BX, [1234H]
01001 0E
0000 IP 01002 34
01003 12
0100 CS 01004 XX
0200 DS
SS
ES
FS
GS
AX
XXXX BX
CX 03234 ED
DX 03235 BE
SP
BP
SI BEED
DI
Direccionamiento Indirecto por Registro
– Ejemplo
• Segmento Base : Dirección Indirecta {BX,BP,SI,DI}
• Ejemplo : MOV AX, [SI]
01000 8B
01001 04
MOV AX,[SI]
0000 IP 01002 XX
01003 XX
0100 CS 01004 XX
0200 DS
SS
ES
FS
GS
XXXX AX
BX
CX 03234 ED
DX 03235 BE
SP
BP
1234 SI BEED
DI
Direccionamiento Base
– PA = Segmento*16 + {BX o BP} + {desplazamiento de 8-bit o 16-bit}
– Registro Base : comienzo de la estructura de datos
– Example: MOV [BX]+1234H, AL 88 MOV [BX]+1234H, AL
01000
01001 07
0000 IP 01002 34
01003 12
0100 CS 01004 XX
0200 DS
SS
Arreglo de
ES
FS datos
GS
ED AX
1000 BX Desplazamiento Elemento n-1
CX
DX 04234
04235
SP +
BP
1234 SI Elemento 1
Registro Base
DI Elemento 0
Direccionamiento Indexado
– PA = Segmento*16 + {SI, DI} + {desplazamiento 8-bit o 16-
bit}
• Desplazamiento : dirección inicial de un arreglo
• Indice: selecciona elemento específico en el arreglo
• Ejemplo: MOV AL, [SI]+1234H
01000 8A MOV AL, [SI]+1234H
01001 44
0000 IP 01002 34
01003 12
0100 CS 01004 XX Arreglo de datos
0200 DS
SS
ES Element n-1
FS Indice
GS
.
XX AX +
1000 BX .
CX 05234 BE . 1
Element
DX 05235 Desplazamiento Element 0
SP
BP
2000 SI
DI
Direccionamiento Base+ Indice
– Características:
• PA= Segmento*16 +{BX, BP}+{SI,DI}+{desplazamiento
8-bit o 16-bit}
• Usado para accesar estructuras complejas de datos
• Ver figura en la página siguiente
• El desplazamiento (valor fijo) ubica el arreglo en
memoria
• El registro base especifica la coordenada m
• El registro índice especifica la coordenada n
• Ejemplo: MOV AH, [BX]+[SI]+1234H
opcode : 8A 44 34 12
Direccionamiento Base+Indice de un
arreglo de dos dimensiones
• Arreglo de datos de dos dimensiones.
Elemento (m, n)
.
Registro índice .
.
Elemento (m, 1)
Elemento (m, 0
Elemento (l, n)
+ .
.
.
Elemento (1, 1)
Elemento (1, 0)
Registro base Elemento (0, n)
.
.
+
.
Elemento (0, 1)
Desplazamiento Elemento (0, 0)
Ejemplo: MOV AH, [BX]+[SI]+1234H
ANTES Dirección Contenido Instrucción
01000 8A M0V AH,[BX][SI]+1234H
01001 A0

0000 IP 01002 34
01003 12
CS
0100 01004 xx
0200 DS

02000 xx
02001 xx

xx xx AX .
1000 BX .
.
.
.
.
.
2000 SI
.
06234 BE Operando Fuente
Ejemplo: MOV AH, [BX]+[SI]+1234H
DESPUES Dirección Contenido Instrucción
01000 8A M0V AH,[BX][SI]+1234H
01001 20

0004 IP 01002 34
01003 12
CS
0100 01004 xx
0200 DS

02000 xx
02001 xx

BE xx AX .
1000 BX .
.
.
.
.
.
2000 SI
.
06234 BE Operando Fuente
Direccionamiento Indice Escalado

– Exclusivo de los microprocesadores 80386 hasta Pentium 4


• Factor de escala afecta a la dirección efectiva solamente
• EA = Registro Base + (Registro Indice x factor de escala) +
desplazamiento
• PA = Segmento Base*16 + EA
AX 
BX  AX 
  
CS   
SS  CX  BX  1
    
 CX   

DS  DX    2 8  bit displacement 
PA    :  
  DX      
ES
   SP  BP   4 32 - bit displacement 
FS  BP    8 

     SI 

GS  SI  DI 
DI   
 
Ejemplos de Direccionamiento
Inmediato
• MOV BL,44
• MOV AX,44H
• MOV SI,0
• MOV CH,100
• MOV AL,’A’
• MOV AX,64H
• MOV CL,11001110B
• MOV EBX,12340000H
• MOV ESI,12
• MOV EAX,100H
Ejemplos de direccionamiento por
Registro
• MOV AL, BL
• MOV CH, CL
• MOV AX, CX
• MOV SP, BP
• MOV DS, AX
• MOV SI, DI
• MOV BX, ES
• MOV ECX, EBX
• MOV ESP, EDX
• MOV ES, DS ;?? NO se permite segmento a segmento
• MOV BL, DX ;?? NO se permite tipos de datos distintos
• MOV CS, AX ;?? NO se permite CS como destino.
Ejemplos de Direccionamiento
Directo
• MOV AL, NUMERO
• MOV AX, ALGO
• MOV EAX, AGUA
• MOV NOTICIAS, AL
• MOV ALLA, AX
• MOV CASA, EAX
• MOV ES:[2000H],AL
• MOV [2000H], AL
• MOV AL, [1234H]
• MOV CX, DATO+5
• MOV TABLA1, AX
• MOV AL, DATO1
Ejemplos de direccionamiento Indirecto por
Registro
• MOV CX, [BX]
• MOV [BP], DL
• MOV [DI], BH
• MOV AL, [EDX]
• MOV ECX, [EBX]
• MOV [DI], [BX] ;?? NO se permite transferencia de
memoria a memoria, excepto con instrucciones que
manejan cadenas de caracteres.
Ejemplos de direccionamiento Base
+Indice
• MOV CX, [BX+DI]
• MOV CH, [BP+SI]
• MOV [BX+SI], SP
• MOV [BP+DI], AH
• MOV CL, [EDX+EDI]
• MOV [EAX+EBX], ECX
Ejemplos de direccionamiento Base +Indice

• Este direccionamiento se usa para accesar los elementos de un arreglo de datos en


memoria. Veamos la siguiente secuencia de instrucciones en lenguaje ensamblador.

ARREGLO DB 16 DUP(?) ;arreglo de 32 bytes en memoria

• MOV BX, OFFSET ARREGLO


• MOV DI, 10H
• MOV AL, [BX+DI]
• MOV DI, 2OH
• MOV [BX+DI], AL
Asuma que el dato en la localidad 10H en ARREGLO es 29H.
Ejemplos de direccionamiento relativo por Registro

• MOV AX, [DI+100H]


• MOV ARREGLO [SI], BL
• MOV LISTA [SI+2], CL
• MOV DI, TABLA [BX]
• MOV DI,[EAX+10H]
• MOV TABLA1 [EBX], EAX
;A continuación tenemos un ejemplo del uso del direccionamiento relativo por registro

• MOV DI, 10H


• MOV AL, ARREGLO [DI]
• MOV DI, 20H
• MOV ARREGLO [DI], AL
EJERCICIO 1
• Asuma que DS=1512H. Encontrar la
direccion fisica y su contenido de la
localidad de memoria despues de
ejecutar:

MOV AL,99H
MOV [3518],AL
EJERCICIO 2
• Asuma que DS=1120H, SI=2498H, y
AX=17FEH. Muestre graficamente el
contenido de las localidades de memoria
despues de ejecutar:

MOV [SI],AX
EJERCICIO 3
• Asuma que DS=4500, SS=2000, BX=2100,
SI=1486, DI=8500, BP=7814, y AX=2512.
Muestre las direcciones físicas donde se
almacena el contenido de AX en cada uno de
los casos siguientes:
1. MOV [BX]+20,AX
2. MOV [SI]+10,AX
3. MOV [DI]+4,AX
4. MOV [BP]+12,AX
• NOTA: Todos los valores son hexadecimales.
EJERCICIO 4
• De las instrucciones siguientes cuantas no codifican en
lenguaje ensamblador, dé la razón por qué NO.
• MOV AX,27
• MOV AL,97F
• MOV DS,9BF2
• MOV CX,397
• MOV SI,9516
• MOV CS,3490
• MOV DS,BX
• MOV BX,CS
• MOV CS,BX
• MOV CS,BH
• MOV AX,12345
• MOV CS,DS
Ejemplos de instrucciones con
direccionamiento relativo base+índice
• MOV DH, [BX+DI+20H]
• MOV AX, ARCHIVO [BX+DI]
• MOV LISTA [BP+DI], CL
• MOV LISTA1 [BP+SI+4], DH
• MOV EAX, ARCHIVO1 [EBX+ECX+]
;Considere el siguiente segmento de programa. Asuma que un archivo de muchos arreglos de
datos existe en memoria, y que cada arreglo contiene muchos elementos.

• MOV BX, OFFSET ARREGLOA


• MOV DI, 0
• MOV AL, ARCHIVO [BX+DI]
• MOV BX, OFFSET ARREGLOC
• MOV DI,2
• MOV ARCHIVO [BX+DI], AL
Ejemplos de direccionamiento Índice
escalado
• MOV EAX, [EBX+4*ECX]
• MOV [EAX+2*EBX], CX
• MOV AX, [EBP+2*EDI+100H]
• MOV LISTA [EAX+2*EBX+10H],DX

• Considere el ejemplo siguiente:


MOV EBX, OFFSET LISTA
MOV ECX, 2
MOV AX,[EBX+2*ECX]
MOV ECX,4
MOV [EBX+2*ECX], AX
MOV ECX,7
MOV [EBX+2*ECX], AX
• Nota: LISTA es una variable tipo doble palabra.

También podría gustarte