En el código ensamblador x86, son JEy JNEexactamente el mismo que JZy JNZ?
En el código ensamblador x86, son JEy JNEexactamente el mismo que JZy JNZ?
Respuestas:
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).
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 , JEy JZtienen el mismo código de operación ( 74para rel8 / 0F 84para rel 16/32) JNEy JNZ( 75para rel8 / 0F 85para rel 16/32) comparten códigos de operación .
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).