Vous êtes sur la page 1sur 34

Estructura de Computadores

Cap. 4: Repertorio de
instrucciones. Direccionamiento y
formatos.
Jos Daniel Muoz Fras
Universidad Pontificia Comillas. ETSI ICAI.
Departamento de Electrnica y Automtica

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.1/35

ndice
1.

Introduccin.

2.

Direccionamiento inmediato.

3.
4.

Direccionamiento directo absoluto.


Direccionamiento directo relativo.
a)

Dir. directo relativo a registro base.

b)

Dir. directo relativo a registro ndice.

c)

Dir. directo relativo a pila.

d)

Dir. directo relativo al PC.

5.

Direccionamiento pseudodirecto del MIPS.

6.

Direccionamiento indirecto.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.2/35

Introduccin
Modo de direccionamiento = procedimiento para
determinar:
Un operando.
La direccin de un operando.
La direccin de una instruccin.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.3/35

Segn (de Miguel Anasagasti, 2000): Un modo de direccionamiento es un procedimiento que


permite determinar un operando, o la direccin de un operando o una instruccin. Como lo ms
frecuente es especificar la direccin donde est almacenado el dato o la instruccin, se emplea
siempre el trmino modo de direccionamiento, aunque en el primer caso (determinar directamente
el operando) no est muy justificado.
Para simplificar, se denominar objeto al operando, resultado o instruccin que se desea direccionar.
En la siguiente transparencia se muestra una clasificacin de los distintos modos de direccionamiento usados en los procesadores. No obstante hay que resaltar que cada procesador incluye
un subconjunto de estos modos de direccionamiento.

Introduccin
Inmediato.
Directo:
Absoluto:
De registro.
De memoria.
De pgina base.

Relativo:
A un registro.
A un reg. ndice
A pila.
Al contador de programa.

Indirecto.
Implcito.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.4/35

Aunque cada modo de direccionamiento se expondrn en detalle a lo largo del captulo, podemos introducir aqu su significado de forma somera:
Inmediato: El operando se incluye en la propia instruccin. En el MIPS, este modo de
direccionamiento se usa para el segundo operando de las instrucciones addi, ori, etc.
Directo: Se indica en la instruccin la direccin del objeto. Por ejemplo el MIPS utiliza el
modo relativo a un registro para las instrucciones de carga y almacenamiento.
Indirecto: Se indica una direccin en la que se encuentra la direccin del objeto. Este
modo es til para el manejo de punteros. No obstante algunas arquitecturas como el MIPS
no lo incluyen.
Implcito: El objeto est siempre en un lugar predeterminado que depende de la instruccin.
Por ejemplo en el MIPS la instruccin mult no necesita un registro destino, pues siempre
deja su resultado en los registros hi y lo.

Ejercicio
En un programa MIPS es necesario cargar el dato cuya direccin est almacenada en la posicin 0x10007000. Si el registro gp contiene el valor 0x10008000, escriba la secuencia de instrucciones MIPS para cargar dicho dato en el registro s0.

Introduccin
Las motivaciones para usar los modos de
direccionamiento son:
Ahorro de espacio.
Cdigo reubicable y reentrante.
Manejo de estructuras de datos.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.5/35

En principio puede parecer ms conveniente especificar en la instruccin el objeto o su direccin. Sin embargo esto no es lo ms indicado, ya que los distintos modos de direccionamiento
permiten:
Ahorro de espacio. Interesa que las instrucciones sean lo ms cortas posibles para ahorrar
tiempo al leerlas y espacio en memoria para almacenar los programas. Por ejemplo, en las
operaciones aritmticas del MIPS han de especificarse dos operandos y un resultado. Si se
especificase la direccin de memoria de cada uno de estos objetos seran necesarias 3
palabras de 32 bits, que sumados al cdigo de operacin (p. ej. 6 bits) haran un total de
102 bits.
Cdigo reubicable y reentrante. Un cdigo reubicable es aquel que puede ejecutarse sin
cambios en cualquier zona de la memoria. Para ello es necesario disponer de
direccionamientos relativos. Un cdigo reentrante es aquel que puede ser llamado desde
varios lugares a la vez o ser llamado varias veces antes de terminar su ejecucin. Ejemplos
cercanos son las rutinas recursivas o las rutinas de libreras en entornos multiproceso. En
estos casos son necesarios direccionamientos de pila.
Manejo de estructuras de datos. Las tablas, matrices y estructuras de datos en lenguajes de
alto nivel se manejan ms eficientemente usando modos de direccionamiento relativos.

Direccionamiento inmediato
En el direccionamiento inmediato el objeto (un
operando en este caso) est almacenado dentro de
la propia instruccin.
Por ejemplo, en el MIPS las instrucciones tipo I tienen
un operando inmediato de 16 bits:

Tipo I

ICAIdea

6 bits 5 bits 5 bits


op
rs
rt

16 bits
Inmediato

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.6/35

El modo de direccionamiento ms simple es incluir el valor del operando dentro de la propia


instruccin. Este modo de direccionamiento se usa para especificar constantes. En el MIPS existen
varias instrucciones, las tipo I, que incluyen una constante como uno de sus operandos. Ejemplos
de estas instrucciones son addi, ori.
Su limitacin principal es el tamao mximo disponible. En el caso del MIPS el tamao del
valor inmediato son 16 bits. No obstante, la mayora de las arquitecturas CISC permiten inmediatos de varios tamaos. Por ejemplo el Pentium permite constantes inmediatas de 8, 16 o 32 bits. El
problema de esta aproximacin es que las instrucciones se hacen de tamao variable, lo que complica el paralelismo. En el caso del Pentium, segn sea la longitud del inmediato, la instruccin
puede ocupar 16, 24 o 40 bits. Esto es debido a que en este caso la instruccin se compone de un
primer byte en el que incluye el cdigo de operacin seguido inmediatamente del dato inmediato
de 8, 16 o 32 bits.

Direccionamiento directo absoluto


Se especifica directamente la direccin del objeto.
Puede ser:
De registro. Se especifica el nmero del registro
interno.
De memoria. Se especifica la direccin completa.
De pgina base. Se especifica la parte baja de la
direccin. Los bits altos estn implcitos.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.7/35

En el modo de direccionamiento directo absoluto, en la instruccin se especifica la localizacin


