BEQ命令可以溢出吗?

时间:2015-09-02 12:27:28

标签: assembly mips cpu computer-architecture integer-arithmetic

众所周知,BEQ定义为以下几种: if($x == $y) PC = PC + 4 + 4*(offset) else PC = PC+4

我们也知道使用2补偿方法的ALU减法。考虑到这一点:

  

BEQ是否可能导致溢出?

嗯,我说是的;我们举个例子:$x = 01...1$$y = 10...01(十进制减1)。当然结果是无效的,并且有溢出。

我是对的,还是我在这个问题上缺少什么?

1 个答案:

答案 0 :(得分:1)

简答:

没有BEQ 不能导致MIPS32 ISA溢出。

详细信息:

根据评论我假设您在MIPS32 ISA中讨论BEQ。查看MIPS32 Architecture For Programmers Volume II: The MIPS32 Instruction Set表明BEQ不会导致任何异常。

确实,通常通过从另一个值中减去一个值来实现比较,并且在MIPS实现中,可以使用相同的ALU来实现该指令。因此ALU将产生溢出信号(由高位的进位引起),但如果CPU正在执行BEQ指令,它将忽略溢出。然而,如果它正在执行SUB指令,那么它将触发异常。

有关替代示例,您可以查看SPARC V8。在SPARC V8中:

  

通常是整数算术指令   计算结果的三元寄存器地址指令   两个源操作数的功能,并将结果写入   目的地寄存器r [rd]或丢弃它。 。 。   大多数这些说明都有双版本;一个版本   将整数条件代码(icc)设置为副作用;另一个   版本不会影响条件代码。

在这两种情况下,CPU将使用相同的ALU来计算算术运算,如果发生溢出,则将设置来自ALU的指示此信号的信号。但如果指令未设置为更新条件代码,则CPU不会对该值执行任何操作。

MIPS32没有条件代码寄存器,但如果它在BEQ中使用相同的ALU操作进行比较,则适用相同的原则,对于SUB,它可以自由地忽略BEQ的溢出,但对于SUB溢出信号会触发异常。