2017-02-28 162 views
2

我無法設置零標誌。我在網上做了一些研究,但它已經讓我更加困惑。糾正我,如果我錯了,但我的理解是,您可以使用MOV,ADD,SUB,INC和DEC,並設置和清除標誌?所以會這樣的工作..?設置和清除標誌

.data 
Num1 = 18 
Num2 = 18 

.code 
main PROC 
    sub num2, num1 
main ENDP 
END main 

那樣會設置一個ZF例如?如果是這樣的話,我該如何清除它?

+1

做一個結果不爲零的數學運算? –

回答

1

此代碼將不設置零標誌,因爲一個拼寫檢查情況的:!
Num1 = num1Num2 = num2

除此之外,您沒有定義任何.data值,因爲Num1 = 18Num2 = 18分別是常量賦值並且未定義數據值。

所以你基本上試圖通過OpCode(CMP)來比較常量和常量,這是無效的,並且不會通過任何彙編語法檢查。

1

糾正我,如果我錯了,但我的理解是,您可以使用MOV,ADD,SUB,INC和DEC並設置和清除標誌?

這是真的,addsubincdec將設置/清除幾個標誌包括ZF。
mov另一方面永遠不會改變任何標誌!

sub num2, num1 

這是非常不可能的指令。

不允許sub指令的強制性2個操作數既是立即數(只是數字),也是兩個變量(存儲單元)。
在您的例子,你可以從結果驗證標誌:

mov ax, Num2 
sub ax, Num1 

由於兩個值是相同的,以下簡稱ZF將被設置。