martes, 29 de abril de 2008

2.2.1.- INSTRUCCIONES

Se puede utilizar LOAD y STORE en cualquiera de los dos formatos 1a y 1b, en los que DEST sería el registro a cargar o almacenar, los 19 bits de orden inferior de la instrucción determinan cómo se realiza el calculo de la dirección efectiva de memoria. Se proporcionan dos modos de direccionamiento (formatos 1a y 1b):

1- Dirección de memoria = ORG1 + ORG2

2- Dirección de memoria = ORG1 + constante de 13 bits con signo codificado en complemento a dos, perteneciente al rango de intervalo cerrado –4096, 4095.

Los 32 registros se pueden usar tanto como registros de origen o como de destino (ORG1 u ORG2)

img210/4474/001md7.jpg

Volviendo al problema sobre cómo colocar en cualquiera de ellos un valor de 32 bits si cualquier instrucción utiliza como máximo 32 bits, suponiendo que se desea colocar en el registro %4 el valor FFFF0000h. La instrucción debería utilizar algunos bits para codificar el 'móv.' y qué registro quiero utilizar con lo cual quedan menos de 32 bits para almacenar el CPU SPARC – 5 valores inmediatos FFFF0000h. La respuesta a la pregunta es claramente que no se puede realizar con una sola instrucción.

Dijimos que para realizar esta tarea el procesador SPARC provee una instrucción especial llamada SETHI que permite colocar un valor de hasta 22 bits en los 22 bits más significativos de algún registro. Y que utilizando la instrucción OR es posible colocar los 10 bits menos significativos de la constante en los 10 bits menos significativos del registro.

La forma de direccionar memoria utilizada por los procesadores SPARC es a través de registros y tiene la siguiente sintaxis: #desp13 (registro) o (1) (registro) (registro) (2).

Aquí desp13 es un número de 13 bits con signo codificado en complemento a 2, es decir que pertenece al rango [-4096,4095] y registro es cualquiera de los 32 registros del procesador.

La semántica de la expresión (1), es decir a qué dirección representa, está dada por:

(Registro)+desp13 y la semántica de la expresión (2) es (registro1) + (registro2) (registro) es el valor almacenado en el registro

No hay comentarios: