Ich werde hier eine etwas breitere Antwort geben.
Es ist in der Regel spricht zwei Arten von bedingten Sprüngen in x86:
Arithmetik springt - wie JZ (Sprung, wenn Null), JC (Sprung, wenn carry), JNC (Sprung, wenn nicht tragen), usw. .
Vergleich springt - JE (Sprung, wenn gleich), JB (Sprung, wenn unten), JAE (Sprung, wenn über oder gleich) usw.
So verwenden Sie den ersten Typ erst nach Arithmetik oder logischer Befehl gen:
sub eax, ebx
jnz .result_is_not_zero
and ecx, edx
jz .the_bit_is_not_set
erst nach CMP Anweisungen, um die zweite Gruppe Verwendung:
cmp eax, ebx
jne .eax_is_not_equal_to_ebx
cmp ecx, edx
ja .ecx_is_above_than_edx
Auf diese Weise wird das Programm besser lesbar und Sie werden nie verwechselt werden.
Beachten Sie, dass diese Anweisungen manchmal tatsächlich Synonyme sind. JZ == JE; JC == JB; JNC == JAE und so weiter. Die vollständige Tabelle folgt.Wie Sie sehen können, gibt es nur 16 bedingte Sprunganweisungen, aber 30 Mnemotechnik - sie Schaffung von mehr lesbaren Quellcode zu ermöglichen, wird zur Verfügung gestellt:
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 Ihr Kommentar ist nicht sehr klar - ist das OP erwartet, um den Fehler zu erkennen, indem Sie auf die Aussage wirklich, wirklich hart? –
@nrz Jeez Mann willst du mich noch mehr verwirren?!?! Von den anderen Antworten weiß ich jetzt, dass mit JNZ der Sprung nur stattfindet, wenn das Null-Flag NICHT gesetzt ist (0) –
@ 43.52.4D. Entschuldigung, ich habe den Satz "JNZ - Der Sprung findet statt, wenn die Z-Flagge NICHT NULL (1) ist" in Ihrer Frage falsch gelesen, und als Ergebnis war mein Kommentar möglicherweise verwirrend, also habe ich ihn jetzt gelöscht. [Intel x86 JUMP-Kurzreferenz] (http://www.unixwiz.net/techtips/x86-jumps.html) hat eine nützliche Tabelle, um die Verzweigungsbedingungen verschiedener x86 bedingter Sprünge zu überprüfen. – nrz