2012-02-18 100 views
9

後我有下一個指令:裝配 - JZ指令CMP

cmp al, 1 
jz mub 

當人是2(二進制10)。這條指令會做什麼?據我所知,我可以使用JE,JNE,JA等,但cmp指令後的含義是什麼?

感謝

+0

jz = je,這是相同的指令。 – 2012-02-18 18:34:50

回答

16

jz是「跳躍如果零」。 cmp減去其兩個操作數,並相應地設置標誌。 (請參閱here以供參考。)

如果兩個操作數相等,則減法運算結果爲零,並且ZF標誌將被設置。

因此,在您的示例中,如果al爲1,則不會採取其他措施。

3

jz意味着如果跳爲零。在這種情況下,只有在al爲1時纔會跳轉。

這是因爲cmp通常等於sub(減),但實際上沒有更改該值。

cmp al, 1將基於如果從al中減去1會發生什麼來設置處理器標誌(包括零標誌)。

如果al爲2,則跳轉不會被執行(因爲零標誌未被設置),並且代碼將繼續在jz之後的指令處執行。

順便說一句,jz往往是相同作爲操作碼,因爲je他們實際上意味着同樣的事情。參見例如Wikipedia page on x86 control flow:零點

跳轉
jz loc
荷載EIP指定地址,如果零位被從先前的算術表達式設定。 jz與je相同。

1

'跳轉零' - 如果設置了零標誌,則跳轉到標籤'mub'。 'cmp'是一個減法,只設置標誌&因此,如果a1是2,(2-1)<> 0,那麼零標誌清零,跳轉將不會執行。