X86アセンブリコードでは、JE
およびJNE
はJZ
およびJNZ
とまったく同じですか?
JE
とJZ
は、まったく同じことのための異なる名前です。ZF
(「ゼロ」フラグ)が1に等しい場合の条件付きジャンプです。
(同様に、JNE
とJNZ
は、ZF
が0に等しい場合の条件付きジャンプの単なる異なる名前です。)
couldそれらを同じ意味で使用しますが、shouldあなたがしていることに応じてそれらを使用します:
JZ
/JNZ
は、ゼロに等しいものを明示的にテストする場合により適しています。
dec ecx
jz counter_is_now_zero
JE
およびJNE
は、CMP
命令の後に適切です。
cmp edx, 42
je the_answer_is_42
(CMP
命令は減算を実行し、フラグを保持したまま結果の値を破棄します。そのため、オペランドが等しい場合はZF=1
、オペランドが等しい場合はZF=0
を取得します。しないでください。)
Intelのマニュアル-命令セットリファレンス から、JE
とJZ
のオペコードは同じです(rel8の場合は74
、rel 16の場合は0F 84
32)JNE
およびJNZ
(rel8の場合は75
/rel 16/32の場合は0F 85
)もオペコードを共有します。
JE
とJZ
は両方ともZF
(またはゼロフラグ)をチェックしますが、マニュアルは最初のJE
rel8とJZ
の説明が少し異なりますrel8 ZF
の使用法ですが、基本的には同じです。
以下は、マニュアルの464、465、および467ページからの抜粋です。
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).