2010-04-07 13 views
5

Sto lavorando su un piccolo mini compilatore mentre cerco di imparare alcuni MIPS qui. Ecco il mio problema:MIPS (o SPIM): caricamento di numeri in virgola mobile

MIPS ha una Li istruzioni (carico immediato), che avrebbe funzionato come questo

li $5,100 

che caricare 100 nel registro 5.

Tuttavia, ho bisogno di caricare carri nei registri in questo momento e sto lottando con l'idea di un modo per farlo ... dato che li $ 5,2.5 non funziona.

Qualcuno ha qualche consiglio?

Sto lavorando in C, stavo pensando che potrei in qualche modo ottenere la rappresentazione intera del float con cui sto lavorando (vale a dire la rappresentazione binaria float == la rappresentazione binaria ints) quindi caricare il "numero intero" nel registro e trattalo come un galleggiante da quel momento in poi.

Forse è troppo tardi ma sono bloccato in questo momento.

risposta

9

Sarà necessario utilizzare i registri in virgola mobile per caricare i galleggianti.

Invece di:

li $5,2.5 

Prova:

li.s $f5,2.5 

Date un'occhiata a istruzioni MFC1 e MTC1 per spostarsi tra numeri interi e dei registri in virgola mobile.

+0

Grazie, questo ha fatto il trucco. Probabilmente dovrei colpire il fieno se mi manchi questo. Buonanotte. – James

+3

Sembra una pseudoistruzione. Come potrei effettivamente farlo? (MARS non supporta li.s). L'unica cosa che posso pensare è di caricare 25 in $ t0, caricare 10 in $ t1, convertire ciascuno in float e quindi dividere. –

11

MARS non ha sembra avere istruzioni/pseudo istruzioni che caricano valori immediati in virgola mobile in registri mobili. Invece, è necessario inserire il valore in virgola mobile nella memoria e caricare il registro dalla memoria:

.data 
fp1: .double 2.5 
fp2: .double -0.75 

.text 
l.d $f0, fp1 
l.d $f2, fp2 
Problemi correlati