2010-04-07 10 views
5

Ich arbeite an einem kleinen Mini-Compiler beim Versuch, einige MIPS hier zu lernen. Hier ist mein Problem:MIPS (oder SPIM): Laden Gleitkommazahlen

MIPS hat eine Anweisung li (Last sofort), die wie diese

li $5,100 

funktionieren würde, die 100 in das Register geladen werden würde 5.

Ich brauche aber Schwimmern in die Register laden gerade jetzt und kämpfe mit der Suche nach einem Weg, es zu tun ... seit Li $ 5,2.5 nicht funktioniert.

Hat jemand einen Rat?

Ich arbeite in C, ich dachte, ich könnte irgendwie die Ganzzahl-Darstellung des Float ich arbeite mit (dh so die floats binäre Darstellung == die Ints binäre Darstellung) dann laden Sie die "Integer" in das Register und behandle es von nun an wie ein Schwimmer.

Vielleicht ist es zu spät, aber ich bin gerade stecken.

Antwort

9

Sie müssen die Floating-Point-Register verwenden, um Ihre Floats zu laden.

Statt:

li $5,2.5 

Versuchen:

li.s $f5,2.5 

Werfen Sie einen Blick auf MFR1 und MTC1 Anweisungen zwischen Integer- und Floating-Point-Register zu bewegen.

+0

Danke, dass .s den Trick gemacht hat. Ich sollte wahrscheinlich ins Heu gehen, wenn ich das verpasst habe. Gute Nacht. – James

+3

Das scheint ein Pseudo-Befehl zu sein. Wie würde ich das eigentlich machen? (MARS unterstützt keine li.). Ich kann nur daran denken, 25 in $ t0 zu laden, 10 in $ t1 zu laden, jedes in float umzuwandeln und dann zu teilen. –

11

MARS nicht scheinen irgendwelche Anweisungen/Pseudobefehle zu haben, die Gleitkomma-Sofortwerte in Floating-Register laden. Stattdessen müssen Sie den Gleitkommawert in den Speicher setzen und das Register aus dem Speicher laden:

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

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