Réponse courte: non. (Mais ils correspondent exactement au même code machine, donc ils font exactement la même chose. Ils ont juste des mnémoniques différents pour la même comparaison.)
4
JE signifie sauter si égal, il est égal si une comparaison précédente a le drapeau z défini, JZ signifie sauter si le drapeau z est défini. Ils sont exactement les mêmes, certaines personnes veulent penser / écrire en termes de comparaison était égal ou non égal. Certaines personnes pensent et écrivent en termes de jeu d'indicateur z ou d'indicateur z clair.
old_timer
Réponses:
125
JEet JZsont juste des noms différents pour exactement la même chose: un saut conditionnel quand ZF(le drapeau "zéro") est égal à 1.
(De même, JNEet JNZsont juste des noms différents pour un saut conditionnel quand ZFest égal à 0.)
Vous pouvez les utiliser de façon interchangeable, mais vous devez les utiliser en fonction de ce que vous faites:
JZ/ JNZsont plus appropriés lorsque vous testez explicitement quelque chose égal à zéro:
dec ecx
jz counter_is_now_zero
JEet JNEsont plus appropriés après une CMPinstruction:
cmp edx, 42
je the_answer_is_42
(Une CMPinstruction effectue une soustraction et rejette la valeur du résultat, tout en gardant les indicateurs; c'est pourquoi vous obtenez ZF=1lorsque les opérandes sont égaux et ZF=0quand ils ne le sont pas.)
TL: DR: même fonctionnement de la machine, signification sémantique différente . Tout comme jb/ jc/ jnaetous les tests CF = 1. Voir felixcloutier.com/x86/jcc (ou cmovcc ou setcc)
Peter Cordes
36
Dans le manuel d'Intel - Instruction Set Reference , les JEet JZont le même opcode ( 74pour rel8 / 0F 84pour rel 16/32) aussi JNEet JNZ( 75pour rel8 / 0F 85pour rel 16/32) partagent des opcodes.
JEet JZils vérifient tous les deux le ZF(ou l'indicateur zéro), bien que le manuel diffère légèrement dans les descriptions de la première utilisation de JErel8 et JZrel8 ZF, mais fondamentalement ils sont les mêmes.
Voici un extrait des pages 464, 465 et 467 du manuel.
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).
Réponses:
JE
etJZ
sont juste des noms différents pour exactement la même chose: un saut conditionnel quandZF
(le drapeau "zéro") est égal à 1.(De même,
JNE
etJNZ
sont juste des noms différents pour un saut conditionnel quandZF
est égal à 0.)Vous pouvez les utiliser de façon interchangeable, mais vous devez les utiliser en fonction de ce que vous faites:
JZ
/JNZ
sont plus appropriés lorsque vous testez explicitement quelque chose égal à zéro:JE
etJNE
sont plus appropriés après uneCMP
instruction:(Une
CMP
instruction effectue une soustraction et rejette la valeur du résultat, tout en gardant les indicateurs; c'est pourquoi vous obtenezZF=1
lorsque les opérandes sont égaux etZF=0
quand ils ne le sont pas.)la source
jb
/jc
/jnae
tous les tests CF = 1. Voir felixcloutier.com/x86/jcc (ou cmovcc ou setcc)Dans le manuel d'Intel - Instruction Set Reference , les
JE
etJZ
ont le même opcode (74
pour rel8 /0F 84
pour rel 16/32) aussiJNE
etJNZ
(75
pour rel8 /0F 85
pour rel 16/32) partagent des opcodes.JE
etJZ
ils vérifient tous les deux leZF
(ou l'indicateur zéro), bien que le manuel diffère légèrement dans les descriptions de la première utilisation deJE
rel8 etJZ
rel8ZF
, mais fondamentalement ils sont les mêmes.Voici un extrait des pages 464, 465 et 467 du manuel.
la source
la source