x86アセンブリコードでは、とはおよびJE
とJNE
まったく同じですか?JZ
JNZ
質問する
163105 次
3 に答える
138
JE
とJZ
は、まったく同じことの別の名前です: ZF
(「ゼロ」フラグ) が 1 に等しい場合の条件付きジャンプ。
(同様に、JNE
とは、が 0JNZ
の場合の条件付きジャンプの別の名前です。 )ZF
これらは同じ意味で使用できますが、何をしているかに応じて使用する必要があります。
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
ない場合に取得する理由です。)
于 2013-01-10T21:31:34.027 に答える
41
Intel のマニュアル - Instruction Set Referenceから、JE
とJZ
は同じオペコード ( 74
rel8 用 / 0F 84
rel 16/32 用) JNE
とJNZ
( 75
rel8 用 / 0F 85
rel 16/32 用) がオペコードを共有しています。
JE
最初のrel8 とrel8の使用方法の説明でマニュアルが少し異なりますが、どちらも (またはゼロ フラグ) をJZ
チェックしますが、基本的には同じです。ZF
JE
JZ
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).
于 2013-01-10T21:32:49.487 に答える
-6
je : Jump if equal:
399 3fb: 64 48 33 0c 25 28 00 xor %fs:0x28,%rcx
400 402: 00 00
401 404: 74 05 je 40b <sims_get_counter+0x51>
于 2019-07-05T06:41:52.423 に答える