2015-12-02 77 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這實際上提出瞭如何檢測通過其他手段四溢。