86 derleme kodunda, vardır JE
ve JNE
tam olarak aynı JZ
ve JNZ
?
86 derleme kodunda, vardır JE
ve JNE
tam olarak aynı JZ
ve JNZ
?
Yanıtlar:
JE
ve JZ
tamamen aynı şey için farklı isimlerdir: ZF
("sıfır" bayrağı) 1'e eşit olduğunda koşullu bir sıçrama .
(Benzer şekilde JNE
ve 0'a eşit JNZ
olduğunda koşullu sıçrama için farklı isimlerdir. ZF
)
Sen olabilir birbirinin yerine kullanabilirsiniz, ancak gerektiğini ne yaptığınızı bağlı bunları kullanmak:
JZ
/ JNZ
açıkça sıfıra eşit olan bir şeyi test ettiğinizde daha uygundur:
dec ecx
jz counter_is_now_zero
JE
ve JNE
bir CMP
talimattan sonra daha uygundur :
cmp edx, 42
je the_answer_is_42
(Bir CMP
komut bir çıkarma işlemi gerçekleştirir ve bayrakları korurken sonucun değerini atar; bu nedenle ZF=1
işlenenler eşit ZF=0
olduğunda ve olmadıklarında elde edersiniz .)
jb
/ jc
/ jnae
all test CF = 1 gibi. Bkz. Felixcloutier.com/x86/jcc (veya cmovcc veya setcc)
Gönderen Öğretim Seti Referans - Intel'in manuel , JE
ve JZ
(aynı işlem kodunu sahip 74
REL8 için / 0F 84
de rel 16/32 için) JNE
ve JNZ
( 75
REL8 için / 0F 85
rel için 16/32) hisse işlem kodları.
JE
ve JZ
her ikisi de ZF
(veya sıfır bayrağını) kontrol etse de, kılavuz ilk JE
rel8 ve JZ
rel8'in açıklamalarında biraz farklılık gösterir.ZF
kullanımının , ancak temelde .
İşte kılavuzun 464, 465 ve 467 sayfalarından bir alıntı.
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).