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