MIPS中的Rem和MFHI之间的区别

时间:2018-11-06 11:36:11

标签: assembly mips

这之间有什么区别吗?

rem $s0, $t0, $t1

还有:

div $t0, $t1
mfhi $s0

我知道第一个可以使用,但是我不确定第二个可以使用。是同一回事吗?

1 个答案:

答案 0 :(得分:2)

较早的MIPS没有rem,只有div可以将结果放入特殊的寄存器中,以避免在简单的情况下从高延迟指令写回寄存器文件的微体系结构问题管道。

计算余数的不是mfhi,而是div(在lo=quotienthi=remainder特殊寄存器中产生结果)。 mfhi只是“从HI移动”;它将从该特殊寄存器复制到通用寄存器。

名称来自mult指令(例如div的等待时间比add或原始MIPS I支持的任何其他整数ALU指令高),这会产生双倍宽度导致LO和HI。 (Getting result from mult in mipsIn MIPS, what is HI and LO

如果multdiv的目的地是通用寄存器,则在周期中结果准备就绪,可能还会有addlw或管道在同一周期内需要写入寄存器文件的其他任何结果。这些指令每个产生2个字的结果。使用特殊的LO / HI寄存器可避免两种原因的回写冲突。

还请记住,MIPS代表“最小程度互锁的管线阶段”,因此早期MIPS的主要设计目标是甚至没有硬件来检查数据依赖关系,而应由软件决定在准备好结果之前不要尝试读取结果。将mult / mfhi / mflo设为特殊字符也有帮助,因为通过普通的GP寄存器没有依赖性。


但是,更现代的MIPS CPU具有更大的晶体管预算,并且可以支持mulrem之类的指令,即使它们的延迟比普通的ALU指令更长,也可以将其结果放入GP寄存器中。 / p>

我不确定何时将它们添加到ISA中。那是否处于r10000之类的高性能乱序执行MIPS CPU的时代。