del objeto. Existen tres alternativas:
De registro. Si el dato est almacenado en alguno de los registros internos del procesador,
basta con que en la instruccin se indique el nmero de dicho registro.
De memoria. Si el objeto se encuentra en la memoria, en la instruccin se especifica la
direccin completa de dicho dato. Aunque desde el punto de vista del programador este
modo de direccionamiento es muy conveniente, desde el punto de vista del rendimiento
no es el ms adecuado, ya que la instruccin ha de incluir la direccin completa del
objeto. As, en el caso de un procesador con un mapa de direcciones de 32 bits, como por
ejemplo el Pentium, son necesarios 32 bits para especificar la direccin del objeto, aparte
de los bits necesarios para codificar el resto de la instruccin. No obstante, conviene
destacar que este tipo de direccionamiento es muy conveniente en los saltos si se desea
abarcar toda la memoria.
De pgina base. Con el objetivo de buscar facilidad de programacin sin perjudicar las
prestaciones, algunos procesadores incluyen un modo de direccionamiento directo absoluto
en el cual slo se especifica en la instruccin la parte baja de la direccin del objeto, estando
implcita la parte alta. Por ejemplo en el MC6800, que tiene un bus de direcciones de 16
bits, se puede especificar una direccin absoluta con slo 8 bits, poniendo el procesador
los 8 bits ms significativos a cero. Esto permite que los accesos a los primeros 256 bytes
de la memoria (pgina base o pgina cero) requieran instrucciones ms cortas (y por tanto
ms rpidas).

Direccionamiento directo absoluto


El MIPS dispone de direccionamiento directo absoluto
de registro:
Tipo R

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits


op rs=2 rt
rd shamtfunct
0
1
2
31

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.8/35

De los modos de direccionamiento directo absoluto discutidos en la transparencia anterior, el


MIPS slo dispone del direccionamiento directo absoluto de registro, que tambin se denomina
para simplificar direccionamiento de registro.
Como se puede apreciar en la transparencia, el cdigo de operacin incluye un campo de 5
bits para poder direccionar cada uno de los 32 registros internos que dispone el MIPS.

Direccionamiento directo relativo


Se especifica un desplazamiento sobre una direccin
de referencia.
La direccin se calcula como referencia +
desplazamiento.
El desplazamiento suele ser pequeo
bits.

menos

El desplazamiento suele considerarse con signo.


Se complica la circuitera (sumador adicional).
Segn la direccin de referencia existen varios tipos
de direccionamiento directo relativo.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.9/35

En este modo de direccionamiento, la instruccin contiene, en lugar de la direccin absoluta


del objeto, un desplazamiento sobre una direccin de referencia.
Como generalmente basta con desplazamientos pequeos, no es necesario que el desplazamiento sea del tamao necesario para acceder a todo el mapa de direcciones, por lo que en general
este modo de direccionamiento precisa de menos bits que el absoluto. Como la direccin de referencia s suele ser del tamao necesario para abarcar todo el mapa de direcciones, con este modo de
direccionamiento se puede acceder a cualquier posicin de memoria.
Adems, debido al principio de localidad de los datos, cuando se accede a un dato, lo ms
probable es que los siguientes datos estn cerca de l, por lo que la direccin de referencia no
suele ser necesario cambiarla para cada dato. Esto permite una mayor velocidad de ejecucin, ya
que para acceder a cada dato slo es necesario especificar en la instruccin el desplazamiento, que
ocupa muchos menos bits que la direccin completa.
El nico inconveniente de este modo de direccionamiento es la necesidad de complicar el
hardware para incluir un sumador que sume la direccin de referencia ms el desplazamiento.
No obstante, aunque puede pensarse que el tiempo empleado en calcular la suma empeorar el
rendimiento, en realidad dicho tiempo no suele ser significativo.
Por ltimo conviene destacar que en la mayora de los procesadores el desplazamiento se suma
con signo, lo que permite acceder a datos por encima y por debajo de la direccin de referencia.
Segn la direccin de referencia utilizada, existen varios tipos de direccionamiento directo
relativo, los cuales se exponen a continuacin.

Dir. directo relativo a registro base


La direccin de referencia se almacena en un registro
base.
La instruccin ha de contener:
Un campo para el desplazamiento.
Otro para indicar el registro.
Muy til para acceder a estructuras de datos:
Se coloca la direccin base de la estructura en el
reg. base.
Se accede a cada elemento con el
desplazamiento apropiado

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.10/35

En este modo de direccionamiento, la direccin de referencia est almacenada en un registro


base. Este registro puede ser fijo o pueden existir varios registros disponibles para este fin, por
lo que la instruccin incluir tambin en estos casos un campo para especificar dicho registro de
referencia. Por ejemplo, en el caso del MIPS se pueden usar como registros base cualquiera de los
32 registros de propsito general.
El desplazamiento usado vara de unas arquitecturas a otras. Por ejemplo en el MIPS es siempre de 16 bits con signo. En el Pentium en cambio puede ser de 8, 16 y 32 bits. Desplazamientos
pequeos implican un rango de variables accesibles tambin pequeo, pero al mismo tiempo necesitan menos bits para codificarlos. En el Pentium, como el tamao de instruccin es variable, el
desplazamiento se puede adaptar la longitud necesaria en cada caso. En el caso del MIPS, como
el tamao de instruccin est fijado a 32 bits, el desplazamiento tambin se ha fijado al mximo
disponible, que son 16 bits.
Este tipo de direccionamiento es muy til cuando se necesita acceder a una serie de variables
que estn situadas cerca, como por ejemplo una estructura de datos en C. En estos casos se sita la
direccin de comienzo de la estructura en el registro base y se vara el desplazamiento para acceder
a cada una de las variables de la estructura.

Dir. directo relativo a registro base


Las instrucciones de carga y almacenamiento del
MIPS utilizan este modo de direccionamiento.

Tipo I

6 bits 5 bits 5 bits


op rs=2 rt
0
1
2

16 bits
Despl=4

0x74
0x70

31

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.11/35

las instrucciones de carga y almacenamiento del MIPS: lw, sw, lh, sh, lb y sb utilizan este
modo de direccionamiento. Como se ha dicho antes, el desplazamiento es de 16 bits y se suma con
signo al registro base, que puede ser cualquiera de los 32 registros disponibles.
Ntese que las instrucciones lw y sw accedern a los 32 bits que hay a partir de la direccin
calculada, lh y sh a los 16 bits y, por ltimo, lb y sb acceder al byte que hay en la direccin
calculada.
Si se usa el registro zero como registro base se dispone de un direccionamiento absoluto a
pgina base. Cuando el desplazamiento sea positivo se acceder a los primeros 32 kb de la memoria
y cuando sea negativo a los ltimos 32 kb de la memoria.
De la misma forma, existe una convencin en el MIPS para el manejo de la memoria. Segn
esta convencin, se reserva un bloque de 64 kb para almacenar los datos 1 de los programas. Dicho
bloque est situado a partir de la posicin 0x10000000. Para permitir un acceso fcil a esta zona
de memoria, se sita el valor 0x10008000 en el registro gp (del ingles global pointer), de forma
que se pueda acceder a todo el bloque mediante el desplazamiento adecuado tomando como base
el registro gp.

