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:
JEyJZson solo nombres diferentes para exactamente lo mismo: un salto condicional cuandoZF(la bandera "cero") es igual a 1.(De manera similar,
JNEyJNZson solo nombres diferentes para un salto condicional cuandoZFes 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:JEyJNEson más apropiados después de unaCMPinstrucción:(Una
CMPinstrucción realiza una resta y arroja el valor del resultado, mientras mantiene las banderas; es por eso que obtieneZF=1cuando los operandos son iguales yZF=0cuando no lo son).fuente
jb/jc/jnaetodas las pruebas CF = 1. Ver felixcloutier.com/x86/jcc (o cmovcc o setcc)Del manual de Intel - Referencia de conjunto de instrucciones ,
JEyJZtienen el mismo código de operación (74para rel8 /0F 84para rel 16/32)JNEyJNZ(75para rel8 /0F 85para rel 16/32) comparten códigos de operación .JEyJZambos verifican elZF(o el indicador cero), aunque el manual difiere ligeramente en las descripciones del primer uso deJErel8 yJZrel8ZF, pero básicamente son lo mismo.Aquí hay un extracto de las páginas 464, 465 y 467 del manual.
fuente
fuente