我正在阅读 MIPS 中的除法,我发现 div
将 $s 除以 $t 并将商存储在 $LO 中,余数存储在 $HI 中
维基百科说
HI 和 LO 用于访问乘法器/除法器结果,由 mfhi(从高位移动)和 mflo 命令访问。
http://en.wikipedia.org/wiki/MIPS_architecture
是 HI 和 LO 寄存器吗?它们是什么数字寄存器?
我正在阅读 MIPS 中的除法,我发现 div
将 $s 除以 $t 并将商存储在 $LO 中,余数存储在 $HI 中
维基百科说
HI 和 LO 用于访问乘法器/除法器结果,由 mfhi(从高位移动)和 mflo 命令访问。
http://en.wikipedia.org/wiki/MIPS_architecture
是 HI 和 LO 寄存器吗?它们是什么数字寄存器?
这些是用于存储乘法和除法结果的特殊寄存器。$0 .. $31
它们与通用寄存器分开,不能直接寻址。mfhi
使用特殊指令和mflo
(从 HI/LO 移动)访问它们的内容。
它们存在于乘法单元中,每个都是 32 位的。更多信息在这里。作为一对,它们保存 32x32 位整数的 64 位完整结果mult
。
Raymond Chen 的博客文章MIPS R4000,第 3 部分:乘法、除法和气质 HI 和 LO 寄存器有一些关于早期 MIPS 非直觉行为的非常好的信息,包括mtlo
/mtlo
使先前的行为无效hi
/ lo
(分别)。
早期 MIPS 的不完整整数指令集参考(链接在问题中)也有一些细节,http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html,或查看 MIPS 的官方 PDF手册,或 PDF 的经典 MIPS CPU 手册。
HI 和 LO 不是编号寄存器 IIRC。它们仅用于存储不适合单个寄存器的操作结果(例如,将两个 32 位整数相乘可能会产生一个 64 位整数,因此溢出进入 HI)。
编辑:根据此类描述,它们确实是特殊寄存器,因此它们没有编号,只能使用特殊命令访问。
LO 所做的是,对于乘法,它存储最低有效位,而 HI 存储其余位,但主要是,我们只关注乘法的 LO 部分。在部门中,我们专注于两者。除法中的 LO 是应存储商的位置,而 HI 是余数。