MIPS (o SPIM): números de punto flotante de carga
Pregunta
Estoy trabajando en un pequeño mini compilador al tratar de aprender algunas MIPS aquí. Aquí está mi problema:
MIPS tiene una instrucción li (carga inmediata) que trabajaría como esto
li $5,100
que cargar en el registro 100 5.
Sin embargo, tengo que flota en los registros de carga en este momento y estoy luchando con encontrar una forma de hacerlo ... ya li $ 5,2.5 no funciona.
Alguien tiene algún consejo?
Estoy trabajando en C, estaba pensando que de alguna manera pudiera conseguir la representación entera del flotador estoy trabajando con (es decir, por lo que la flota representación binaria == la representación binaria enteros) y luego cargar el "entero" en el registro y tratarlo como un flotador a partir de entonces.
Tal vez sea demasiado tarde, pero estoy atascado en este momento.
Solución
Se tendrá que utilizar los registros de coma flotante para cargar sus flotadores.
En lugar de:
li $5,2.5
Trate:
li.s $f5,2.5
Tome un vistazo a las instrucciones y mFc1 mtc1 para moverse entre enteros y punto flotante registros.
Otros consejos
MARS no parecen tener ninguna instrucción instrucciones / seudo que la carga flotantes valores inmediatos puntuales en registros flotantes. En su lugar, es necesario poner el valor de punto flotante en la memoria y cargar el registro de la memoria:
.data
fp1: .double 2.5
fp2: .double -0.75
.text
l.d $f0, fp1
l.d $f2, fp2