为什么我们不能将(bne-beq)寄存器与立即数(Assembly-MIPS)进行比较?

时间:2013-05-26 14:35:15

标签: assembly mips

例如在添加时我们有添加寄存器和即时的addi,为什么在这种情况下我们不能有bnei或beqi ......

我应该回答这个问题,但我不确定......有什么帮助吗?

3 个答案:

答案 0 :(得分:5)

原因是指令编码:

ADDIBNE/BEQ都是I-Type instructions。但是ADDI指令中的立即字段用于存储加法的立即操作数,而它用于存储BEQ/BNE的分支偏移量。

可能有MIPS汇编程序允许您在条件分支指令中使用立即操作数,但它们会将那些伪指令扩展为多个实际指令。

答案 1 :(得分:1)

在带有标志的体系结构中,分支指令通常遵循比较指令,该指令可以比较寄存器和立即数并设置适当的标志(通常称为CMP,但通常其他指令也可以设置标志)。然后分支只检查标志。

(这是在向MIPS澄清问题之前发布的,它不使用标志)

答案 2 :(得分:-1)

您不希望将16位立即值用作跳转到的地址,因为这会限制您可以跳转的位置。 MIPS具有32位地址。如果您只使用16位,则使用可能地址的一小部分。