检查溢出

时间:2015-12-02 19:43:36

标签: arm overflow

我正在尝试使用以下方法进行乘法运算时检查有符号溢出...

muls r0, r1, r0
blvs overflow

如果发生溢出,哪些会分支并打印溢出错误消息。例如,如果以下输入为r1 = 1,000,000,000且r0 = 3,则输出为-64,771,072,但溢出的分支永远不会完成,为什么会这样?

2 个答案:

答案 0 :(得分:1)

只是乘法指令will never set the overflow flagMULS只会恰当地设置N和Z标记,并且不会触及C或V(除非您使用真正的古代,否则会被无意义的废话覆盖)。

如果结果的重要部分很重要,您可能需要考虑使用UMULL / SMULL

答案 1 :(得分:1)

在ALU / APSR中只有一个位来保存溢出(另一个用于进位),并且这些被设置为添加或减去算术的副作用,因为CPU意识到它会溢出。因此,在乘法的情况下,那些不会被设定。

ARM Connected Community上有一篇很好的博客文章,标题为Detecting Overflow from MUL,它实际上提出了如何通过其他方式检测溢出。