1 En

esta zona se almacenan solamente las variables globales y las locales estticas (las precedidas por la palabra clave static en C). Las variables locales se almacenan en la pila.

Dir. directo relativo a registro ndice


Es una variacin del anterior:
La direccin de referencia est contenida en la
instruccin.
El desplazamiento est en un registro ndice.
La direccin final se calcula al igual que antes como
referencia+desplazamiento.
Permite acceder fcilmente a vectores de datos.
Para ello es conveniente escalar el ndice.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.12/35

El modo de direccionamiento relativo a registro ndice es una variacin del anterior: En lugar
de almacenar la direccin de referencia en un registro y usar un desplazamiento pequeo para
acceder a los datos, ahora se usa como direccin de referencia un campo de la instruccin y como
desplazamiento un registro. El principal inconveniente de este modo de direccionamiento es que
si se desea que la direccin de referencia abarque todo el mapa de direcciones, ha de tener un
elevado nmero de bits. Algunas arquitecturas como el PowerPC solucionan este problema usando
un registro para la direccin de referencia (registro base) y otro para el ndice. El Pentium va un
poco ms all permitiendo un registro base, un registro ndice y adems un desplazamiento de 8,
16 o 32 bits.
El principal uso de este modo de direccionamiento es el acceso a vectores de datos. Por ello
muchas arquitecturas permiten un escalado del registro ndice, de forma que se puedan manejar
vectores de datos de 16 o 32 bits automticamente. Por ejemplo el Pentium dispone de este modo
de direccionamiento con escalados de 1, 2 o 4 para acceder a vectores de bytes, palabras y dobles
palabras (8, 16 y 32 bits en nomenclatura Pentium). As, cuando se accede a un vector de dobles
palabras, el ndice se multiplica por 4, de forma que al acceder a la doble palabra i se direcciona
la posicin de memoria despl+4*i.
Otras arquitecturas permiten incrementar o decrementar automticamente el registro ndice
para recorrer automticamente un vector de forma secuencial, tal como se muestra en la siguiente
transparencia.

Dir. directo relativo a registro ndice


En algunas arquitecturas el registro ndice se puede
incrementar automticamente. Existen 4 posibilidades:
Pre-autoincremento. vec[++i]. I

I+1 ; (ref+I)

Pre-autodecremento. vec[--i]. I

I-1 ; (ref+I)

Post-autoincremento. vec[i++]. (ref+I) ; I

I+1

Post-autodecremento. vec[i--]. (ref+I) ; I

I-1

Su utilidad es la de recorrer secuencialmente un


vector.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.13/35

Algunas arquitecturas como el 68000 o el PowerPC permiten incrementar o decrementar automticamente el registro ndice. Existen cuatro posibilidades, aunque no todas las arquitecturas
incluyen las cuatro:
Pre-autoincremento. Es equivalente a la sentencia de C vec[++i]: En primer lugar se
incrementa el ndice para a continuacin calcular la direccin. Expresado en notacin de
transferencia de registros, siendo I el registro ndice y ref la direccin de referencia,
que coincidir con la direccin del primer elemento del vector vec: I I+1 ; (ref+I)


Pre-autodecremento. Equivalente a: vec[--i]. Se decrementa el ndice y despus se


calcula la direccin. En notacin de transferencia de registros: I I-1 ; (ref+I)


Post-autoincremento. Equivalente a: vec[i++]. Se calcula la direccin y a continuacin


se incrementa el registro ndice. En notacin de transferencia de registros: (ref+I) ; I I+1


Post-autodecremento. Equivalente a: vec[i--]. Se calcula la direccin y a continuacin


se decrementa el registro ndice. En notacin de transferencia de registros: (ref+I) ; I I-1


Estos modos de direccionamiento facilitan el recorrido secuencial de un vector, ya que automticamente incrementan o decrementan el ndice de ste. Ahora bien, el incremento ha de
adaptarse al tamao de los datos del vector. Por ello, las arquitecturas que soportan este modo
suelen permitir incrementar el ndice en 1, 2 o 4 segn se est trabajando con vectores de 8, 16 o
32 bits.

Ejercicio
Escriba una serie de instrucciones MIPS para realizar un direccionamiento indexado con postautoincremento en un vector de enteros de 32 bits. Como direccin base se usar s0 y como registro
ndice se usar t0. Utilice estas instrucciones para poner a cero un vector de 100 elementos cuya
direccin inicial est almacenada en s0.

Dir. directo relativo a pila


Es un caso particular del direccionamiento relativo a
registro:
Existe un registro dedicado (SP) que almacena el
tope de la pila.

push introduce un dato en la pila.


pop extrae un dato de la pila.
Si la pila crece hacia abajo:

push realiza un direccionamiento relativo al SP


con pre-autodecremento

pop realiza un direccionamiento relativo al SP con


post-autoincremento.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.14/35

Segn se vio en el tema anterior, la pila es una estructura fundamental en programacin. Su


modo de direccionamiento es un caso particular del direccionamiento relativo a registro. De hecho
en el MIPS se utiliza este modo de direccionamiento para implementar una pila utilizando uno de
los registros generales sp para almacenar el tope de la pila.
En muchas otras arquitecturas existen instrucciones especiales para introducir y extraer datos
de la pila, tpicamente llamadas push y pop respectivamente. Estas instrucciones realizan un direccionamiento relativo a registro, aunque de forma transparente al programador. Para empezar,
no es necesario indicar el registro a usar, ya que hay un registro (el SP) reservado para almacenar el tope de la pila. Adems, a la hora de introducir un dato en la pila, el procesador realiza
un direccionamiento relativo al SP con pre-autodecremento si la pila crece hacia abajo o con preautoincremento si la pila crece hacia arriba. De la misma manera, al extraer un dato de la pila, se
realiza un direccionamiento relativo al registro SP con post-autoincremento si la pila crece hacia
abajo o con post-autodecremento si la pila crece hacia arriba.

Dir. directo relativo al PC


El registro base es el contador de programa.
Se utiliza para saltos cortos (bucles o if).
Se necesitan pocos bits para el salto.
Como el PC se incrementa al empezar a ejecutar la
instruccin, el desplazamiento se calcula respecto a la
instruccin siguiente a la del salto.
Ej. PC

PC


64, Despl 16 salto a


1 16 64 1 16 91.


El cdigo producido es reubicable.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.15/35

Cuando se realiza un salto, es necesario especificar la direccin de la instruccin a la que se


