Ich schreibe bestimmten Code in MIPS und ich bin an den Punkt gekommen, wo das Ergebnis vorübergehend in HI
und LO
spezielle Register gespeichert werden soll (beide sind 4 Byte breit)). Diese Anweisungen sind zu meiner Verfügung:Speichern von Werten in HI und LO-Registern von MIPS
divu s,t lo <-- s div t ; hi <-- s mod t
multu s,t hi/lo < -- s * t ;
So divu
speichert Ergebnis der Division in LO
und Rest in HI
, während multu
speichert Ergebnis der Multiplikation in LO
(unteres 4 Bytes) und HI
(höhere 4 Byte).
Später resultieren aus HI
und LO
Register abrufen, ich kann:
mfhi $v0
mflo $v1
ich schon herausgefunden, wie in LO
Ergebnis einer Berechnung zu speichern:
ori $v0,$0,1 # Store result from $a0 into LO
divu $a0,$v0
- die
divu
speichert das Ergebnis der Division in LO, also teile ich das Ergebnis einfach durch 1, um es dort zu erhalten.
Speichern in HI
ist jedoch komplizierter. Eine Möglichkeit wäre, multu
Anweisung zu zwingen, den Wert von 32 Bits zu verschieben (4 Byte):
multu $a0,0x80000000 # Shift $a0 by 32 bits and store into HI/LO
Aber ist das Ergebnis, dass der Wert in HI
1 Bit rechts von wo es sein sollte (so, wenn mein Wert ist 0100 1000
dann HI
enthält 0010 0100
).
Kann jemand etwas in HI
Register speichern?
* 32 Bit (8 Byte) *. uh, 32b ist 4 Bytes, nicht 8. auf 32-Bit MIPS, HI und LO sind jeweils 4 Bytes. Es ist die 64-Bit-Verkettung des Paares, die 8 Bytes ist (die nicht in ein einzelnes Register passt). –