我正在 MIPS 中编写某些代码,我已经到了需要将结果临时存储在特殊寄存器(均为 4 字节宽)HI
中的地步。LO
这些说明可供我使用:
divu s,t lo <-- s div t ; hi <-- s mod t
multu s,t hi / lo < -- s * t ;
因此,divu
将除法的结果LO
和余数存储在 中HI
,而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
但是,结果是 in 的值在HI
它应该在的位置右边 1 位(所以如果我的值是,0100 1000
那么HI
将包含0010 0100
)。
有谁知道如何在HI
寄存器中存储一些东西?