Registros del camino de datos del Mips
Un registro es una parte del procesador que puede contener un patrón de bits. En el MIPS, un registro contiene 32 bits. Hay muchos registros en el procesador, pero sólo algunos de ellos son visibles en lenguaje ensamblador. Los otros son utilizados por el procesador para llevar a cabo sus operaciones.
Los registros de propósito general son aquellos que se usan comúnmente al programar en lenguaje ensamblador. Sin embargo también existen otros registros que se usan para hacer operaciones con punto flotante. Los registros de propósito general están numerados del $0 al $31. Cada registro de propósito general tiene un patrón de 32 bits. Sin embargo, por convención (y a veces por el hardware) los diferentes registros se usan para diversos propósitos.
Contenido
- 1 Registros Generales
- 1.1 - $0 – Registro $zero
- 1.2 - $1 – Registro $at
- 1.3 - $2, $3 – Registro $v0 a $v1
- 1.4 - $4 ~ $7 – Registro $a0 a $a3
- 1.5 - $8 ~ $15, $24 y $25 – Registros $t0 a $t9
- 1.6 - $16 ~ $23 – Registro $s0 a $s7
- 1.7 - $26, $27 – Registro $k0 a $k1
- 1.8 - $28 – Registro $gp
- 1.9 - $29 – Registro $sp
- 1.10 - $30 – Registro $fp
- 1.11 - $31 – Registro $ra
- 2 Otros Registros
- 3 Referencias
Registros Generales
- $0 – Registro $zero
Este registro es "cero" permanentemente, esto significa que está configurado para contener siempre el valor 0x00000000 (todos los bits a cero). Si se escribe algo en este registro, se perderá la información; ya que lo ignorará y el registro será cero.
- $1 – Registro $at
Este registro es el ensamblador temporal (assembler temporary). Este registro se utiliza frecuentemente al realizar operaciones ya que comúnmente se guarda el resultado en éste y luego se copia a otro.
- $2, $3 – Registro $v0 a $v1
Estos registros se utilizan para los valores que son retornados por una subrutina. Por lo que no son preservados al ser llamados a las subrutinas y son modificables en ellas.
- $4 ~ $7 – Registro $a0 a $a3
Estos registros guardan los argumentos para las subrutinas. Tal como la convención de software lo indica, estos registros pueden ser modificados dentro de las subrutinas.
- $8 ~ $15, $24 y $25 – Registros $t0 a $t9
Estos son registros temporales. Según la convención es posible modificar estos registros en una subrutina o fuera de ella ya que se supone que los valores que devuelve no se vuelven a utilizar durante el programa
- $16 ~ $23 – Registro $s0 a $s7
Estos son los registros guardados. Según la convención de software se dice que estos registros no deben ser modificados al ingresar a una subrutina. Por esta razón se debe guardar la información antes de llamarse a la subrutina.
- $26, $27 – Registro $k0 a $k1
Estos son los registros Kernel. Los registros kernel son utilizados por el sistema operativo.
- $28 – Registro $gp
Registro para el global pointer.
- $29 – Registro $sp
Registro para guardar el stack pointer. Este registro apunta a la última dirección de la pila.
- $30 – Registro $fp
Registro para guardar el frame pointer.
- $31 – Registro $ra
Registro para guardar el return address. El return address se usa primordialmente para regresar a una posición en el código desde donde se haya realizado un salto escribiendo el comando "jr $ra" luego de terminada la rutina a la cual se saltó usando la instrucción "jal <NombreRutina>".
Otros Registros
Existen otros 32 registros que van desde el $f0 hasta el $f31 que son para los números representados en punto flotante.
Referencias
Mips Tutorial Universidad de Connecticut: http://chortle.ccsu.edu/AssemblyTutorial/index.html
http://msdn.microsoft.com/en-us/library/ms253512(v=vs.80).aspx