【问题标题】:In MIPS, what are HI and LO在 MIPS 中,什么是 HI 和 LO
【发布时间】:2011-01-20 04:23:27
【问题描述】:

我正在阅读 MIPS 中的除法,我发现了 div

将 $s 除以 $t 并存储 商在 $LO 和余数 $嗨

https://web.archive.org/web/20201111203150/http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

维基百科说

HI 和 LO 用于访问乘法器/除法器结果,由 mfhi(从高位移动)和 mflo 命令访问。

http://en.wikipedia.org/wiki/MIPS_architecture

是 HI 和 LO 寄存器吗?它们是几号寄存器?

【问题讨论】:

  • 如果它们不是寄存器,它们会在内存中出现吗?
  • 不,它们是寄存器,只是它们不能编码在 MIPS 指令中的 5 位寄存器字段中。通过使用寄存器字段上的适当编号来访问那些“编号”的寄存器。 HI/LO 寄存器具有特殊指令,允许将它们传送到“编号”寄存器。
  • 相关:Difference between rem and mfhi in MIPS。它们的存在是为了避免与正常的 1 周期延迟指令发生回写冲突,并简化通用整数寄存器的危险检测。
  • 请注意,它们已在 MIPS release 6 中删除

标签: assembly mips cpu-registers


【解决方案1】:

这些是特殊寄存器,用于存储乘法和除法的结果。它们与$0 .. $31 通用寄存器分开,不能直接寻址。使用特殊指令 mfhimflo(从 HI/LO 移动)访问它们的内容。

它们存在于乘法单元中,每个都是 32 位的。更多信息here。作为一对,它们保存 32x32 位整数 mult 的 64 位完整结果。


Raymond Chen 的博客文章 The MIPS R4000, part 3: Multiplication, division, and the temperamental HI and LO registers 有一些关于早期 MIPS 非直觉行为的非常好的信息,包括 mtlo / mtlo 使之前的 hi / lo 失效(分别)。

早期 MIPS 的不完整整数指令集参考(链接在问题中)也有一些详细信息,http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html,或参见 MIPS 的官方 PDF 手册,或经典 MIPS CPU 手册的 PDF。

【讨论】:

【解决方案2】:

HI 和 LO 不是编号寄存器,IIRC。它们仅用于存储不适合单个寄存器的操作结果(例如,将两个 32 位整数相乘可能会产生一个 64 位整数,因此溢出进入 HI)。

编辑:根据this class description,它们确实是特殊寄存器,所以它们没有编号,只能使用特殊命令访问。

【讨论】:

  • 链接似乎在付费墙后面。
  • 链接失效(403)
  • 不应将全乘法的高半部分视为“溢出”。它只是高半部分(并且像 32b * 32b => 64b 这样的全乘法不能溢出)。如果高半部分不为零,则 32b * 32b => 32b 乘法将溢出...
【解决方案3】:

LO 所做的是,对于乘法,它存储最低有效位,而 HI 存储其余位,但主要是,我们只关注乘法的 LO 部分。在部门中,我们专注于两者。除法中的 LO 是应存储商的位置,HI 是余数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多