Búsqueda personalizada

martes, 15 de enero de 2008

Mapa de Registros Maquina Sparc

Los procesadores SPARC realizan un “sistema de ventanas”. Cada ventana son 24 registros (a los cuales se le suman 8 más que son globales, o sea, accesibles por todas las ventanas; la suma de 32 registros es visible en todo momento) que pertenecen a un procedimiento o subprograma. A medida que se van creando nuevas ventanas los registros de salida de la ventana actual se solapan sobre los de entrada de la ventana siguiente. Los CPU registros locales y de salida de la ventana actual son diferentes a los registros locales y de salida de la ventana siguiente. Esta figura lo muestra esquemáticamente:

En la figura, CWP es el índice de la ventana actual. El comando SAVE y las TRAPS decrementan dicho índice, y RESTORE y RETT lo incrementan.

Para verificar si un número de ventana es válido se utiliza el registro WIN (Window

Invalid Mask) de 32 bits. Si el bit i-ésimo está en 1 indica que esa ventana inválida y si se intenta acceder esta, segenera un error (TRAP “window_overflow”).

El registro G0 está fijo por medio del hardware con el valor 0. En él, los almacenamientos no alteran su valor. Los registros G1 a G7 son globales y pueden contener variables enteras, apuntadores a tablas u otros datos importantes. Los registros de salida son de O0 a O7 y son usados por los procedimientos para pasar parámetros a los procedimientos que llaman. El primer parámetro va al registro O0, el siguiente al O1 y así sucesivamente. El registro O6 (AE) se utiliza como apuntados a la pila de memoria. La pila se usa para los parámetros que exceden los registros, espacio de asignación dinámica de la pila, ventanas apiladas en memoria, así como para salvar registros de punto flotante, apuntadores a buffers en donde los procedimientos llamados pueden enviar

estructuras y arreglos de datos, etc. La instrucción CALL (llamada) deposita la dirección de retorno en el registro O7. Los 8 registros para variables locales L0 a L7, se pueden usar en la forma que el programador o el compilador considere más conveniente. Las 8 variables de entrada I0 a I7 son los parámetros que son pasados al procedimiento actual por el que le llama: Los registros no utilizados pueden contener variables locales adicionales. I6 (FP) es el apuntador de marco que se usa para direccionar variables en el marco de pila. A diferencia de SP que solo puede cambiar mientras el procedimiento se ejecuta, FP apunta la misma palabra en memoria durante toda la ejecución del procedimiento, siendo más apropiado para la indexación que el SP. La dirección de retorno del procedimiento se encuentra contenida en el registro I7.

Por lo tanto y en general, existen 4 grupos de registros diferentes:

Registros Globales : G0-G1

Registros de Salida: O0-O7

Registros Locales: L0-L7

Registros de Entrada: I0-I7

Set de Intrucciones Maquina Sparc

Aqui va otra info sobre maquinas sparcs, lo hago por que por lo general cuesta encontrar informacion al respecto, espero que les sirva.

op1, op2 y op3 pueden ser un registro, dirección de memoria, desplazamiento

Instrucciones aritméticas

ADD[cc]: Suma op1 a op2 y almacena el resultado en op3.
ADDX[cc]: Suma op1 a op2 y el carry y almacena el resultado en op3.
SUB[cc]: Resta op2 a op1 y almacena el resultado en op3
SUBX[cc]: Resta op2 y el carry a op1 y almacena el resultado en op3

Instrucciones lógicas

AND[cc]: Realiza el "and" bit a bit entre op1 y op2 y almacena el resultado en op3.
OR[cc]: Realiza el "or" bit a bit entre op1 y op2 y almacena el resultado en op3.
XOR[cc]: Realiza el "xor" bit a bit entre op1 y op2 y almacena el resultado en op3.

Instrucciones de desplazamiento

SLL: Realiza un shift a la izquierda de los bits de op1, op2 lugares y almacena el
resultado en op3. Sólo considera los 5 bits más significativos de op2 para determinar el valor del contador. Rellena con ceros.
SRL: Realiza un shift a la derecha de los bits de op1, op2 lugares y almacena el
resultado en op3. Sólo considera los 5 bits más significativos de op2 para determinar el valor del contador. Rellena con ceros.
SRA: Realiza un shift a la derecha de los bits de op1, op2 lugares y almacena el
resultado en op3. Sólo considera los 5 bits menos significativos de op2 para determinar el valor del contador. Realiza expansión de signo, es decir, rellena con el bit más significativo de op1.

Instrucciones de memoria

LDSB: Carga en op2 el valor del byte almacenado en la dirección de memoria op1.
realiza expansión de signo.
LDSH: Carga en op2 el valor de la media palabra (2 bytes) almacenada a partir de
la dirección de memoria op1. Realiza expansión de signo.
LDUB: Carga en op2 el valor del byte almacenado en la dirección de memoria op1 .
no realiza expansión de signo. Rellena con ceros.

