我會在這裏做一個更廣泛的答案。
有一般而言兩種條件跳轉的86:
算術跳 - 像JZ(跳轉如果爲零),JC(跳躍如果進位),JNC(跳躍,如果沒有攜帶)等。
比較跳躍 - JE(跳躍如果相等),JB(跳躍如果下文),JAE(跳躍如果高於或等於)等
因此,只有算術之後使用所述第一類型或邏輯instruc蒸發散:
sub eax, ebx
jnz .result_is_not_zero
and ecx, edx
jz .the_bit_is_not_set
後才CMP說明使用第二組:
cmp eax, ebx
jne .eax_is_not_equal_to_ebx
cmp ecx, edx
ja .ecx_is_above_than_edx
這種方式,程序變得更具可讀性,你將永遠不會被混淆。
請注意,有時這些指令實際上是同義詞。 JZ == JE; JC == JB; JNC == JAE等。完整的表格如下。正如你所看到的,只有16條件跳轉指令,但30個助記符 - 它們被設置成允許的更可讀的源代碼創建:
Mnemonic Condition tested Description
jo OF = 1 overflow
jno OF = 0 not overflow
jc, jb, jnae CF = 1 carry/below/not above nor equal
jnc, jae, jnb CF = 0 not carry/above or equal/not below
je, jz ZF = 1 equal/zero
jne, jnz ZF = 0 not equal/not zero
jbe, jna CF or ZF = 1 below or equal/not above
ja, jnbe CF or ZF = 0 above/not below or equal
js SF = 1 sign
jns SF = 0 not sign
jp, jpe PF = 1 parity/parity even
jnp, jpo PF = 0 not parity/parity odd
jl, jnge SF xor OF = 1 less/not greater nor equal
jge, jnl SF xor OF = 0 greater or equal/not less
jle, jng (SF xor OF) or ZF = 1 less or equal/not greater
jg, jnle (SF xor OF) or ZF = 0 greater/not less nor equal
@nrz你的評論不是很清楚 - OP是否期望通過真正地看待這個陳述來實現這個錯誤,真的很難? – 2013-02-12 20:47:48
@nrz Jeez男人你是否想讓我更加迷惑?!?!從其他答案中,現在我知道使用JNZ時,只有零標誌未設置(0) – 2013-02-12 23:04:50
@ 43.52.4D纔會發生跳轉。對不起,我在你的問題中誤讀了「JNZ - 如果Z標記不爲零(1)」,就會發生跳轉,因此我的評論可能會令人困惑,所以現在我刪除了它。 [Intel x86 JUMP快速參考](http://www.unixwiz.net/techtips/x86-jumps.html)有一個用於檢查不同x86條件跳轉的分支條件的有用表格。 – nrz 2013-02-13 00:09:06