我正在使用MIPS編寫某些代碼,並且我已經到了需要臨時將結果存儲在HI
和LO
特殊寄存器(均爲4個字節寬)。這些指令是在我手上:將值存儲在MIPS的HI和LO寄存器中
divu s,t lo <-- s div t ; hi <-- s mod t
multu s,t hi/lo < -- s * t ;
所以,divu
店在HI
LO
和其餘部門的結果,而multu
並將結果保存在LO
乘法(低4個字節)和HI
(高4個字節)。
後來,從HI
和LO
寄存器檢索結果,我可以:
mfhi $v0
mflo $v1
我已經想通了如何計算的結果存儲在LO
:
ori $v0,$0,1 # Store result from $a0 into LO
divu $a0,$v0
- 的
divu
將分區的結果存儲在LO中,所以我只將結果除以1得到它。
但是,存儲在HI
是更復雜。一種方法是迫使multu
指令由32位(4個字節)的值偏移:
multu $a0,0x80000000 # Shift $a0 by 32 bits and store into HI/LO
但是,其結果是,在HI
的值是(的地方應該是1個比特右所以如果我值是0100 1000
,那麼HI
將包含0010 0100
)。
有誰知道如何在HI
寄存器中存儲東西?
* 32位(8字節)*。 uh,32b是4個字節,而不是8.在32位MIPS上,HI和LO每個都是4個字節。它是8字節對的64位串接(不適用於任何單個寄存器)。 – 2016-11-02 07:13:03