2010-04-07 101 views
5

Estoy trabajando en un pequeño mini compilador mientras trato de aprender algunos MIPS aquí. Aquí está mi problema:MIPS (o SPIM): carga de números de punto flotante

MIPS tiene una li instrucción (carga inmediata) que trabajaría como esto

li $5,100 

que cargar 100 en el registro 5.

Sin embargo, tengo que cargar flota en registros en este momento y estoy luchando con encontrar una manera de hacerlo ... ya que $ 5,2.5 no funciona.

¿Alguien tiene algún consejo?

Estoy trabajando en C, estaba pensando que de alguna manera podría obtener la representación entera del flotador con el que estoy trabajando (es decir, la representación binaria de flotantes == la representación binaria ints) y luego cargar el "entero" en el registro y trátelo como un flotador a partir de ese momento.

Quizás es demasiado tarde, pero estoy atascado en este momento.

Respuesta

9

Deberá usar los registros de coma flotante para cargar sus flotadores.

En lugar de:

li $5,2.5 

Probar:

li.s $f5,2.5 

Tome un vistazo a las instrucciones y mFc1 mtc1 para moverse entre los registros de enteros y de coma flotante.

+0

Gracias, eso fue lo que hizo. Probablemente debería golpear el heno si me perdí eso. Tenga una buena noche. – James

+3

Eso parece ser una pseudoinstrucción. ¿Cómo podría hacerlo? (MARS no es compatible con li.s). Lo único que se me ocurre es cargar 25 en $ t0, cargar 10 en $ t1, convertir cada uno a flotación y luego dividir. –

11

MARS no tiene parecen tener instrucciones/pseudoinstrucciones que cargan valores inmediatos de coma flotante en registros flotantes. En su lugar, debe colocar el valor del 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 
Cuestiones relacionadas