101

x86アセンブリコードでは、とはおよびJEJNEまったく同じですか?JZJNZ

4

3 に答える 3

138

JEJZは、まったく同じことの別の名前です: 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から、JEJZは同じオペコード ( 74rel8 用 / 0F 84rel 16/32 用) JNEJNZ( 75rel8 用 / 0F 85rel 16/32 用) がオペコードを共有しています。

JE最初のrel8 とrel8の使用方法の説明でマニュアルが少し異なりますが、どちらも (またはゼロ フラグ) をJZチェックしますが、基本的には同じです。ZFJEJZZF

以下は、マニュアルの 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 に答える