desea saltar. Se puede especificar la direccin completa, pero ello implica usar un gran nmero
de bits. No obstante, la mayora de los saltos se originan en bucles y sentencias if, por lo que en
la prctica la mayora de los saltos se realizan a posiciones cercanas a la instruccin actual. Por
ejemplo, en programas como el compilador gcc o el simulador de circuitos spice la mitad de los
saltos son a posiciones que estn situadas a menos de 16 instrucciones de la actual. Adems la
mayora de los saltos son a instrucciones dentro del rango 2 15 respecto a la instruccin actual.
Teniendo en cuenta lo dicho anteriormente, es muy conveniente disponer de un modo de direccionamiento relativo usando el PC como direccin de referencia para ser usado en los saltos.
Adems con un desplazamiento de 8 o 16 bits es ms que suficiente en la mayora de los casos.
Hay que tener en cuenta que, por temas de implantacin, el PC se incrementa mientras se est
ejecutando la instruccin en curso, de forma que apunte lo antes posible a la instruccin siguiente.
Por tanto, cuando se termina el ciclo de ejecucin de la instruccin y se decide dar el salto, el PC ya
estar apuntando a la instruccin siguiente. En consecuencia, el desplazamiento almacenado en la
instruccin ha de calcularse relativo a la direccin de la instruccin siguiente al salto. Por ejemplo
si la instruccin de salto est en la posicin 64 y dicha instruccin tiene un desplazamiento de 16,
el salto se realizar a la posicin PC 1 16 64 1 16 91 (suponiendo que la instruccin
ocupa 1 byte).
Por ltimo conviene destacar que el cdigo producido con estos saltos es reubicable, pues no
depende de las direcciones absolutas de las instrucciones para dar los saltos, sino de sus posiciones
relativas.


Dir. directo relativo al PC


El MIPS usa este direccionamiento en los saltos
condicionales.

Tipo I

6 bits 5 bits 5 bits


rs
op
rt

16 bits
Despl=2
x4
0x78

PC

ICAIdea

0x70

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.16/35

En el MIPS se usa el direccionamiento directo relativo al PC para los saltos condicionales.


Como se ha comentado antes, el PC se incrementa durante la fase de decodificacin de la
instruccin, por lo que cuando se decide dar el salto, el PC ya apunta a la siguiente instruccin
(PC+4). En el ejemplo de la figura, la direccin que provoca el salto estar almacenada en la
posicin 0x6C.
Por otro lado, como las instrucciones del MIPS tienen un tamao fijo de 32 bits, los saltos
sern siempre mltiplos de 4. Para conseguir una mayor distancia de saltos, esta multiplicacin
est implcita, por lo que el rango de los saltos pasa a ser de 2 15 instrucciones, es decir, 217
bytes.


Dir. pseudodirecto del MIPS


Se emplea para saltos largos.

Tipo J

6 bits
op

26 bits
0x1E
x4

4 bits
PC 0

ICAIdea

0x78

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.17/35

Segn se mencion anteriormente, es conveniente disponer de un modo de direccionamiento


directo a memoria capaz de alcanzar todo el rango de direcciones para permitir que un programa
pueda saltar a cualquier posicin de memoria. En el MIPS son necesarios 32 bits para acceder a
todo el mapa de memoria. Como las instrucciones en el MIPS tienen un tamao fijo de 32 bits, no
se puede especificar una direccin completa de 32 bits dentro de la instruccin.
La solucin adoptada es la de utilizar un nuevo formato de instruccin, denominado tipo J
(de Jump), que contiene el cdigo de operacin de 6 bits, seguido de 26 bits para especificar una
direccin. Al igual que con el direccionamiento directo relativo al PC, se puede almacenar en
este campo de 26 bits la direccin de palabra en lugar de la direccin de byte, ya que todas las
instrucciones tienen un tamao de 32 bits y estn alineadas en posiciones mltiplos de 4. Por tanto,
los 26 bits se extienden as a 28 bits, con los dos bits menos significativos puestos a cero. Faltan
por especificar los 4 bits superiores. La solucin adoptada por los arquitectos del MIPS es la de
copiar sin ms los 4 bits superiores del PC actual, de forma que los saltos se restringen a zonas de
256 MB (64 Mega-instrucciones). Si el sistema operativo sita nuestro programa dentro de uno de
esos bloques de 256 MB, no habr ningn problema.

Ejercicios
1.

Es posible saltar fuera de una zona de 256 MB? Cmo?

2.

En la instruccin de ensamblador beq $s0, $s1, L1, la etiqueta L1 pertenece a una instruccin situada 200.000 bytes por encima de ella. Escriba una secuencia de instrucciones
MIPS que permitan realizar dicho salto condicional.

Ejemplo
Inmediato
op

rs

st

rd

sh

fu

0x8000 B: sll $t1, $s2, 2

18

0x8004

add $t1, $t1, $s1

17

32

0x8008

lw $t0, 0($t1)

35

0x800C

bne $t0, $s4, F

20

0x8010

add $s2, $s2, $s3

18

18

0x8014

j B

0x8018 F: add $t0, $zero,$zero

ICAIdea

19

32

32

0x2000
0

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.18/35

En la transparencia se muestra el cdigo mquina generado por el cdigo en ensamblador del


MIPS del bucle mostrado en la pgina 58 del tema 3b. Se ha supuesto que el cdigo se ha situado
a partir de la posicin de memoria 0x8000.
Como se puede apreciar, en la instruccin de salto condicional situada en la direccin 0x800C,
el desplazamiento es de 2. Por tanto el salto se realizar dos instrucciones ms all de la siguiente
instruccin al salto, es decir:
0x800C + 4 + 2*4 = 0x8018
Por otro lado, la instruccin de salto incondicional situada en la direccin 0x8014 realiza
un salto a la direccin 0x8000. Por tanto, en la instruccin se codifica como direccin de salto:
0x8000/4 = 0x2000.

Ejercicio
Es el cdigo anterior reubicable? Por qu? En caso negativo, modifique el programa anterior
para que sea reubicable, incluyendo la codificacin en cdigo mquina. Para esta ltima parte puede
usar el apndice A de (Patterson y Hennessy, 2000).

Direccionamiento indirecto
Mediante uno de los modos de direccionamiento
anteriores se obtiene la direccin del objeto.
Los modos usados son los absolutos y los indirectos a
registro base e ndice.
Se necesita otro acceso a memoria para leer el objeto.
Aunque es til para manejo de punteros, muchas
arquitecturas (p. ej. MIPS) no lo incluyen.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.19/35

En el direccionamiento indirecto, la direccin especificada en la instruccin no es la del objeto,


