【发布时间】:2018-04-03 09:29:52
【问题描述】:
我很好奇为什么我们不允许在 MIPS 中使用寄存器作为偏移量。我知道您不能像这样使用寄存器作为偏移量:lw $t3, $t1($t4);我只是好奇为什么会这样。
这是硬件限制吗?或者只是ISA的一部分?
【问题讨论】:
-
他们就是这样设计的。你必须问设计师他们为什么决定反对它。
-
我认为后来的 MIPS 确实 有索引负载(以及相对于 PC 的负载)。 tkt.cs.tut.fi/kurssit/3200/S05/Luennot/Lec_notes05/…。可能支持 PC-relative 意味着他们需要 AGU 中的 2 个寄存器加法器,因此也可以允许 2 个任意寄存器,而不仅仅是 PC + 寄存器。 First-gen MIPS I had only one addressing mode: base + displacement(当然可以为零)。很明显,这使得解码和地址生成更简单。
-
维基百科说MIPS IV added indexed addressing modes。嗯,但他们只提到 FP 加载/存储。 A current MIPS instruction-set quick ref 仅列出了用于整数加载/存储的
off(Rs)模式,包括未对齐和 LL/SC。 -
lwpcis new in MIPS release 6,并使用通常的sign_extend( offset << 2 )编码,但使用PC而不是 GPR。同一个文档确实记录了索引的 FP 负载(例如lwxc1,它使用GPR[base] + GPR[index])。所以是的,MIPS ISA 仍然不包括索引整数负载。你必须自己做地址数学。至少有一个移位和加法指令 (lsa) 用于生成缩放索引地址(例如int[])。 -
我猜这个动机是整个 RISC 哲学的一部分。 MIPS 是最早的 RISC 设计之一。
标签: assembly mips cpu-architecture addressing-mode