2012-03-15 49 views
-2

可能重複:
about assembly CF(Carry) and OF(Overflow) flag進位標誌未設置。 86 ASM

我想看看是否增加兩個無符號雙字後發生矣。

這樣的:

 add edx, eax   ; edx will hold the numeric value 
     wait     ; not really needed 
     jc bad     ; jmp to bad if carry bit is set 
     jo bad     ; jmp to bad if overflow bit is set (Yes for signed) 

然而,無論是溢出標誌或攜帶標誌相應地設置。出於測試的目的,我確實會增加32位寄存器的值。 (在添加之後,值將環繞)

如何檢查兩個數字是否相加會導致溢出?

+1

在執行add指令之前,edx和eax的值是什麼?如果他們都是0,那麼不,我懷疑既沒有進位也沒有溢出。 – 2012-03-15 03:56:59

+0

@Mike,在問題中我注意到我確保edx和eax中的值足夠大,可以引起溢出或攜帶。但無論如何,進旗不設置。 – Dacto 2012-03-15 04:19:12

+2

刪除'wait'。然後查看添加和減去整數以及如何在[本答案](http://stackoverflow.com/a/8037485/968261)中設置進位和溢出相關問題的示例。很可能你的數字太小而不能導致CF = 1或OF = 1。您也可能會混淆讀寫寄存器(您的edx或eax沒有加載您需要的數據,或者由於其他代碼錯誤而無法區分溢出和非溢出情況)。告訴我們更多關於你的代碼或者展示它。 – 2012-03-15 05:24:20

回答

1

溢出用於帶符號的加法和減法。

你應該看看進位標誌的無符號加和減法。

+0

在我的問題中,我注意到進位標誌也沒有適當設置。 – Dacto 2012-03-15 04:18:02