Arm 检查溢出

Arm 检查溢出,arm,overflow,Arm,Overflow,当使用以下方法执行乘法运算时,我正在尝试检查有符号溢出 muls r0, r1, r0 blvs overflow 如果发生溢出,将分支并打印溢出错误消息。例如,如果以下输入为r1=100000000,r0=3,则输出将为-64771072,但溢出分支从未完成,这是为什么?这只是乘法指令MULS只会适当地设置N和Z标志,而不会触及C或V(除非你使用的是真正古老的东西,它们会被无意义的废话覆盖) 如果结果的有效位很重要,您可能需要考虑使用 UMule/Case> SMOLL。 < P>在ALU/

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

muls r0, r1, r0
blvs overflow

如果发生溢出,将分支并打印溢出错误消息。例如,如果以下输入为r1=100000000,r0=3,则输出将为-64771072,但溢出分支从未完成,这是为什么?

这只是乘法指令
MULS
只会适当地设置N和Z标志,而不会触及C或V(除非你使用的是真正古老的东西,它们会被无意义的废话覆盖)


如果结果的有效位很重要,您可能需要考虑使用<代码> UMule/Case> SMOLL。

< P>在ALU/APSR中只有一个比特来保存溢出(另一个用于进位),而那些被设置为添加或减去算术运算的副作用,而不是因为CPU意识到它会溢出。所以在乘法运算的情况下,它们不会被设置

在ARM连接社区有一篇很好的博客文章,标题是“它实际上提出了如何通过其他方式检测溢出”