sino la de la direccin del objeto. Es por tanto necesario un acceso a memoria adicional para leer
el objeto una vez conocida su direccin.
Aunque en teora el direccionamiento indirecto se podra aplicar a todos los modos de direccionamiento directos, en la prctica se aplica a los absolutos y a los relativos a registro base y a
registro ndice.
Este modo de direccionamiento es til para el manejo de punteros. No obstante existen muchas
arquitecturas, como por ejemplo el MIPS y en general todas las RISC, que no lo incluyen.

Dir. indirecto absoluto de registro


La direccin del objeto est en el registro indicado en
la instruccin.
op

rs=2
0
1
2

rt

0x27

0x74

0x74

31

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.20/35

En este modo de direccionamiento, en la instruccin se especifica un registro en el que est


almacenada la direccin del objeto.
El MIPS no dispone de este modo de direccionamiento, aunque se puede generar a partir de
otro.

Ejercicio
Si el registro s0 contiene un puntero a un entero que se desea cargar en el registro t0, escriba
una instruccin MIPS para hacerlo.

Dir. indirecto absoluto de memoria


En la instruccin se especifica la direccin del puntero
al objeto.
La direccin puede ser completa o a pgina base.
Dir=0x74

Direccin del objeto

0x27

Objeto

ICAIdea

0x74

0x27

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.21/35

En este modo de direccionamiento, en la instruccin se especifica la direccin de memoria


en la que se encuentra un puntero al objeto al que se desea acceder. Dicha direccin de memoria
puede ser completa (ms bits en la instruccin, pero el puntero puede estar en cualquier parte del
mapa de memoria) o a pgina base (menos bits en la instruccin pero el puntero ha de estar situado
en una zona restringida de la memoria). En ambos casos el objeto puede estar en cualquier parte
de la memoria, ya que el puntero contendr la direccin completa del objeto.
Aunque el MIPS no dispone de este modo de direccionamiento de forma explcita, a partir de
uno de sus modos de direccionamiento se puede generar un direccionamiento indirecto absoluto
de pgina base.

Ejercicio
Se desea cargar en t0 un entero cuya direccin est almacenada en la posicin de memoria
0x1000. Escriba una secuencia de instrucciones MIPS para hacerlo. En qu zonas de memoria
han de residir los punteros para poder usar este modo de direccionamiento en el MIPS?

Dir. indirecto relativo a reg. base


La direccin del puntero se obtiene como
base+desplazamiento.
til para tablas de punteros.
Tipo I

6 bits 5 bits 5 bits


op rs=2 rt
0
1
2

16 bits
Despl=4

0x27

0x74

0x70
0x27

31

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.22/35

En este modo de direccionamiento se aplica un direccionamiento relativo a registro base para


obtener la direccin del objeto.
Este modo permite trabajar fcilmente con tablas de punteros, ya que variando el desplazamiento se obtiene cada uno de los objetos a los que apunta cada uno de los elementos del vector de
punteros.
En la figura se muestra grficamente un modo de direccionamiento indirecto relativo a registro
base. Se ha tomado como ejemplo el MIPS, aunque hay que destacar que el MIPS No dispone de
este modo de direccionamiento. En el MIPS hay que realizar el acceso al objeto explcitamente:
lw $t0, 4($v0)
lw $t0, 0($t0)
Como se puede observar, en primer lugar se carga la direccin del objeto en el registro t0 y a
continuacin se carga el objeto, tambin en el registro t0.

Dir. indirecto relativo a reg. ndice


Existen dos posibilidades:
Post-indexado: La direccin de referencia de la
instruccin contiene un puntero al que se le suma
el registro ndice: dir = ((ref))+(Ri).
Pre-indexado: La direccin del puntero al objeto
est almacenada en la direccin de referencia +
Ri: dir = ((ref)+(Ri)).
Nota: ref es el campo de la instruccin que contiene la direccin
de referencia.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.23/35

Al igual que en el direccionamiento directo relativo a registro ndice, en la instruccin se


especifica una direccin de referencia y un registro ndice.
Segn el momento en el que se realiza la indexacin, existen dos modos de direccionamiento
indirecto relativo a registro ndice (tambin llamado para abreviar indirecto e indexado):
Post-indexado: En este caso se accede a la direccin de referencia para obtener una
direccin a la que se le suma el contenido del registro ndice. El resultado de esta suma
ser la direccin a la que hay que acceder para obtener el objeto. En notacin de
transferencia de registros, la direccin a la que se accede es: ((ref))+(Ri). La utilidad de
este modo de direccionamiento es la de poder acceder a cada uno de los elementos de un
vector conociendo la direccin del puntero a su primer elemento. El inconveniente de usar
este modo para esta aplicacin es su gran ineficiencia Sabra explicar por qu?
Pre-indexado: En este caso se suman en primer lugar la direccin de referencia y el contenido del registro ndice para obtener el puntero al objeto. A continuacin se usa la direccin obtenida para acceder al objeto. En notacin de transferencia de registros, la direccin
a la que se accede es: ((ref)+(Ri)). Este modo de direccionamiento es til para acceder a
cada uno de los elementos a los que apunta una tabla de punteros.

Dir. indirecto relativo a reg. base indexado


Es una combinacin del direccionamiento indirecto
relativo a reg. base y el indirecto post-indexado.
La direccin del objeto se obtiene como:
((Rb)+(despl))+(Ri)
Siendo:
Rb: Registro base.
despl: Campo de la instruccin que contiene el
desplazamiento.
Ri: Registro ndice.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.24/35

En la pgina 12 se expuso brevemente el direccionamiento directo a registro base con desplazamiento e indexado como una combinacin del direccionamiento a registro base con el direccionamiento indexado. Este direccionamiento, disponible en el Pentium, calcula la direccin del
objeto como (Rb)+(despl)+(Ri), es decir, la direccin a la que se accede es la suma del contenido
del registro ndice ms el desplazamiento almacenado en el campo despl de la instruccin ms el
contenido del registro Ri.
En el direccionamiento indirecto relativo a registro base con desplazamiento e indexado, se
accede a la direccin (Rb)+(despl) para obtener un puntero al que se le suma el contenido del
registro Ri para obtener la direccin final del objeto. En notacin de transferencia de registros, la
direccin del objeto se obtiene como: ((Rb)+(despl))+(Ri).
La utilidad de este modo de direccionamiento es la de poder acceder a los elementos de un
vector a partir de una tabla de punteros a una serie de vectores, lo cual no es muy comn en la
prctica. Al igual que el direccionamiento indirecto con post-indexado, este modo de acceder a los
elementos de un vector no es muy eficiente Por qu?

Ej. CISC: Formatos de instruccin


