2 ответов:
JEиJZпросто разные имена для одного и того же: a условный прыжок, когда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(A
CMPинструкция выполняет вычитание и выбрасывает значение результата, сохраняя при этом флаги; именно поэтому вы получаетеZF=1когда операнды равны иZF=0когда их нет.)
С руководство Intel - набор инструкций ссылка на
JEиJZимеют тот же код (74для rel8 /0F 84для rel 16/32) такжеJNEиJNZ(75для rel8 /0F 85для rel 16/32) доля опкодов.
JEиJZОни оба проверяют наZF(или нулевой флаг), хотя руководство немного отличается в описаниях первогоJErel8 иJZrel8ZFиспользования, но в основном они тот же.вот выдержка из руководства на страницах 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).
Comments