You are on page 1of 13

2.4.

Modos de direccionamiento (Última modificación el 13/03/07)


Distintas formas que tiene la arquitectura para especificar los
operandos.

Objetivos:
- Referenciar un rango elevado de posiciones de memoria principal
(número de bits para el direccionamiento limitado).
- Dar soporte a las estructuras de datos de alto nivel.

Puede ser:
- Para datos, sobre los que opera la instrucción.
- Para instrucciones, especifica la dirección de la siguiente
instrucción a ejecutar (en instrucciones de control).

Veremos:
- Aspectos del almacenamiento de datos en memoria: alineación y
orden de los bytes.
- Los distintos modos de direccionamiento.
1

2.4.1. Necesidades de direccionamiento

Dónde puede estar un operando:


- En la propia instrucción.
- En un registro.
- En memoria.

2
A simple vista, lo lógico sería que en la propia instrucción se
especificase el operando, su dirección en memoria o el registro que lo
contiene.

No siempre lo más indicado por las siguientes razones:

- Ahorro de espacio: direccionamientos indirectos,


base+desplazamiento e indexado, ocupan menos bits que una
dirección.

- Código reubicable: con los direccionamientos relativos a una


dirección base (almacenada en un registro).

- Estructuras de datos: direccionamientos relativos a la dirección


base (en un registro) de la tabla, con un desplazamiento (en un
registro o una constante), direccionamientos auto-incremento/
decremento y escalado o índice.
3

2.4.2. Interpretación de las direcciones de memoria

¿Qué objeto es accedido dada una dirección y una longitud?

Dos convenios para ordenar en memoria los bytes de un objeto


multibyte:

- Little endian: el byte en la dirección menos significativa es el del


extremo menos significativo.

- Big endian: el byte en la dirección menos significativa es el del


extremo más significativo.

4
Convenios para clasificar los bytes de una palabra:
- Little Endian: La dirección de un dato es la dirección de la parte
menos significativa del dato
- Big Endian: La dirección de un dato es la dirección de la parte más
significativa del dato

Aspecto importante cuando se intercambia información entre distintas


máquinas

Alineación de los datos en memoria

Algunas arquitecturas exigen que los objetos mayores de un byte estén


alineados en memoria.

Definición: un acceso a un objeto de tamaño t bytes en el byte de


dirección D se alinea si D mod t = 0 (mod: resto de la división D/t).

Es decir, la dirección del objeto debe ser múltiplo de su tamaño en


bytes.

6
El alineamiento permite simplificar los accesos a memoria: hardware
más sencillo y la misma velocidad de acceso para cualquier palabra en
memoria.
Ejemplo ‘little-endian’:

Ejemplo: doble palabra alineada y no alineada

8
2.4.3. Descripción de los distintos modos de direccionamiento

Para especificar algunos modos de direccionamiento usaremos la


siguiente notación:

A = Especificación de una dirección de memoria (Address).

R = Especificación de un registro (Register).

EA = Dirección real del operando en memoria (Effective address).

(X) = Contenido de la posición de memoria X o del registro X.

10
(1) Direccionamiento por registro

El campo de dirección especifica un registro donde está el operando.

OPERANDO = (R)
n bits del campo de dirección necesarios para referenciar 2n registros

Ventajas: campo de direcciones pequeño y no hay accesos a memoria.


Desventaja: espacio de posiciones limitado.
Ejemplo: add r4, r3 equivale a r4 = r4 + r3
11

(2) Direccionamiento inmediato

El operando está en la propia instrucción

OPERANDO = Operand

Para definir constantes cortas

Ejemplo: add r4, #5 equivale a r4 = r4 + 5


12
Número en complemento a 2, se hace extensión del signo al cargarlo
en un registro.

Ventaja: una vez captada la instrucción, no se necesitan más


referencias a memoria.

Desventaja: pocos bits para codificar el dato.

VAX permite distintos tamaños para operandos inmediatos: 6, 8, 16,


32 y 64 bits.

MIPS solo permite 16 bits.

13

(3) Direccionamiento directo

El campo de dirección contiene la dirección efectiva del operando.