F1 CO LI MD

CD

F2 CO LI MD RT1 RT2

CD

CO Cdigo de operacin.
LI Longitud de instruccin.
MD Modo de direccionamiento.
CD Campo de datos.
RTx Identificacin de registro.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.25/35

En las siguientes transparencias se va a estudiar un ejemplo de aplicacin de los modos de


direccionamiento vistos hasta ahora a una mquina CISC ficticia.
Dicha mquina CISC tiene un bus de datos de 16 bits y un bus de direcciones de 16 bits.
Las instrucciones se codifican segn los dos formatos mostrados en la figura: F1 y F2. Los dos
formatos comienzan con un primer byte en el que se codifica el cdigo de operacin, la longitud
de la instruccin y el modo de direccionamiento empleado. En el segundo byte se encuentra un
dato inmediato en el formato F1 o dos identificadores de registro en el formato F2. En el formato
F2 se incluye una segunda palabra de 16 bits con un campo de datos que puede contener un dato
inmediato o una direccin.
En las siguientes transparencias se muestran los distintos modos de direccionamiento soportados por esta mquina CISC. Se indica para cada modo el formato de instruccin utilizado (Fx),
el contenido del campo de datos (CD), la direccin final a la que se accede (DF) y el nmero de
accesos de memoria empleados para ejecutar una instruccin que realice ACC
(ACC)+(DF).
ste nmero de accesos se divide en captacin (C) y ejecucin (E) de la instruccin.


Ej. CISC: Modos de direccionamiento


Tipo Dir.

Fx

CD

DF

C+E

Comentario

Inmediato

F1

Dato 8b

1+0

Op. con cte. = 8 b

F2

Dato 16b

2+0

Op. con cte. = 16 b

F1

Dir(dato)

(CD)

1+1

Acceso pag. base

F2

Dir(dato)

(CD)

2+1

Acceso toda mem.

Indirecto

F1

Dir(Dir(dato))

((CD))

1+2

Punteros en mem.

Directo Reg.

F1

Id. Reg.

RT

1+0

Op. con reg.

Indir. Reg.

F1

Id. Reg.

(RT)

1+1

Punt. en reg.

Directo

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.26/35

En esta transparencia y en la siguiente se muestran los modos de direccionamiento soportados


por esta arquitectura CISC ficticia.
Existen dos modos de direccionamiento inmediato, en funcin de la longitud necesaria para la
constante. Si sta es pequea, se podr codificar dentro del campo de datos (CD) de la instruccin
con formato F1. Con ello se consigue una operacin rpida, ya que slo es necesario un ciclo
de acceso para leer la instruccin. Si la constante necesita 16 bits para codificarse, entonces es
necesario usar el formato de instruccin F2, necesitndose entonces 2 ciclos de acceso a memoria
para captar la instruccin.
Para direccionamiento directo absoluto de memoria, este computador dispone de direccionamiento a pgina base usando el formato F1, con lo que se necesita 1 acceso para captar la instruccin y
otro para captar el operando desde la memoria. Si se necesita acceder a toda la memoria es necesario usar el formato F2 para disponer de un campo de datos de 16 bits. El inconveniente es un
ciclo adicional para captar la segunda palabra de la instruccin.
El modo de direccionamiento indirecto absoluto slo est soportado en pgina base utilizando
el formato F1. Ntese que ahora es necesario un ciclo de captacin para la instruccin y dos accesos
adicionales para leer el dato: un primer acceso para leer el puntero al dato y un segundo acceso
para leer el dato.
Por ltimo, existen dos modos de direccionamiento con registro: directo, en el cual se usa el
dato contenido en el registro y por tanto slo es necesario un ciclo de captacin; e indirecto, en el
cual el registro contiene la direccin del dato, lo que implica un acceso a memoria adicional para
leer el dato.

Ejercicio
Dnde han de residir los punteros para poder utilizar el direccionamiento indirecto? Cuntos
accesos a memoria seran necesarios en un modo de direccionamiento indirecto si queremos que el
puntero utilizado pueda estar en cualquier parte de la memoria?

Ej. CISC: Modos de direccionamiento


Tipo Dir.

Fx

CD

DF

Relativo CP

F1

Despl.

(CP)+(CD)

1+1

Saltos cercanos

Relativo Ind.

F1

Ref.

(CD)+(Rin)

1+1

Vectores

F2

Ref.

(CD)+(Rin)

2+1

F1

Despl.

(Rb)+(CD)

1+1

F2

Despl.

(Rb)+(CD)

2+1

Relativo base

ICAIdea

C+E Comentario

Estructuras datos

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.27/35

El modo de direccionamiento relativo al contador de programa usa el formato F1, con lo que
slo se permiten saltos cortos (del tamao del CD). El nmero de accesos es uno de captacin ms
otro para captar el objeto, que en este modo de direccionamiento ser una instruccin. 1
El modo de direccionamiento relativo a registro ndice dispone de dos formatos: F1 cuando
la direccin de referencia est en pgina base y F2 cuando dicha direccin de referencia est en
cualquier parte de la memoria. En el primer caso se necesita un ciclo para captar la instruccin
y otro para acceder al dato, mientras que en el segundo se necesitan dos ciclos para captar la
instruccin.
El modo de direccionamiento relativo a registro base dispone tambin de dos formatos posibles, en funcin de la longitud necesaria para el desplazamiento.

1 Aunque

este modo de direccionamiento se utiliza siempre para saltos, nada impide en teora
usarlo para acceder a los datos del programa. No obstante, en la mayora de las aplicaciones los
datos y los programas se sitan en segmentos de memoria separados para una mayor facilidad
de programacin. Por ejemplo en el MIPS los programas de usuario se sitan desde 0x400000 a
0x0FFFFFF y los datos desde 0x1000000 a 0x7FFFFFFF.

Ej. CISC: Modos de direccionamiento


Tipo Dir.

Fx

CD

DF

C+E Comentario

Ind. postindex

F1

Dir(vec)

((CD))+(Rin)

1+2

Punt a vector

Ind. preindex

F1

Dir(vec)

((CD)+(Rin))

1+2

Vec de punt.

Ind. Reg. Base

F1

Despl.

((Rb)+(CD))

1+2

Vec de punt.

Ind. Base+Indx

F2

Dir.

((Rb)+(CD))+(Rin)

2+2

Vec de vec
de punt.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.28/35

El modo de direccionamiento indirecto relativo a registro ndice con post-indexado utiliza el


