2.4. Modos de direccionamiento Distintas formas que tiene la

Anuncio
2.4. Modos de direccionamiento
Distintas formas que tiene la arquitectura para especificar la ubicación
de los operandos.
Objetivos:
- Reducir el número de bits para especificar un operando en memoria.
- Dar soporte a las estructuras de datos de alto nivel.
Pueden 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 parecerí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: en los direccionamientos indirectos como
base+desplazamiento (dirección=registro+valor) e indexado
(registro+registro), menos bits para especificar 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
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.
5
Ejemplo: doble palabra alineada y no alineada
6
2.4.3. Descripción de los distintos modos de direccionamiento
7
Para especificar algunos modos de direccionamiento usaremos la
siguiente notación:
A = Especificación en la instrucción de una dirección de memoria
(Address).
R = Especificación en la instrucción de un registro (Register).
EA = Dirección real del operando en memoria (Effective address).
rR = Contenido del registro R.
M[D] = Contenido de la posición de memoria D.
OPERANDO = Valor del operando direccionado.
8
(1) Direccionamiento por registro
El campo de dirección especifica un registro donde está el operando.
OPERANDO = rR
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
9
(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
10
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.
11
(3) Direccionamiento directo
El campo de dirección contiene la dirección efectiva del operando.
OPERANDO = M [ A ]
Muy sencillo, usado 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 ]
12
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.
OPERANDO = M [ rR ]
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 ]
13
(5) Direccionamiento indirecto por memoria
El campo de direcciones contiene la dirección de una palabra donde
está la dirección del operando.
OPERANDO = M [ M [A] ]
Desventaja: dos accesos a memoria, para obtener el operando.
Ejemplo: add r1, @(100) equivale a r1 = r1 + M [ M [100] ]
14
(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.
OPERANDO = M [ rR + 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.
15
(7) Direccionamiento relativo al contador de programa
Caso particular de direccionamiento base+desplazamiento en el que el
registro base es implícitamente el contador de programa.
OPERANDO = PC + Address
Se utiliza para realizar saltos condicionales (concepto de localidad).
16
(8) Direccionamiento indexado
La dirección del operando es la suma de dos registros.
OPERANDO = M [ rs+rt ]
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]
17
(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
18
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.
19
(2) Direccionamiento a registro
El operando está en un registro cuyo identificador se encuentra
codificado en la instrucción.
20
(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.
21
(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).
22
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 siguiente a la de bifurcación.
23
(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.
24
Descargar