86 derleme kodunda, vardır JEve JNEtam olarak aynı JZve JNZ?
86 derleme kodunda, vardır JEve JNEtam olarak aynı JZve JNZ?
Yanıtlar:
JEve JZtamamen aynı şey için farklı isimlerdir: ZF("sıfır" bayrağı) 1'e eşit olduğunda koşullu bir sıçrama .
(Benzer şekilde JNEve 0'a eşit JNZolduğ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/ JNZaçıkça sıfıra eşit olan bir şeyi test ettiğinizde daha uygundur:
dec ecx
jz counter_is_now_zero
JEve JNEbir CMPtalimattan sonra daha uygundur :
cmp edx, 42
je the_answer_is_42
(Bir CMPkomut bir çıkarma işlemi gerçekleştirir ve bayrakları korurken sonucun değerini atar; bu nedenle ZF=1işlenenler eşit ZF=0olduğunda ve olmadıklarında elde edersiniz .)
jb/ jc/ jnaeall test CF = 1 gibi. Bkz. Felixcloutier.com/x86/jcc (veya cmovcc veya setcc)
Gönderen Öğretim Seti Referans - Intel'in manuel , JEve JZ(aynı işlem kodunu sahip 74REL8 için / 0F 84de rel 16/32 için) JNEve JNZ( 75REL8 için / 0F 85rel için 16/32) hisse işlem kodları.
JEve JZher ikisi de ZF(veya sıfır bayrağını) kontrol etse de, kılavuz ilk JErel8 ve JZrel8'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).