Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MODOS DE DIRECCIONAMIENTO
3.1. Introduccin
El campo de operacin de una instruccin especica la operacin que se debe realizar. sta
debe ser ejecutada sobre algunos datos almacenados en registros del computador o en palabras
de memoria, es decir, sobre los operandos. El modo de direccionamiento especica la forma
de interpretar la informacin contenida en cada campo de operando para localizar, en base a
esta informacin, el operando.
Los ordenadores utilizan tcnicas de direccionamiento con los siguientes nes:
Dar versatilidad de programacin al usuario proporcionando facilidades tales como ndices, direccionamientos indirectos, etc., esta versatilidad nos servir para manejar estructuras de datos complejas como vectores, matrices, etc.
Reducir el nmero de bits del campo de operando.
Al usuario que tiene poca experiencia, la variedad de modos de direccionamiento en un
procesador le puede parecer excesivamente complicada. Sin embargo, la disponibilidad de diferentes esquemas de direccionamiento le da al programador experimentado exibilidad para
escribir programas que son ms ecientes en cuanto a nmero de instrucciones y tiempo de
ejecucin.
Es tal la importancia de los modos de direccionamiento que la potencia de una mquina se
mide tanto por su repertorio de instrucciones como por la variedad de modos de direccionamiento que es capaz de admitir.
Denicin: Los modos de direccionamiento de un procesador son las diferentes formas de
transformacin del campo de operando de la instruccin en la direccin del operando.
En esta denicin el trmino direccin debe interpretarse en su sentido ms general de
localizacin del operando, en cualquier lugar, y no en el sentido ms estricto de direccin de
memoria.
59
60
Modos de direccionamiento
Registro
Implicito
Pila
Inmediato
Registro
Absoluto
Memoria
Contador de programa
Apuntador de pila
Directo
ndice
Autoincremental
Autoindexados
Autodecremental
61
Los modos de direccionamiento podran clasicarse en propios e impropios: en los direccionamientos propios el operando est localizado en una direccin concreta de memoria,
mientras que en los impropios en otros lugares tales como los registros del procesador, etc. Entre los modos de direccionamiento descritos en los prrafos siguientes, los tres primeros pueden
considerarse impropios, mientras que los dems son direccionamientos propios.
62
Modos de direccionamiento
ms lentos, un ejemplo muy tpico del uso de este direccionamiento son los ndices de
los bucles.
El nmero de bits necesarios para especicar un registro es mucho ms pequeo que el necesario para especicar una direccin de memoria, esto es debido a que el nmero de
registros del procesador es muy pequeo comparado con el nmero de direcciones de
memoria. Sin embargo, hay que tener en cuenta que en los ordenadores modernos el nmero de registros ha aumentado considerablemente.
63
registro con el campo de operando obtendremos la direccin efectiva. Hay varios direccionamientos basados en esta tcnica que reciben diferentes nombres dependiendo de cul sea el
registro en el que radica la direccin tomada como referencia. Todos ellos podran catalogarse
como direccionamientos relativos a un registro.
El direccionamiento denominado habitualmente relativo toma como valor de referencia el
registro contador de programa. Cuando se usa este modo de direccionamiento, el campo de
operando consiste en un nmero (normalmente con signo) que expresa la diferencia entre la
direccin del dato y la direccin siguiente a la instruccin en curso (contenida en el contador de
programa). Si el campo de operando, llamado en este caso desplazamiento u offset, es positivo
el operando residir en una direccin posterior a la de la instruccin y si es negativo, en una
direccin anterior.
Este modo de direccionamiento es usado muy frecuentemente en programas cuyo cdigo
deba ser independiente de la posicin de memoria donde estn situados (programas relocalizables) ya que el desplazamiento es independiente de la localizacin del programa. Tambin se
usa con mucha frecuencia en instrucciones de bifurcacin.
Los apartados siguientes se reeren a diferentes versiones de direccionamientos relativos
a registros.
64
Modos de direccionamiento
matrices en bucles ya que, si se quieren direccionar elementos consecutivos del vector o matriz,
basta mantener en el desplazamiento la direccin del primer elemento e ir incrementando el
registro ndice. Tambin sirve para acceder de forma relativa a elementos de vectores cercanos
a uno dado, para ello, se carga la direccin del elemento de referencia en el registro ndice y
despus se accede mediante direccionamiento indexado, con el desplazamiento adecuado, al anterior, al siguiente, etc., esto mismo tambin es aplicable a pilas, en que, algunas veces, hay que
acceder a datos cercanos, por encima o por debajo, al dato sealado por algn apuntador. Una
consecuencia de todo esto es una modalidad de direccionamiento indexado de que disponen
algunos ordenadores, denominada autoindexacin, que hace que el registro ndice sea incrementado o decrementado en el tamao del operando antes o despus de acceder al mismo. Los
ordenadores que poseen autoindexacin incorporan los modos de direccionamiento descritos
en los dos apartados siguientes. En algunos ordenadores existen variantes del direccionamiento
indexado en que se obtiene la direccin del operando sumando el contenido de varios registros
con el desplazamiento, esto puede servir para especicar el comienzo de un vector mediante un
desplazamiento respecto a un registro y el elemento del vector mediante un registro ndice.
Instruccin
Registro
65
Memoria
Operando
Operando
Direccin
Pila
SP
Inmediato
Operando
Registro
Operando
Registro
Direccin
Directo o absoluto
Direccin
Operando
Indirecto
Direccin
Direccin
Operando
Operando
Relativo
Desplazamiento
Operando
PC
Direccin
Base y
desplazamiento
Indexado
Registro
Direccin
Operando
Desplazamiento
Operando
Desplazamiento
Registro
Direccin
Autoindexados:
Autoincremental o
post incremental
Aotodecremental o
predecremental
Registro
Longitud
Registro
Direccin
Operando
+
Direccin
Operando
Longitud
66
Modos de direccionamiento
UTILIDADES
Operaciones con constantes
Variables locales de procedimientos no recursivos
Variables referenciadas a travs de apuntadores
Direcciones de sistema
Variables globales
Acceso a vectores, matrices y cadenas
Desapilar parmetros de procedimientos
Recorrido de vectores y cadenas
Apilar parmetros de procedimientos
Recorrido de vectores y cadenas hacia atrs
Nota:
En el captulo siguiente se matizarn los conceptos de variables locales y globales.
Tambin se analizar la forma de almacenamiento de las variables locales de
procedimientos recursivos.
3.4.1. PDP-11
Los modos de direccionamiento del PDP-11 (DEC, 1983) son bastante renados y muy
potentes. De los formatos de instruccin de esta mquina, vistos en el captulo anterior, se
desprende que cada operando se especica mediante 6 bits, 3 que indican el modo de direccionamiento otros 3 que indican el registro sobre el que este modo acta. El PDP-11 tendr, por
tanto, 8 modos de direccionamiento, aunque, como veremos, en la prctica tiene algunos ms.
0: Direccionamiento directo por registro Rn
El operando se encuentra en el registro Rn especicado.
1: Direccionamiento indirecto por registro (Rn) o @Rn
La direccin del operando se encuentra en el registro Rn.
2: Direccionamiento autoincremental (Rn)+
La direccin del operando se encuentra en el registro Rn y ste se incrementa despus
del acceso en el tamao del operando en bytes. Los incrementos posibles pueden ser dos:
1 si la operacin se realiza sobre un byte o 2 si la operacin se realiza sobre una palabra.
3: Direccionamiento autoincremental indirecto @(Rn)+
El registro Rn especicado contiene un apuntador que seala la direccin del operando.
El contenido del registro se incrementa despus del acceso. Dado que, en este modo, el
registro siempre apunta a la direccin del operando y las direcciones en el PDP-11 ocupan
una palabra, el registro se incrementa en 2 cualquiera que sea el tamao del operando. Este
modo agrega una indireccin al modo de direccionamiento anterior y se usa para trabajar
con vectores de apuntadores.
4: Direccionamiento autodecremental -(Rn)
El registro Rn se decrementa en la longitud del operando (1 si el operando es un byte o
67
2 si es una palabra). El contenido del registro despus del decremento es la direccin del
operando.
5: Direccionamiento autodecremental indirecto @-(Rn)
El registro Rn se decrementa en 2 (que es la longitud de las direcciones en un PDP-11)
y el resultado de esta operacin es un apuntador que seala la direccin del operando.
Este modo agrega una indireccin al direccionamiento anterior y se usa para trabajar con
vectores de apuntadores en sentido descendente.
6: Direccionamiento indexado X (Rn)
La direccin del operando se obtiene sumando el desplazamiento (u offset) X al contenido del registro Rn (que no se modica). El desplazamiento se codica en la palabra
siguiente a la instruccin.
7: Direccionamiento indexado indirecto @X (Rn)
Sumando el contenido del registro Rn con el desplazamiento obtenemos la localizacin
de la direccin del operando. El desplazamiento tambin se codica en la palabra siguiente a la instruccin.
Modos de direccionamiento sobre el contador de programa:
En los direccionamientos anteriormente enumerados puede echarse en falta direccionamientos como el inmediato, directo, etc; estos direccionamientos no existen como tales en el cdigo
mquina del PDP-11, aunque, por supuesto, existen en el lenguaje ensamblador. Esto es as debido a que los modos citados se reducen a algunos de los anteriores cuando se aplican sobre el
contador de programa (registro 7). Los modos aludidos son los siguientes:
Direccionamiento inmediato #Constante
Este modo es el autoincremental sobre el contador de programa debido a que el operando
inmediato se localiza en la palabra siguiente a la instruccin. Este truco, que ahorra un
cdigo de direccionamiento, es posible debido a que el contador de programa es tratado
como uno de los registros de uso general.
Direccionamiento absoluto @#Direccin
Este direccionamiento es el sustituto del direccionamiento directo: el operando se encuentra en la direccin especicada. Corresponde al direccionamiento indirecto autoincremental sobre el contador de programa. Este modo de direccionamiento se usa exclusivamente
para direcciones que haya que especicar fsicamente (direcciones de sistema) ya que si
se utiliza para otros nes (por ejemplo, variables del programa) se provoca que el cdigo sea dependiente de la posicin y esto diculta la relocalizacin de los programas ya
que cada vez que el programa se instale en memoria en una direccin diferente habra
que cambiar todas las variables que estuvieran direccionadas mediante direccionamiento
absoluto.
Direccionamiento relativo Direccin
Es el sustituto del direccionamiento directo pero genera cdigo independiente de la posicin. En realidad se trata de direccionamiento indexado sobre el contador de programa.
Este modo se utiliza para referirse a las direcciones (variables) del programa ya que lo
68
Modos de direccionamiento
3.4.2. VAX
Los modos de direccionamiento del VAX (DEC, 1986, Baase, 1983) estn claramente inspirados en los del PDP-11 aunque con algunas novedades bastante interesantes. De los formatos
de instruccin, vistos en el captulo anterior (apartado 2.6.2), se desprende que la especicacin
de cada operando se realiza mediante 8 bits, 4 que especican el modo de direccionamiento y
otros 4 que especican el registro; por tanto la mquina tendr 16 modos de direccionamiento,
aunque, como veremos, hay modos que, segn las circunstancias, pueden tener varias codicaciones diferentes y tambin, al igual que en el PDP-11, hay modos que, cuando se aplican
sobre el contador de programa, reciben nombres diferentes y, en lenguaje ensamblador, tienen
simbologa distinta.
5: Direccionamiento directo por registro Rn
El operando se encuentra en el registro Rn especicado si tiene un tamao de 32 bits, si
el tamao del operando es inferior se toma la parte ms baja. Si el operando tiene 64 bits
(quadword) el operando lo forman los contenidos de los registros Rn+1 y Rn tomados
como uno solo.
6: Direccionamiento indirecto por registro (Rn) o @Rn
La direccin del operando se encuentra en el registro Rn.
7: Direccionamiento autodecremental -(Rn)
El registro Rn se decrementa en la longitud del operando en bytes. Las longitudes posibles de los operandos a estos efectos van de 1 (byte) a 16 (octaword o nmeros en punto
otante). El contenido del registro despus de la operacin es la direccin del operando.
8: Direccionamiento autoincremental (Rn)+
La direccin del operando se encuentra en el registro y ste se incrementa despus del
acceso en el tamao del operando en bytes (de 1 a 16).
9: Direccionamiento autoincremental indirecto @(Rn)+
El registro contiene un apuntador que seala a la direccin del operando. El contenido del
registro se incrementa despus del acceso. Dado que, en este modo, el registro siempre
apunta a la direccin del operando, y sta, en el VAX, ocupa siempre una doble palabra
independientemente de la longitud del dato al que apunte, el registro se incrementa en
4 cualquiera que sea el tamao del operando. Este modo agrega una textitindireccin al
direccionamiento anterior y se usa para trabajar con vectores de apuntadores.
69
70
Modos de direccionamiento
71
Fig. 3.5. Formato de la palabra adicional del modo indexado completo del MC68000.
72
Modos de direccionamiento
(a)
(b)
Fig. 3.6. Formato de la palabra adicional de las variantes del modo indexado completo del MC68020.
donde S = W o L y Escala = 1, 2, 4 u 8.
(Se utiliza el formato de la gura 3.6 (a)) Debe observarse que este direccionamiento
es compatible con el indexado completo del MC68000 haciendo Escala = 1.
Indexado por factor de escala y desplazamiento largo (db,An,Xi.SEscala) En este modo el clculo de la direccin efectiva se realiza as:
A = db + An + Xi.S Escala
La diferencia entre este direccionamiento y el anterior radica en que el desplazamiento db (llamado desplazamiento base) puede tener 16 o 32 bits y que los tres
parmetros son opcionales, por lo que este modo puede adoptar mltiples formas
como, por ejemplo, direccionamiento indirecto por registro de datos. Se utiliza el
formato de la gura 3.6(b) codicndose el desplazamiento db en la(s) palabra(s)
siguiente(s).
Indirecto postindexado ([db,An],Xi.S Escala, do) La direccin efectiva en este
modo se calcula de la siguiente forma:
A = [db + An] + Xi.S Escala + do
En esta expresin los corchetes representan un acceso a memoria adicional, es decir, una indireccin ms; por otra parte, do (desplazamiento exterior) representa un
73
74
Modos de direccionamiento
r/m
000
001
010
011
100
101
110
111
00
(BX+SI)
(BX+DI)
(BP+SI)
(BP+DI)
(SI)
(DI)
Directo
(BX)
mod
01
10
(BX+SI+d8 ) (BX+SI+d16 )
(BX+DI+d8 ) (BX+DI+d16 )
(BP+SI+d8 ) (BP+SI+d16 )
(BP+DI+d8 ) (BP+DI+d16 )
(SI+d8 )
(SI+d16 )
(DI+d8 )
(DI+d16 )
(BP+d8 )
(BP+d16 )
(BX+d8 )
(BX+d16 )
11
AX o AL
CX o CL
DX o DL
BX o BL
SP o AH
BP o CH
SI o DH
DI o BH
75
r/m
000
001
010
011
100
101
110
111
00
(EAX)
(ECX)
(EDX)
(EBX)
SIB
Directo
(ESI)
(EDI)
mod
01
10
(EAX+d8 ) (EAX+d32 )
(ECX+d8 ) (ECX+d32 )
(EDX+d8 ) (EDX+d32 )
(EBX+d8 ) (EBX+d32 )
SIB y d8
SIB y d32
(EBP+d8 ) (EBP+d32 )
(ESI+d8 ) (ESI+d32 )
(EDI+d8 ) (EDI+d32 )
11
EAX o AL
ECX o CL
EDX o DL
EBX o BL
ESP o AH
EBP o CH
ESI o DH
EDI o BH
por el factor de escala (que puede ser 1, 2, 4 u 8), se le suma el registro base y en algunas
ocasiones (ver tabla 3.3) un desplazamiento de 8 o 32 bits. El modo SIB es til para direccionar elementos de vectores de longitudes diferentes en bucles. Es una alternativa a los modos
autoindexados que esta mquina no soporta.
76
Modos de direccionamiento
Bibliografa y referencias
BAASE , S. 1983. VAX-11 Assembly Language Programming. Prentice-Hall.
C RAWFORD , J, & G ELSINGER , P. 1987. Programming the 80386 (Featuring 80386/80387). Sybex.
Existe traduccin al castellano: Programacin del 80386/387, Anaya Multimedia, 1991.
D E B LASI , M. 1990. Computer Architecture. Addison Wesley.
DEC. 1983. PDP-11 Architecture Handbook. Digital Equipment Corporation.
DEC. 1986. VAX Architecture Handbook. Digital Equipment Corporation.
H ARMAN , T.L. 1989. The Motorola MC68020 and MC68030 Microprocessors, Assembly Language,
Interfacing and Design. Vol. II. Prentice-Hall International.
TANENBAUM , A.S. 2006. Structured Computer Organization. 5 edn. Prentice-Hall International.
Existe traduccin al castellano de la edicin anterior: Organizacin de computadores: un enfoque estructurado, 4a edicin, Prentice-Hall Hispanoamericana, 2000.
CUESTIONES Y PROBLEMAS
Nota importante: Para la resolucin de muchos problemas de este captulo y del siguiente es
necesario consultar los apndices.
3.1 Traducir a cdigo mquina las siguientes instrucciones de lenguaje ensamblador del PDP-11:
a) ADD R2,R3 b) INC (R5)+ c) CLR -(SP) d) ADD (R2),R1
e) CLR 5(R3) f) MOV #4,R1 g) INCB A
h) MOV #A, A
Se puede suponer, cuando sea necesario, que cada instruccin est localizada en la direccin 077420(8 y que el smbolo A representa a la direccin 063246(8 .
3.2 Poner cada una de las siguientes instrucciones del VAX en cdigo mquina:
a) INCW (R5)+
b) MOVL (R10)+, -(SP)
c) BICL3 #18, (R4)+, -(R6) d) MOVB #4, (R7)
e) ADDL3 R8, R9, 5(R4)[R3] f) SUBW2 4(R6), 2500(R7)[R4]
3.3 Traducir las siguientes instrucciones de VAX a cdigo mquina, suponiendo que el smbolo A representa a la direccin 0034AAF8H, que el smbolo B representa a la constante
258(10 y que cada instruccin se encuentra en la direccin 0034AB70H (las instrucciones
son independientes unas de otras):
a) CLRW A
b) MOVL #B, A
c) MOVB 4(R1), A
d) SUBW2 A, 5(R2)[R4]
e) ADDL3 (R5)+, #4, A f) MULL3 #B, A, A[R3]
Cuestiones y problemas
77
3.4 Describir los efectos de cada una de las instrucciones de los problemas 3.1, 3.2 y 3.3.
3.5 Calcular la localizacin de los operandos de las siguientes instrucciones correspondientes
a la arquitectura SPARC (si es necesario, suponer ciertos valores de los contenidos de los
registros):
a) or %l0, %g1, %o1
b) stb %o0,[ %i0+ %l1]
c) ldub [ %i0 + 40], %o0 d) subcc %o0, 10, %g0
3.6 Traducir a lenguaje mquina las instrucciones del problema anterior
3.7 Sean las siguientes instrucciones correspondientes a un VAX (las instrucciones son independientes unas de otras):
3.9 Analizar los efectos de las siguientes instrucciones correspondientes a un MC68020, suponiendo que los registros A5, D2 y D3 contienen respectivamente los valores 08F9A204H,
A0BAC902H y FAB9A2F0H. Suponer valores arbitrarios en las direcciones de memoria
afectadas:
a) ADDQ.L #1, D3
b) SUBQ.W #5, D3
c) AND.B 8(A5), D3
d) EOR.L D2, 4(A5,D3)
e) LEA 8(A5,D3.L), A2 f) CLR.W 4(A5,D3*4)
g) NEG.L -(A5)
h) ADDI.W #400, (A5)+
3.10 Cules de las instrucciones del problema anterior no se podran ejecutar en un MC68000?
3.11 Traducir a cdigo mquina cada una de las instrucciones de los problemas 3.8 y 3.9.
78
Modos de direccionamiento
Registros
Memoria
R1 017430
R2 017432
Direccin Contenido
017426
003025
017430
004023
017432
003015
017434
001430
Fig. 3.9.
3.12 Estudiar la compatibilidad de los direccionamientos de las siguientes instrucciones correspondientes a un MC68000:
a) ADD.B D2, (A3)+ b) ADDI.W #5, A3 c) CLR.L (A3)+
d) ASL.L #4, (A2) e) LEA D2, A3
f) ROR.W D3,D4
3.13 Sea el fragmento siguiente de programa de un PDP-11:
MOV #A, R0
ADD #4, (R0)+
Suponiendo que la direccin de memoria representada por A es la 065702(8 y que, antes
de la ejecucin de esas instrucciones, contiene 010234(8 :
a) Qu contiene A despus? Qu contiene R0?
b) Codicar el fragmento de programa en lenguaje mquina.
3.14 Supongamos un PDP-11 cuya situacin es la mostrada en la gura 3.9. Qu habr cambiado despus de ejecutarse la instruccin
SUBB2 A, A
del VAX suponiendo que reside a partir de la direccin 0A0D02D9H y que la etiqueta A
representa a la direccin 0A0D02C0H.
Cuestiones y problemas
79
COMIENZO: .......
.......
MOV #CADENA1, R4
MOV #CADENA2, R5
MOV N, R1
LOOP:
CMPB (R4)+, (R5)+
BNE FIN
SOB R1, LOOP
MOV #177777, R0
BR COMIENZO
FIN:
CLR R0
BR COMIENZO
Fig. 3.10.
80
Modos de direccionamiento
Direccin Contenido
004352
012703
004354
003000
004356
012704
004360
003500
004362
016701
004364
176356
004366
121327
004370
000060
004372
002413
004374
121327
004376
000071
004400
003010
004402
112367
004404
176334
004406
162767
004410
000060
004412
176326
004414
016724
004416
176322
004420
000401
004422
005203
004424
077120
004426
000000
Fig. 3.11.
Registros
Memoria
R6 00404F08
R7 A034378A
Direccin Contenido
404F08
A4
404F09
C2
404F0A
FB
404F0B
77
Fig. 3.12.
Cuestiones y problemas
Versin A
CLR
MOV
C: ADD
SUB
BGE
MOV
81
Versin B
R0
M, R1
X(R1), R0
#2, R1
C
R0, R
CLR
MOV
MOV
C: ADD
SOB
MOV
R0
#X, R1
N, R2
(R1)+, R0
R2, C
R0, R
Fig. 3.13.
Direccin Contenido
010406
005003
010410
012701
010412
004620
010414
016704
010416
177674
010420
010321
010422
005203
010424
077403
010426
000000
A
Direccin Contenido
010406
005003
010410
016704
010412
177700
010414
010363
010416
004620
010420
005203
010422
077404
010424
000000
010426
000000
B
Fig. 3.14.
82
Modos de direccionamiento
A:
.ASCII /ESTO ES UNA CADENA/
L1=.-A
B:
.ASCII /ESTO ES OTRA CADENA/
L2=.-B
C:
.WORD 0
.......
.......
D:
CMP #L1,#L2
BLT E
MOV #L2,R3
BR F
E:
MOV #L1,R3
F:
MOV #A,R0
MOV #B,R1
MOV R0,R2
G:
CMPB (R0)+, (R1)+
BEQ H
SUB R2,R0
MOV R0,C
HALT
H:
SOB R3,G
CLR C
HALT
Fig. 3.15.