2010-04-07 8 views
5

Je travaille sur un petit mini-compilateur en essayant d'apprendre quelques MIPS ici. Voici ma question:MIPS (ou SPIM): Chargement de nombres à virgule flottante

MIPS a une instruction li (charge immédiate) qui fonctionnerait comme celui-ci

li $5,100 

qui charge 100 dans le registre 5.

Cependant, je dois charger des flotteurs dans les registres en ce moment et j'ai du mal à trouver un moyen de le faire ... depuis 5,5 $ li ne fonctionne pas.

Quelqu'un a des conseils? Je travaillais en C, je pensais pouvoir obtenir la représentation entière du flottant avec lequel je travaille (ie la représentation binaire des flottants == la représentation binaire d'ints) puis charger le "entier" dans le registre et le traiter comme un flotteur à partir de là.

Peut-être qu'il est trop tard, mais je suis coincé en ce moment.

Répondre

9

Vous devrez utiliser les registres à virgule flottante pour charger vos flottants.

Au lieu de:

li $5,2.5 

Essayez:

li.s $f5,2.5 

Jetez un oeil à des instructions de MFC1 et MTC1 pour se déplacer entre entier et registres à virgule flottante.

+0

Merci, cela a fait l'affaire. Je devrais probablement frapper le foin si j'ai manqué cela. Bonne nuit. – James

+3

Cela semble être une pseudo-construction. Comment pourrais-je réellement le faire? (MARS ne supporte pas li.s). La seule chose à laquelle je peux penser est de charger 25 dans $ t0, de charger 10 dans $ t1, de les convertir en float, puis de les diviser. –

11

MARS n'apparaît pas semble avoir des instructions/pseudo-instructions qui chargent des valeurs immédiates à virgule flottante dans des registres flottants. Au lieu de cela, vous devez mettre la valeur à virgule flottante en mémoire et charger le registre à partir de la mémoire:

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

.text 
l.d $f0, fp1 
l.d $f2, fp2 
Questions connexes