LDUH: Carga en op2 el valor de la media palabra (2 bytes) almacenada a partir de la dirección de memoria op1. No realiza expansión de signo. Rellena con
ceros.
LD: Carga en op2 el valor de la palabra (4 bytes) almacenada a partir de la
dirección de memoria op1.
STB: Guarda en el byte ubicado en la dirección de memoria op2 los 8 bits menos
significativos de op1.
STH: Guarda en la media palabra (2 bytes) ubicada a partir de la dirección de
memoria op2 los 16 bits menos significativos de op1.
ST: Guarda en la palabra (4 bytes) ubicada en la dirección de memoria op2 el
valor de op1.
SWAP: Intercambia los valores entre la palabra ( 4 bytes ) almacenada en la
dirección op1 en el registro op2 .
SETHI: Coloca en los 22 bits más significativos de op2 el valor op1.


Instrucciones de bifurcación incondicional

CALL: Coloca en el registro %15 el valor actual del PC (es decir de la instrucción
que contiene el CALL) y realiza un salto incondicional a la dirección
PC+4*desp30
JMPL: Coloca en el registro op2 el valor actual del PC (es decir de la instrucción
que contiene el JMPL) y realiza un salto incondicional a la dirección op1.
RETT: Es usada para retornar de un servicio a interrupción. Verifica que el retorno
sea válido y en caso de serlo transfiere el control a la dirección op1.


Instrucciones para manejo de ventanas

SAVE: Guarda la ventana del procedimiento llamador.
coloca en el registro op3 de la nueva ventana el valor op1 + op2 calculado
a partir de los valores de los registros de la ventana vieja.
RESTORE: Guarda la ventana del procedimiento llamador.
coloca en el registro op3 de la nueva ventana el valor op1 + op2
calculado a partir de los valores de los registros de la ventana vieja.






Instrucciones de bifurcación condicional

BA: Esta instrucción es en realidad un salto incondicional pero es equivalente en
formato a todas las demás que realizan saltos condicionales en el sentido de
realizar un salto a la dirección PC+4*op1 considerando el signo de op1.
BNE: En caso que la flag de Zero sea 0 realiza un salto a la dirección PC+4*op1
considerando el signo de op1.
BE: En caso que la flag de Zero sea 0 realiza un salto a la dirección PC+4*op1
considerando el signo de op1.
BG: Si la condición anterior se cumple entonces implica que en caso de haber sido
realizada una resta (una comparación) A-B de dos números A y B codificando
enteros en complemento a 2 entonces AB y AB entonces A > B y se
realiza un salto a la dirección PC+4*op1 considerando el signo de op1.
BLE: La condición es la negación del caso anterior ( ver BG) es decir que el salto
se realiza si A B considerando el signo.
BGE: La condición se cumple si N = V y por lo tanto es verdadera cuando A B
considerando el signo (ver BG) y en ese caso se realiza el salto.
BL: La condición es la negación del caso anterior (ver BGE)
se produce si A < B (ver BG) considerando el signo.
BGU: Si la condición anterior se cumple entonces implica que en caso de haber
sido realizada una resta (una comparación) C-D de dos números C y D
codificando enteros sin signo entonces C D y C D entonces C > D y se
realiza un salto a la dirección PC+4*op1 considerando el signo de op1.
BLEU: Es la negación de la condición anterior es decir que se realiza el salto si
C D (ver BGU) sin considerar el signo de C y D.
BCC: En caso que la flag de Carry sea 0 realiza un salto a la dirección PC+4*op1
considerando el signo de op1. Es equivalente a C D (ver BGU).
BCS: En caso que la flag de Carry sea 1 se realiza un salto a la dirección
PC+4*op1 considerando el signo de op1. Es equivalente a C < D (ver BGU).
BPOS: En caso que la flag Negative sea 0 realiza un salto a la dirección PC+4*op1
considerando el signo de op1.
BNEG: En caso que la flag Negative sea 1 realiza un salto a la dirección PC+4*op1
considerando el signo de op1.
BVC: En caso que la flag de Overflow sea 0 realiza un salto a la dirección
PC+4*op1 considerando el signo de op1.
BVS: En caso que la flag de Overflow sea 1 realiza un salto a la dirección
PC+4*op1 considerando el signo de op1.


Manejo especial del registro PSR(Program Satutus Register)

n Z v C
23 22 21 20

Los bits del 20 al 23 del PSR almacenan las banderas de la IU. Estos bits son
modificados por las instrucciones con cc (por ejemplo ANDcc) y por la instrucción WRPSR.

RDPSR: Copia el PSR a op1.
WRPSR: Coloca en PSR el valor op1 op2 1 2 Å .
RDWIM: Copia el WIM ( Window Invalid Mask ) a op1.
WRWIM: Coloca en WIM el valor op1 op2.
RDTBR: Copia el TBR ( Trap Base Register ) a op1.
WRTBR: Coloca en TBR el valor op1 op2.