formato F1, lo cual implica que la direccin de referencia ha de estar en pgina base. El contenido
de dicha direccin ser normalmente la direccin del primer elemento de un vector, por lo que
para acceder a cada uno de los elementos basta con situar su ndice en el registro ndice. Ntese
que son necesarios ahora un ciclo de captacin y dos de ejecucin: un primer acceso para leer la
direccin base del vector y poder as calcular la direccin del dato sumando a dicha direccin base
el contenido del registro ndice. Una vez calculada la direccin del dato se realiza otro acceso para
acceder a l.
El modo de direccionamiento indirecto relativo a registro ndice con pre-indexado se utiliza
para acceder a objetos a travs de una tabla de punteros. Al igual que el post-indexado, se utiliza
el formato F1, con lo que la tabla de punteros ha de estar en pgina base. Para acceder al objeto
se realiza un acceso para leer la direccin base a la que se le suma el registro ndice para obtener
la direccin del objeto. Son necesarios por tanto tres accesos: uno para la instruccin, otro para la
base del vector de punteros y un tercero para el objeto.
El modo de direccionamiento indirecto relativo a registro base es similar al indirecto relativo a
registro ndice con pre-indexado. La nica diferencia es que el registro base contendr la direccin
de una tabla de punteros y para acceder a cada uno de los elementos de dicha tabla se usan distintos
desplazamientos dentro del CD de la instruccin.
Por ltimo el direccionamiento indirecto relativo a registro base e indexado se puede utilizar
para acceder a los elementos de un vector a partir de una tabla de punteros a una serie de vectores.
Mediante un direccionamiento indirecto a registro base se obtiene la direccin del primer elemento
del vector. A dicha direccin se le suma el contenido de un registro ndice para acceder al elemento
deseado dentro del vector.
Como se dijo antes, la utilidad de estos cuatro ltimos modos de direccionamiento en la prctica no es mucha, por lo que las arquitecturas RISC optan por no incluirlas en su repertorio de
modos de direccionamiento. Esto evita complicar innecesariamente la CPU con modos de direccionamiento que se utilizan rara vez.

Regularidad y ortogonalidad
Regularidad: Inexistencia de casos particulares.
Es ms fcil de programar en ensamblador.
El diseo del compilador es mas sencillo.
Ortogonalidad: Se puede usar cualquier modo de
direccionamiento para cada uno de los operandos y el
resultado.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.29/35

Un buen juego de instrucciones ha de ser regular y ortogonal.


Por regular se entiende que no presente casos particulares, lo cual facilita la programacin en
ensamblador y el diseo de compiladores. Por ejemplo el MIPS puede usar cualquiera de sus 32
registros en todas sus operaciones. Adems la mayora de las instrucciones son de tres direcciones:
un resultado y dos operandos. Sin embargo en este aspecto presenta una irregularidad con las
instrucciones de multiplicacin mult y divisin div, ya que como recordar, estas aceptan slo
dos operandos y dejan el resultado en los registros hi y lo. No obstante el ensamblador admite
la pseudoinstruccin (mul) que despus de multiplicar transfiere el contenido del registro lo a un
registro destino. As para multiplicar s0 por s1 y depositar el resultado en t0 basta con hacer
mul $t0, $s0, $s1. El Pentium en cambio tiene ciertos registros que slo pueden usarse con
determinadas instrucciones.
En cuanto a la ortogonalidad, el MIPS no es nada ortogonal, pues en las operaciones slo admite direccionamiento directo de registro o un operando inmediato. El Pentium en cambio admite
operaciones registro-registro, registro-memoria y memoria-registro, lo cual lo hace ms ortogonal
(faltan las operaciones memoria-memoria). El colmo de la ortogonalidad lo tenemos en el VAX,
hoy obsoleto, en el cual tanto el resultado como los operandos podan estar en registros o en memoria, pudindose utilizar cualquiera de los modos de direccionamiento disponibles.

Ej. CISC: Pentium


En las siguientes transparencias se muestra la
arquitectura a nivel de ensamblador del Pentium.
Slo se discute el modelo de 32 bits, pues el de 16 bits
est claramente en desuso (MS-DOS) y es bastante
peor.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.30/35

Ej. CISC: Pentium. Registros


Name

Use

EAX

GPR 0

ECX

GPR 1

EDX

GPR 2

EBX

GPR 3

ESP

GPR 4 (Stack Pointer)

EBP

GPR 5 (Frame Pointer)

ESI

GPR 6 (Source Index)

EDI

GPR 7 (Destination Index)

EIP
EFLAGS

ICAIdea

31

CS

Code segment pointer

SS

Stack segment pointer (top of stack)

DS

Data segment pointer 0

ES

Data segment pointer 1

FS

Data segment pointer 2

GS

Data segment pointer 3


Instruction pointer (PC)
Condition codes

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.31/35

En la figura se muestran los registros disponibles en el Pentium para operaciones con enteros.
Los 8 primeros EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI son considerados de propsito
general, aunque algunos de ellos tienen adems otras tareas especficas. Por ejemplo el ESP es
el puntero de pila y el EBP puede ser usado como puntero al bloque de activacin. Los registros
ESI y EDI se usan en las instrucciones de transferencia de cadenas de caracteres para apuntar
respectivamente al origen y destino de los caracteres transferidos.
Los 6 registros de 16 bits CS, SS, DS, ES, FS, GS son los punteros de segmentos en el
modo real o los descriptores de segmento en modo protegido. Aunque en modo real (MS-DOS) el
programador tena que acceder a estos registros para el manejo de la memoria, en modo protegido
son slo usados por el sistema operativo. En cualquier caso, no estn disponibles para usarlos en
las aplicaciones.
Por ltimo el registro EIP es el contador de programa y el registro EFLAGS contiene los bits
de estado (banderas) del procesador. Estos bits se activan automticamente al ejecutarse ciertas
instrucciones. Por ejemplo existe un bit denominado Z que se activa cada vez que el resultado de
una operacin es cero.
Como puede observar, el banco de registros del Pentium, si se compara con el del MIPS,
es bastante ms limitado. Existen slo 8 registros de propsito general en lugar de los 31 del
MIPS, pero adems 4 de ellos tienen funciones muy especficas, lo que hace que sea an ms
difcil mantener un gran nmero de variables dentro de estos registros durante la ejecucin de
los programas. Lamentablemente, la necesidad de mantener la compatibilidad con el 8086 hace
imposible introducir nuevos registros para mejorar las prestaciones. Lo nico que se ha podido
hacer ha sido aumentar su tamao de 16 a 32 bits, pero nada ms.

Ej. CISC: Pentium. Operandos


El Pentium es una mquina de dos direcciones. las
combinaciones permitidas son las siguientes:

ICAIdea

Fuente1/Destino

fuente2

Registro

Registro

Registro

Inmediato

Registro

Memoria

Memoria

Registro

Memoria

Inmediato

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.32/35

Las instrucciones aritmticas y lgicas del Pentium admiten dos argumentos, de los cuales el
primero hace las veces de fuente y de destino, es decir, el resultado de la operacin se sobreescribe
en el primer argumento. Esto hace an ms difcil mantener las variables de los programas en los
registros internos de la CPU, ya que uno de los argumentos se destruye en la operacin, por lo que
si lo volvemos a necesitar despus hay que volver a cargarlo de memoria (o guardarlo en la pila y
recuperarlo despus si es un resultado intermedio que no est an almacenado en la memoria).
Una clara ventaja del Pentium con respecto al MIPS (y en general con respecto a todos los
RISC) es la de poder especificar como uno de los operandos una palabra situada en memoria,
usando cualquiera de los modos de direccionamiento descritos a continuacin. Esta caracterstica
facilita la programacin, pero dificulta la implementacin del procesador.

Ej. CISC: Pentium. Modos de direccionam


Los modos de direccionamiento del Pentium son
irregulares:
No todos los modos pueden usarse con todas las
instrucciones.
No todos los registros pueden usarse en todos los
modos
Esto hace difcil la escritura de programas en ensamblador y de los compiladores.

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.33/35

Un ejemplo de instruccin que no soporta todos los modos de direccionamiento es la instruccin out que sirve para enviar un dato a un puerto de entrada/salida. Dicha instruccin necesita
que la direccin del puerto est en el registro DX.
Tampoco algunos registros pueden usarse con otros modos de direccionamiento a memoria.
Por ejemplo, para copiar un dato al registro ES no puede hacerse mediante un direccionamiento
inmediato con la instruccin:
mov es, 023h ; Ilegal
pues este tipo de instruccin slo soporta el modo registro, registro. Por tanto para almacenar
un valor en el registro es primero hay que colocar dicho valor en un registro de propsito general
(por ejemplo ax) y luego copiar dicho registro al es, tal como se muestra a continuacin:
mov
mov

ax, 023h
es, ax

Obviamente estas excepciones dificultan la labor de los programadores que han de recordar
un gran nmero de excepciones y casos particulares.

Ej. CISC: Pentium. Modos de direccionam


Los modos de direccionamiento soportados son:
Inmediato (8, 16 o 32 bits)
Directo absoluto de registro
Directo absoluto de memoria (dir 32 bits)
Indirecto absoluto de registro (ni ESP ni EBP)
Directo relativo a registro base (no ESP)
Directo relativo a reg. base escalado e indexado
Directo relativo a pila
Directo relativo al CP (IP)

ICAIdea

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.34/35

Siguiendo la filosofa de los procesadores RISC, el Pentium soporta un gran nmero de modos
de direccionamiento.
En primer lugar los valores inmediatos pueden ser de hasta 32 bits, lo cual contrasta con el
MIPS, en el cual slo pueden ser de 16 bits.
En segundo lugar se puede especificar la direccin absoluta de memoria de 32 bits dentro de
una instruccin, lo cual permite usar fcilmente cualquier posicin de la memoria.
Al igual que el MIPS es posible acceder a una posicin de memoria cuya direccin est almacenada en un registro de propsito general. No obstante dicho registro no puede ser ni ESP ni
EBP.
Tambin dispone de un modo de direccionamiento relativo a registro base, pudendose usar
desplazamientos de 8 bits o de 32 bits, lo que permite nuevamente acceder a toda la memoria.
El modo relativo a registro base escalado en indexado (SIB en la terminologa Intel) es bastante
potente, permitiendo acceder a cualquier elemento de un vector en una sola operacin. En este
modo se especifica un registro base, al que se le suma un ndice multiplicado por un factor de
escala que puede ser 1, 2, 4 u 8 para permitir usar vectores con elementos de 1, 2, 4 u 8 bytes.
Al resultado se le puede sumar un desplazamiento adicional de 8 o 32 bits. Por ejemplo, si el
comienzo del bloque de activacin est almacenado en el registro ebp y de desea almacenar un 4
en el elemento 3 de un vector de enteros que comienza en la posicin 7 del bloque de activacin,
se puede hacer:
mov eax, 3
mov [dword ebp+4*eax+7], dword 4
El direccionamiento a pila est soportado mediante las instrucciones push y pop.
Por ltimo, el direccionamiento relativo al CP admite desplazamientos de 8 o de 32 bits.

Formatos de instruccin. Pentium

Bytes

04

13

01

01

04

04

PREFIX

OPCODE

MODE

SIB

DISPLACEMENT

IMMEDIATE

Bits

Bits

ICAIdea

SCALE

INDEX

MOD

REC

R/M

BASE

Estructura de Computadores Cap. 4: Repertorio de instrucciones. Direccionamiento y formatos. p.35/35

En la figura, que ya se ha mostrado en el captulo 3, se ilustra el formato de las instrucciones


del Pentium.
En el se puede apreciar cmo se codifican los modos de direccionamiento, el cual se realiza
entre el cdigo de operacin y los dos bytes siguientes, denominados MODE y SIB. El primero de
ellos indica el modo de direccionamiento del operando que est en memoria. Mediante los 3 bits
R/M se indica el registro usado en el direccionamiento y con los 2 bits MOD se especifica el modo
de acceso: Directo absoluto de registro (11), indirecto absoluto de registro (00), directo relativo a
registro base con desplazamiento de 8 bits (01) o de 32 bits (10). Las combinaciones no usadas
debido a que los registros ebp y esp no pueden usarse en algunos modos se usan para especificar
el direccionamiento directo y el direccionamiento SIB. En este ltimo caso se necesita incluir el
byte SIB para especificar los dos registros base e ndice as como la escala por la que se multiplica
al ndice.
Los dos ltimos posibles campos sirven para almacenar el desplazamiento (DISPLACEMENT)
de 1, 2 o 4 bytes 1 y un dato inmediato, tambin de 1, 2 o 4 bytes.
Una exposicin ms detallada puede encontrarse en (Intel, 2003).

Referencias
de Miguel Anasagasti, P. (2000). Fundamentos de los computadores. Paraninfo-Thomson learning.
Intel (2003). IA-32 Intel R Architecture Software Developers Manual. Volume 2: Instruction Set
Reference. Intel corporation. Disponible on-line en:
http://developer.intel.com/design/pentium4/manuals/245471.htm.
Patterson, D. A. y Hennessy, J. L. (2000). Estructura y diseo de computadores. Interficie circuitera/programacin. Revert.
1 El

desplazamiento de 2 bytes slo se usa en el modo real (compatibilidad con 8086).

Vous aimerez peut-être aussi