Modos de Direccionamiento

Anuncio
Modos de Direccionamiento
Material Elaborado por el Profesor Ricardo González
A partir de Materiales de las Profesoras
Angela Di Serio
y
María Blanca Ibañez
Modos de Direccionamiento
Cada instrucción debe contener la información que necesita el CPU para su
ejecución:
Código de operación. Especifica la operación a realizar (suma, resta,
E/S, etc.) La operación se indica mediante un código binario.
Referencia a operandos fuente (dirección). La operación puede
involucrar uno o más operandos fuentes, es decir, operandos que son
entradas para la instrucción.
Referencia al operando resultado (dirección). La operación puede
producir un resultado.
Referencia a la siguiente instrucción. Le indica al CPU de donde va a
captar la siguiente instrucción tras completarse la ejecución de la
instrucción actual. La siguiente instrucción a captar está en memoria
principal. En la mayoría de los casos, la siguiente instrucción sigue
inmediatamente a la instrucción en ejecución. En tales casos no hay
referencia explícita a la siguiente instrucción. Cuando sea necesaria una
referencia explícita, debe suministrarse la dirección de memoria
Operandos de una instrucción
Los operandos fuente y resultado pueden estar en alguna de las siguientes
areas:
Memoria principal. En este caso debe indicarse la dirección de la celda
que contiene el operando
Registro del CPU. Dependiendo de la arquitectura, el CPU contiene uno
o más registros que pueden ser referenciados por las instrucciónes de
máquina. Si sólo existe un registro, la referencia al mismo puede ser
implícita. Si existe más de uno, cada registro tendrá asignado un
número único, y la instrucción debe contener el número del registro
deseado.
Dispositivode E/S. La instrucción debe especificar el módulo y
dispositivo de E/S para la operación. En el caso de E/S asignadas en
memoria, se dará una dirección de memoria.
Dentro de la Instrucción misma: Como es el caso de un operando
inmediato.
Direccionamiento de Operandos
Hay dos aspectos importantes que debemos tomar en cuenta. El primero es
como se especifica la dirección de un operando o referencia; y el
segundo como se organizan los bits de una instrucción para definir las
direcciones de los operandos y la operación que realiza dicha
instrucción.
En esta sección analizaremos las técnicas de direccionamiento más
comunes:
Inmediato
Directo
Indirecto.
Registro.
Indirecto con registro
Con desplazamiento.
Pila
Direccionamiento de Operandos
Hay que resaltar que la mayoría de las arquitecturas de computadores ofrecen más de
uno de estos modos de direccionamiento. La pregunta que surge entonces es
como determina la unidad de control que modo de direccionamiento se está
empleando en cada instrucción. Se pueden adoptar varias alternativas. A menudo
se utilizan códigos de operación para indicar el tipo de direccionamiento que se
usa. En otras ocasiones se utilizan uno o más bits del formato de instrucción para
indicar el modo de direccionamiento (campo de modo). El valor del campo de
modo determina que modo de direccionamiento va a utilizarse.
Cod Op
Operando(s)
Operando
addinm
adddir
addreg
adddes
bits para
identificar
el tipo de
direccionamiento
bits para
el operando
Direccionamiento de Operandos
Para explicar estos modos de direccionamiento usaremos la siguiente notación:
A contenido del campo de dirección de la instrucción
EA dirección real o efectiva de la posicion que contiene el operando que se
referencia
(X) contenido de la posicion X
A - Address
EA - Effective Address
(X) - Content of X
Modo Inmediato
Cual es el rango de valores que pueden ser representados en el
campo de direccionamiento inmediato?
Si se trata de números enteros representados usando Complemento a
dos el rango de posibles valores representables esta dado por:
Memoria
[-215 .. 215-1]
Si se trata de números naturales, entonces el rango es:
X-2
1
e
16
X-1
[0.. 2 -1]
y
X
X+1
X+2
Si queremos sumar el valor 5 hacemos:
addi
X
5
5
y
+
0
Características del Modo Inmediato
El operando está en la instrucción.
El operando es una constante a tiempo de ejecución.
No hay referencias adicionales a memoria despues de
la búsqueda de la instrucción.
El tamaño del operando está limitado al tamaño del
campo de dirección.
Modo Directo
Una forma sencilla de direccionamiento es el directo en el que el campo
de dirección contiene la dirección efectiva del operando
Memoria
add
1498
1499
1500
1501
1502
1500
Direccion en memoria
Registros
1
0
5
0
Modo Directo
Este modo fue común en las primeras generaciones de
computadores y aún se encuentra en un número pequeño de
sistemas.
Ventaja: Sólo requiere una referencia a memoria para obtener el
operando y no necesita ningún cálculo especial.
Desventaja: La limitación directa es que proporciona un espacio
limitado de direcciones.
Modo Directo
El espacio de direcciones referenciable viene dado por el rango
[0 .. 221-1]
¿Qué hace el lenguaje ensamblador MIPS para manejar el direccionamiento directo?
El lenguaje ensamblador MIPS permite el uso de instrucciones de la forma
lw $10, A
donde A es una dirección de memoria de 32 bits. Una instrucción de este estilo
pudiera requerir el uso de más de una palabra para su representacion.
MIPS posee formatos de instrucción de tamano fijo restringido a 32 bits, por lo tanto
es imposible colocar una dirección de 32 bits en el formato de instrucción.
El lenguaje ensamblador MIPS se encarga de traducir dicha instrucción en varias
instrucciónes:
Iw $10, A
lui $1,4097
Iw $10, MenosSignificativo($1)
donde
Características del Modo Directo
La instrucción contiene la dirección efectiva del operando
Un acceso adicional es requerido para obtener el operando.
El rango de direcciones está limitado por el ancho del campo que
contiene la dirección del operando
La dirección es una constante a tiempo de ejecución pero el
operando en si puede variar a tiempo de ejecución
add
1498
1499
1500
1501
1502
1500
Direccion en memoria
Registros
5
1
0
4
0
Modo Indirecto
El problema con el modo directo es que la longitud del campo de
direcciones es normalmente menor que la longitud de la palabra,
limitando de esta manera el rango de direcciones. Una solución es
hacer que el campo de direcciones referencie la dirección de una
palabra de memoria que contiene la dirección completa del operando. A
esto se le conoce como modo indirecto.
add_indir
199
200
201
200
Direccion en memoria
Registros
1497
1498
1499
1500
1501
-32
1500
0
1
0
5
0
Modo Indirecto
Ventaja: Permite acceder a todo el espacio de direcciones. No hay limitación
como en el caso anterior de modo directo.
Desventaja: La ejecución de la instrucción requiere de dos referencias a
memoria para capturar el operando: una para captar su dirección y otra
para obtener su valor.
Una variante al modo, raramente utilizada, es el modo indirecto de varios
niveles.
Esta aproximación no presenta realmente una ventaja significativa, y su
desventaja principal es que pueden requerirse dos o mas referencias
para captar un operando.
add_indir
200
Direccion en memoria
Registros
199
200
201
-32
1500
0
1497
1498
1499
1500
1501
1
0
5
0
Características del Modo Indirecto
La instrucción contiene la dirección de memoria que
contiene la dirección del operando.
Se requieren dos accesos a memoria para obtener el
operando.
El rango de direcciones efectivas es de 2n donde n es
el ancho de la palabra.
El número de direcciones de memoria que puede ser
usado para almacenar direcciones efectivas es de 2k
donde k es el ancho del campo dirección en la
instrucción.
Modo Registro
Este modo es similar al directo. La unica diferencia es que el campo
de dirección referencia un registro en lugar de una dirección de
memoria principal.
Memoria
add_reg
R3
R1
R2
R3
R4
1
0
5
0
Identificacion de un Registro
Registros
1498
1499
1500
1501
1502
1
0
7
0
Modo Registro
Ventaja: Solo es necesario un campo pequeño de direcciones en la
instrucción y no se requieren referencias a memoria. El tiempo de
acceso a un registro interno al CPU es mucho menor que el tiempo
necesario para acceder memoria principal.
Desventaja: El espacio de direcciones está muy limitado dado al pequeño
número de registros que poseen las arquitecturas.
Ejemplo:
Si tenemos 32 registros, ¿cuantos bits requerirá el campo de dirección para
indicar el número del registro al que se hace referencia?
Memoria
add_reg
R3
R1
R2
R3
R4
1
0
5
0
Identificacion de un Registro
Registros
1498
1499
1500
1501
1502
1
0
7
0
Caracteríticas del Modo Registro
El campo de dirección dentro de la instrucción
contiene el nombre o referencia de un registro.
La dirección efectiva del operando está en la
instrucción.
No se requiere acceso a memoria para obtener el
operando.
Memoria
add_reg
R3
R1
R2
R3
R4
1
0
5
0
Identificacion de un Registro
Registros
1498
1499
1500
1501
1502
1
0
7
0
Modo Indirecto con Registro
Este modo es similar al indirecto. La diferencia está en que en el indirecto el
campo de dirección hace referencia a una posicion de memoria que
contiene la dirección del operando y en el indirecto registro, el campo de
dirección hace referencia a un registro que contiene la dirección efectiva
del operando.
Memoria
add_ind_reg
R3
R1
R2
R3
R4
1
0
1500
0
Identificacion de un Registro
Registros
1498
1499
1500
1501
1502
1
0
5
0
Modo Indirecto con Registro
Ventaja: emplea una referencia menos a memoria que el modo
indirecto.
Desventaja: la ejecución de la instrucción requiere una
referencia a memoria para capturar el operando.
Memoria
add_ind_reg
R3
R1
R2
R3
R4
1
0
1500
0
Identificacion de un Registro
Registros
1498
1499
1500
1501
1502
1
0
5
0
Modo con Desplazamiento
Este modo combina las posibilidades de los modos directo e
indirecto con registro.
Requiere que las instrucciónes tengan dos campos de dirección
donde al menos uno de ellos es explícito.
El valor contenido en uno de los campos de dirección se utiliza
directamente. El otro campo de dirección o referencia implícita
definida por el código de operación se refiere a un registro cuyo
contenido se suma al primer campo de dirección para generar la
dirección efectiva del operando.
Memoria
1498
1499
1500
1501
1502
1
0
9
0
5
Modo con Desplazamiento
Hay tres formas distintas de modos con desplazamiento:
• Desplazamiento Relativo
• Desplazamiento con Registro Base .
• Indexado (o Relativo a un registro Indice)
Memoria
1498
1499
1500
1501
1502
1
0
9
0
5
Desplazamiento Relativo o Relativo al PC
El registro referenciado implícitamente es el contador de programa
(PC). La dirección de la instrucción actual se suma al campo de
dirección para producir la dirección efectiva. Normalmente el
campo de dirección se trata como un número en complemento a
dos para esta operación. La dirección efectiva es un
desplazamiento relativo a la dirección de la instrucción.
EA= A + (PC)
Ejemplo:
beq $10, $11, Lazo
PC
add_relativo
1498
2
Desplazamiento
R1
R2
R3
R4
1
0
-123
0
Registros
1498
1499
1500
1501
1502
Memoria
add_relativo 2
Otra instruccion
0
5
0
Desplazamiento
2
Desplazamiento Relativo
Esta instrucción de MIPS es ensamblada en un formato conocido
como tipo I de MIPS
Colocando en el campo desplazamiento la cantidad de palabras
que debe desplazarse desde la instrucción actual para poder
lIegar a la dirección Lazo.
PC
Instruc k
Instruc k+1
Instruc k+2
Instruc k+3
Instruc k+4
Instruc k+5
PC
Instruc k
Instruc k+1
Instruc k+2
Instruc k+3
Instruc k+4
Instruc k+5
Desplazamiento
Positivo +3
PC
Instruc k
Instruc k+1
Instruc k+2
Instruc k+3
Instruc k+4
Instruc k+5
Desplazamiento
Negativo -2
Desplazamiento con Registro Base
El registro referenciado contiene una dirección de memoria y el campo de
dirección contiene un desplazamiento desde dicha dirección. La
referencia al registro puede ser explícita o implícita.
EA = A + (Rn)
La dirección del operando viene dada por la suma del contenido del registro
base más el desplazamiento.
Ejemplo:
Iw $10, 100($5)
La dirección efectiva del segundo operando viene dado por 100+($5)
Desplazamiento con Registro Base
Memoria
si
Registro Base
1498
1499
1500
1501
1502
1503
1504
1
0
9
0
4
5
EA = A + (Rn)
Desplazamiento
Memoria
Registro
Base
add_relativoRb
R3
Desplazamiento
500
Dirección
R1
R2
R3
R4
1
0
1000
999
Rb 1000
1001
0
Registros
1499
1500
1501
1502
1
5
4
0
Modo Indexado o relativo a un Registro Indice
El campo de dirección referencia una dirección de memoria y el
registro contiene un desplazamiento desde dicha dirección.
Dirección Base
1498
1499
1500
1501
1502
1503
1504
EA = A + (Rn)
1
0
9
0
4
5
Desplazamiento
según el
contenido del
Registro Indice
Memoria
Registro
Indice
add_indexado
R3
Dirección Base
1500
Dirección del
Operando
R1
R2
R3
R4
1
0
2
0
Registros
1498
1499
Dir Base 1500
1501
1502
1
0
5
0
Desplazamiento
por el contenido
de R3
Modo Indexado o relativo a un Registro Indice
Este modo de direccionamiento es empleado especialmente para el
recorrido de estructuras. Por ejemplo para recorrer un arreglo
podemos colocar una direccion Array al comienzo del mismo he ir
accediendo a sus diferentes posiciones al ir modificando un
registro índice.
Registro
Indice
Dirección Base
Memoria
load_indexado
R3
R2
Vector
Dirección del
Operando
R1
R2
R3
R4
1
0 1 23 4 5
2 4 6 8 10 12
0
Registros
Vector
1498
1499
1500
1501
1502
1503
1504
1505
1506
19
2
4
6
8
10
12
Desplazamiento
por el contenido
de R3
Modo Indexado o relativo a un Registro Indice
Modo Indexado en SPIM
Iw $10, A($5)
¿Qué hace el lenguaje ensamblador MIPS para permitir este modo?
Traduce la instrucción en las siguientes instrucciónes
lui
addu
Iw
$1,
4097
$1, $1, $5
$10, MenosSignificativoA($1)
4097
(R5) + MenosSignificativoA
Modo Pila
En este modo los operandos a trabajar
están en la pila, el resultado de la
operación queda en el tope de la pila.
A
add
A+B
B
C
C
Pila o Stack
Pila o Stack
Ejemplo 1 de Modos de direccionamiento
load_inm
$Rl,
Inmediato
Directo
Indirecto.
Registro.
Indirecto con registro
Con desplazamiento.
0
add_dir
$R5 ,
1504
sub_ind
$R5 ,
–
–
–
1504
add_reg
$R4
$R5,
Relativo Registro Base
Indexado
Relativo al PC
Pila
Memoria
store_reg_indi
$R6
$R1,
load_desp
1499 ($R1)
$R2,
Sub_inm
1
$R2,
add_desp
Cod Operac.
1500($R2)
R1
R2
R3
R4
R5
R6
1
1
2
1
0
1498
Registros
OP1
$R1,
OP2
Vector 1500
1497
1498
1499
1500
1501
1502
1503
1504
1505
0
100
4
0
1
2
3
1498
Ejemplo 2 de Modos de direccionamiento
Suponga que estamos trabajando con una arquitectura que posee 4 registros
( $RO,$Rl, $R2 y $R3) y la memoria es direccionada por palabras. El conjunto
de instrucciones para esta arquitectura está conformado por las siguientes
operaciones:
add opl, op2
opl = opl + op2
sub opl, op2
opl = opl - op2
move opl, op2
opl = op2
Y los modos de direccionamiento son los siguientes:
Inmediato
#
Registro
$Ri
Directo
etiqueta o número
Indirecto
@
Desplazamiento
n ($Ri)
Desplazamiento
n($Ri)+
(despues
de calcular la
autoincremento
dirección del
operando
incrementa en 1 $Ri )
Ejemplo 2 de Modos de direccionamiento
En un instante de tiempo los registros y la memoria presentan el siguiente
estado:
Dado el siguiente trozo de código y la
tabla de símbolos, muestre como se
modifican los registros y la memoria
move
move
move
add
move
move
$Rl,
$R0 ,
$R2 ,
$R2,
C ,
$R0 ,
#2
2
B
2 ($Rl)
@$R0
@4(R1)+
Ejemplo 2 de Modos de direccionamiento
move
move
move
add
move
move
$Rl,
$R0 ,
$R2 ,
$R2,
C ,
$R0 ,
#2
2
B
2 ($Rl)
@$R0
@4(R1)+
R0
R1
R2
R3
$Rl referencia a1 registro 1 y #2
corresponde a un modo inmediato.
La instrucción transfiere e1 va1or 2
a1 registro
Ejemplo 2 de Modos de direccionamiento
move
move
move
add
move
move
$Rl,
$R0 ,
$R2 ,
$R2,
C ,
$R0 ,
#2
2
B
2 ($Rl)
@$R0
@4(R1)+
R0
R1
R2
R3
$R0 referencia a1registro 0 y el
operabdo 2 corresponde a un
modo directo.
La instruccion transfiere e1
contenido de la direccion 2 de
memoria a1 registro R0.
Ejemplo 2 de Modos de direccionamiento
move
move
move
add
move
move
$Rl,
$R0 ,
$R2 ,
$R2,
C ,
$R0 ,
#2
2
B
2 ($Rl)
@$R0
@4(R1)+
R0
R1
R2
R3
$R2 referencia al registro 2 y B corresponde
a un modo directo. Al revisar la tabla de
símbolos obtenemos que la etiqueta B
corresponde a la dirección 8 de
memoria. La instrucción transfiere el
contenido de la dirección de memoria 8
al registro.
Ejemplo 2 de Modos de direccionamiento
move
move
move
add
move
move
$Rl,
$R0 ,
$R2 ,
$R2,
C ,
$R0 ,
#2
2
B
2 ($Rl)
@$R0
@4(R1)+
R0
R1
R2
R3
$R2 referencia al registro 2 y 2 ($R1)
corresponde a un modo desplazamiento.
Para calcular la dirección del operando
se toma el contenido del registro y se le
suma el desplazamiento 2. En este caso
la dirección efectiva del segundo
operando es 4. Para la operación add se
toma el contenido del registro 2 y el
contenido de la dirección de memoria 4.
Ejemplo 2 de Modos de direccionamiento
move
move
move
add
move
move
$Rl,
$R0 ,
$R2 ,
$R2,
C ,
$R0 ,
#2
2
B
2 ($Rl)
@$R0
@4(R1)+
R0
R1
R2
R3
C referencia a la direccion 3 de memoria y
@$R0 corresponde a un modo
indirecto registro.
Para calcular la dirección del segundo
operando se toma el contenido del
registro 0 (10), y este valor es la
dirección efectiva del operando. El
contenido de la direccion de memoria
10 es transferido a la direccion 3
Ejemplo 2 de Modos de direccionamiento
move
move
move
add
move
move
$Rl,
$R0 ,
$R2 ,
$R2,
C ,
$R0 ,
#2
2
B
2 ($Rl)
@$R0
@4(R1)+
R0
R1
R2
R3
$R0 referencia al registro 0 y @4($Rl) corresponde a
un modo desplazamiento indirecto.
Para calcular la dirección del segundo operando se
toma el contenido del registro 1 (2), y a este
valor se le suma el desplazamiento 4 para obtener
una dirección de memoria (6). A esta dirección se
le aplica el modo indirecto, es decir la dirección no
contiene el operando sino la dirección que
realmente contiene el operando. Por lo tanto el
contenido de la direccion 1 de memoria es
transferido al registro 0.
Despues de esta transferencia se incrementa el
contenido del registro 1
Descargar