Respuesta corta: no. (Pero corresponden exactamente al mismo código de máquina, por lo que hacen exactamente lo mismo. Solo tienen diferentes mnemónicos para la misma comparación).
4
JE significa salto si es igual, es igual si una comparación previa tiene la bandera z activada, JZ significa salto si la bandera z está activada. Son exactamente iguales, algunas personas quieren pensar / escribir en términos de mi comparación fue igual o no igual. Algunas personas piensan y escriben en términos de si la bandera z está establecida o la bandera z está clara.
old_timer
Respuestas:
125
JEy JZson solo nombres diferentes para exactamente lo mismo: un salto condicional cuando ZF(la bandera "cero") es igual a 1.
(De manera similar, JNEy JNZson solo nombres diferentes para un salto condicional cuando ZFes igual a 0).
Usted podría utilizar de forma indistinta, pero debe usarlos en función de lo que está haciendo:
JZ/ JNZson más apropiados cuando está probando explícitamente que algo sea igual a cero:
dec ecx
jz counter_is_now_zero
JEy JNEson más apropiados después de una CMPinstrucción:
cmp edx, 42
je the_answer_is_42
(Una CMPinstrucción realiza una resta y arroja el valor del resultado, mientras mantiene las banderas; es por eso que obtiene ZF=1cuando los operandos son iguales y ZF=0cuando no lo son).
TL: DR: misma operación de máquina, diferente significado semántico . Al igual que jb/ jc/ jnaetodas las pruebas CF = 1. Ver felixcloutier.com/x86/jcc (o cmovcc o setcc)
JEy JZambos verifican el ZF(o el indicador cero), aunque el manual difiere ligeramente en las descripciones del primer uso de JErel8 y JZrel8 ZF, pero básicamente son lo mismo.
Aquí hay un extracto de las páginas 464, 465 y 467 del manual.
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).
Respuestas:
JE
yJZ
son solo nombres diferentes para exactamente lo mismo: un salto condicional cuandoZF
(la bandera "cero") es igual a 1.(De manera similar,
JNE
yJNZ
son solo nombres diferentes para un salto condicional cuandoZF
es igual a 0).Usted podría utilizar de forma indistinta, pero debe usarlos en función de lo que está haciendo:
JZ
/JNZ
son más apropiados cuando está probando explícitamente que algo sea igual a cero:JE
yJNE
son más apropiados después de unaCMP
instrucción:(Una
CMP
instrucción realiza una resta y arroja el valor del resultado, mientras mantiene las banderas; es por eso que obtieneZF=1
cuando los operandos son iguales yZF=0
cuando no lo son).fuente
jb
/jc
/jnae
todas las pruebas CF = 1. Ver felixcloutier.com/x86/jcc (o cmovcc o setcc)Del manual de Intel - Referencia de conjunto de instrucciones ,
JE
yJZ
tienen el mismo código de operación (74
para rel8 /0F 84
para rel 16/32)JNE
yJNZ
(75
para rel8 /0F 85
para rel 16/32) comparten códigos de operación .JE
yJZ
ambos verifican elZF
(o el indicador cero), aunque el manual difiere ligeramente en las descripciones del primer uso deJE
rel8 yJZ
rel8ZF
, pero básicamente son lo mismo.Aquí hay un extracto de las páginas 464, 465 y 467 del manual.
fuente
fuente