Короткий ответ: нет. (Но они соответствуют точно таким же машинный код, поэтому они делают точно то же самое , они просто разные мнемоники для того же сравнения.)
4
JE означает переход, если равен, он равен, если в предыдущем сравнении установлен флаг z, JZ означает переход, если установлен флаг z. Они точно такие же, некоторые люди хотят думать / писать в терминах моего сравнения, были равны или не равны. Некоторые думают и пишут в терминах установленного или снятого флага z.
old_timer
Ответы:
125
JEи JZпредставляют собой просто разные имена для одного и того же: условного перехода, когда ZF(флаг «ноль») равен 1.
(Точно так же JNEи JNZ- это просто разные имена для условного перехода, когда ZFон равен 0.)
Вы можете использовать их как взаимозаменяемые, но вы должны использовать их в зависимости от того, что вы делаете:
JZ/ JNZболее подходят, когда вы явно тестируете что-то равное нулю:
dec ecx
jz counter_is_now_zero
JEи JNEболее уместны после CMPинструкции:
cmp edx, 42
je the_answer_is_42
(Команда CMPвыполняет вычитание и отбрасывает значение результата, сохраняя при этом флаги; вот почему вы получаете, ZF=1когда операнды равны, а ZF=0когда нет.)
TL: DR: одна и та же машинная работа, другое смысловое значение. Так же , как jb/ jc/ jnaeвсе испытания CF = 1. См. Felixcloutier.com/x86/jcc (или cmovcc, или setcc)
JEи JZони оба проверяют наличие ZF(или нулевого флага), хотя в руководстве немного отличаются описания первых JErel8 иJZ rel8 ZF, но в основном они одинаковы.
Вот выдержка из страниц 464, 465 и 467 руководства.
Op Code | mnemonic | Description
-----------|-----------|-----------------------------------------------
74 cb | JE rel8 | Jump short if equal (ZF=1).
74 cb | JZ rel8 | Jump short if zero (ZF ← 1).
0F 84 cw | JE rel16 | Jump near if equal (ZF=1). Not supported in 64-bit mode.
0F 84 cw | JZ rel16 | Jump near if 0 (ZF=1). Not supported in 64-bit mode.
0F 84 cd | JE rel32 | Jump near if equal (ZF=1).
0F 84 cd | JZ rel32 | Jump near if 0 (ZF=1).
75 cb | JNE rel8 | Jump short if not equal (ZF=0).
75 cb | JNZ rel8 | Jump short if not zero (ZF=0).
0F 85 cd | JNE rel32 | Jump near if not equal (ZF=0).
0F 85 cd | JNZ rel32 | Jump near if not zero (ZF=0).
Ответы:
JE
иJZ
представляют собой просто разные имена для одного и того же: условного перехода, когдаZF
(флаг «ноль») равен 1.(Точно так же
JNE
иJNZ
- это просто разные имена для условного перехода, когдаZF
он равен 0.)Вы можете использовать их как взаимозаменяемые, но вы должны использовать их в зависимости от того, что вы делаете:
JZ
/JNZ
более подходят, когда вы явно тестируете что-то равное нулю:JE
иJNE
более уместны послеCMP
инструкции:(Команда
CMP
выполняет вычитание и отбрасывает значение результата, сохраняя при этом флаги; вот почему вы получаете,ZF=1
когда операнды равны, аZF=0
когда нет.)источник
jb
/jc
/jnae
все испытания CF = 1. См. Felixcloutier.com/x86/jcc (или cmovcc, или setcc)От руководства компании Intel - Instruction Set Reference , то
JE
иJZ
имеют один и тот же код операции (74
для rel8 /0F 84
для отн 16/32) такжеJNE
иJNZ
(75
для rel8 /0F 85
для отна 16/32) Доля Opcodes.JE
иJZ
они оба проверяют наличиеZF
(или нулевого флага), хотя в руководстве немного отличаются описания первыхJE
rel8 иJZ
rel8ZF
, но в основном они одинаковы.Вот выдержка из страниц 464, 465 и 467 руководства.
источник
источник