私は 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
- 除算の結果は LOに
divu
格納されるので、結果を 1 で除算して取得します。
ただし、格納HI
はより複雑です。multu
1 つの方法は、値を 32 ビット (4 バイト) シフトする命令を強制することです。
multu $a0,0x80000000 # Shift $a0 by 32 bits and store into HI/LO
しかし、その結果、 の値はHI
本来あるべき場所の 1 ビット右になります (したがって、値が の場合は0100 1000
がHI
含まれます0010 0100
)。
HI
何かをレジスタに保存する方法を知っている人はいますか?