EA = A

Muy sencillo, usada en las primeras computadoras.


Desventaja:limitación del rango de direcciones por el tamaño del campo.
Ejemplo: add r1, (100) equivale a r1 = r1 + M[100]
14
Direccionamiento indirecto (por memoria o por registro)
Solución a la limitación del direccionamiento directo.

(4) Direccionamiento indirecto por registro


Se especifica un registro donde está la dirección del operando.

EA = (R)
Supera la limitación del nº de bits para especificar la dirección y un solo
acceso a memoria para obtener el operando.

Ejemplo: add r2, (r5) equivale a r2 = r2 + M[r5]


15

(5) Direccionamiento indirecto por memoria

El campo de direcciones contiene la dirección de una palabra donde


está la dirección del operando.

EA = (A)
Desventaja: dos accesos a memoria, para obtener el operando.

Ejemplo: add r1, @(100) equivale a r1 = r1 + M[M[100]]


16
(6) Direccionamiento base + desplazamiento
Combina posibilidades del directo (facilidad de uso) y del indirecto por
registro (menos bits para especificar dirección).

Habrá que especificar un registro y un valor. La suma del contenido del


registro y el valor es la dirección del operando.

EA = (R) + A
Ejemplo: add r4,28(r1) equivale a r4 = r4 + M[28+r1]
Para tratar vectores: el registro puede apuntar al principio del vector y el
desplazamiento selecciona el elemento correspondiente.
17

(7) Direccionamiento relativo al contador de programa

Caso particular de direccionamiento base + desplazamiento: el registro


referenciado implícitamente es el contador de programa.

El campo de direcciones se trata como un número en complemento a 2,


y representa un desplazamiento relativo al PC.

Se utiliza para realizar saltos condicionales (concepto de localidad).

18
(8) Direccionamiento indexado

La dirección del operando es la suma de dos registros.

Para acceder a vectores de forma más versátil que base +


desplazamiento: un registro contiene la base del vector y el otro el
índice del elemento correspondiente.

Ejemplo: add r3, (r1+r2) equivale a r3= r3+M[r1+r2]

19

(9) Direccionamiento autoincremento

Indirecto por registro con autoincremento del mismo.

Ejemplo: add r1,(r3)+ equivale a r1= r1 + M[r3]


r3=r3+d
(d:tamaño del elemento)

(10) Direccionamiento autodecremento

Igual pero se autodecrementa el registro.

(11) Direccionamiento escalado o índice

Para soportar tratamientos de arrays.

Ejemplo: add r1, 50(r2)[r3] equivale a r1=r1+M[50+r2+r3*d] donde


d:tamaño del elemento del array
20
Los cinco modos de direccionamiento del MIPS son:

(1) Direccionamiento inmediato

El operando se encuentra codificado en la propia instrucción,


representado como dato inmediato.

21

(2) Direccionamiento a registro

El operando está en un registro cuyo identificador se encuentra


codificado en la instrucción.

22
(3) Direccionamiento base (+desplazamiento)

La dirección efectiva del operando se obtiene sumando un


desplazamiento que se encuentra en la instrucción con una dirección
base que se encuentra en un registro especificado también por la
instrucción.

23

(4) Direccionamiento relativo al contador de programa

Es un caso particular del direccionamiento base (+desplazamiento)


donde el registro que contiene la dirección base es de forma implícita el
PC y el desplazamiento es de instrucciones (4 posiciones de memoria).

24
Este modo de direccionamiento se utiliza en instrucciones de
bifurcación.

Ya que el desplazamiento es de 16 bits, este modo de direccionamiento


permite saltar dentro del rango de palabras ±215 respecto a la
instrucción.

Esto es suficiente para implementar bucles y sentencias ‘if’.

Este modo de direccionamiento, especifica un salto relativo (número de


instrucciones) a la instrucción de bifurcación.

25

(5) Direccionamiento pseudodirecto

La dirección se calcula concatenando los 4 bits más significativos del


PC con la dirección de 26 bits especificada en la instrucción y dos ceros.

Este modo de direccionamiento permite saltar más allá que el anterior.

26