Здесь я расскажу немного шире.
Там, вообще говоря, два типа условных переходов в x86:
Арифметика прыжки - как JZ (переход, если ноль), JC (переход, если перенос), JNC (переход, если не носить), и т.д. .
Сравнение скачки - JE (скачок, если равны), JB (скачок, если ниже), ЮАЭ (скачок, если выше или равно) и т.д.
Таким образом, использовать первый тип только после арифметики или логические инструкции ли
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 Ваш комментарий не очень ясен - ожидаемый ОП осознает ошибку, посмотрев на заявление действительно, действительно тяжело? –
@nrz Боже, ты пытаешься запутать меня еще больше?!?! Из других ответов теперь я знаю, что с JNZ скачок происходит только в том случае, если флаг нуля НЕ установлен (0) –
@ 43.52.4D. Извините, я неправильно прочитал предложение «JNZ - прыжок произойдет, если Z-флаг НЕ равен нулю (1)» в вашем вопросе, и в результате мой комментарий был, возможно, запутанным, поэтому я удалил его сейчас. [Быстрая ссылка Intel x86 JUMP] (http://www.unixwiz.net/techtips/x86-jumps.html) содержит полезную таблицу для проверки условий разветвления различных условных переходов x86. – nrz