2016-04-01 4 views
-4

Ich versuche, die Codefolge nur mit zwei Gleitkomma-Ganzzahlen neu zu schreiben. Ich weiß, ich müsste temporäre Speicherplätze verwenden, um Zwischenwerte zu halten. Ich weiß nichts anderes.Umschreiben der Codefolge mit nur zwei Fließkomma-Ganzzahlen

Die folgende MIPS Code berechnet eine der Gleitkommaausdruck E = * B + C * D, wobei die Adressen von A, B, C, D und E in R1 gespeichert sind, R2, R3, R4 und R5, jeweils:

L.S F0, 0(R1) 

L.S F1, 0(R2) 

MUL.S F0, F0, F1 

L.S F2, 0(R3) 

L.S F3, 0(R4) 

MUL.S F2, F2, F3 

ADD.S F0, F0, F2 

S.S F0, 0(R5) 
+1

Was "Gleitkomma-Zahlen" sein soll werden? – EOF

+0

Ich nehme Gleitkommawerte an, die exakte ganze Zahlen darstellen. Wenn Sie wissen, dass Ihre Werte immer Ganzzahl sind, ist Fließkommazahl eine schlechte Wahl, aber das ist die einzige sinnvolle Bedeutung für die Phrase. –

+0

@PeterCordes: Ich denke OP bedeutete Gleitkomma _register_, nicht _integers_ – gusbro

Antwort

2

Sie entweder speichern, um das Zwischenergebnis (zB A * B) auf Speicher oder ein freies Zweckregister haben würden, dann wird die zweite Multiplikation berechnen (zB C * D) , rufen Sie dann das Zwischenergebnis ab, um die Addition durchzuführen.

Zum Beispiel (unter der Annahme R1-R5 sind in der Tat $t1 - $t5)

text 
l.s $f0, 0($t1) 
l.s $f1, 0($t2) 
mul.s $f0, $f0, $f1 
s.s $f0, 0($t5) # Here we store the intermediate value 
l.s $f0, 0($t3) 
l.s $f1, 0($t4) 
mul.s $f0, $f0, $f1 
l.s $f1, 0($t5) # Retrieve intermediate value 
add.s $f0, $f0, $f1 
s.s $f0, 0($t5) 

Wenn Sie den Zwischenwert auf ein Universalregister (etwa $ t6) speichern wollen, dann würden Sie

ändern
s.s $f0, 0($t5) # Here we store the intermediate value 

zu

mfc1 $t6, $f0  # Copy intermediate value to $t6 

und

l.s $f1, 0($t5) # Retrieve intermediate value 

zu

mtc1 $t6, $f1