2015-12-02 65 views
1

我目前正在试图检查时,乘法运算是通过使用以下方法进行符号溢出...检查溢出

muls r0, r1, r0 
blvs overflow 

这将分支和打印溢出错误消息如果发生溢出。例如,如果以下输入为r1 = 1,000,000,000且r0 = 3,则输出为-64,771,072,但是溢出的分支从未完成,为什么?

回答

1

它仅仅是乘法指令will never set the overflow flagMULS只会适当地设置N和Z标志,并且不会触碰C或V(除非你真的在真的古代那里被无意义的废话覆盖)。

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

1

只有一个位保存在ALU/APSR溢出(另一个是进位)和那些被置为加减算术不是因为CPU意识到这将溢出的副作用。所以在乘法情况下,这些不会被设置。

有一个很好的博客文章在ARM Connected Community的题为Detecting Overflow from MUL这实际上提出了如何检测通过其他手段四溢。