1. ホーム
  2. assembly

[解決済み] JE/JNEとJZ/JNZの違いについて

2022-03-10 08:37:39

質問

x86のアセンブリコードでは、以下のようになります。 JEJNE と全く同じです。 JZJNZ ?

解決方法は?

JEJZ は、全く同じものの別名に過ぎません。 条件付きジャンプ ZF ("zero" フラグ) が 1 になります。

(同様に JNEJNZ は、条件付きジャンプの別名に過ぎません いつ ZF は0に等しい)

あなたは かもしれない を使い分けていますが、あなたは すべき によって使い分けます。 ということです。

  • JZ / JNZ は、明示的にテストする場合により適切です。 がゼロに等しいかどうか。

    dec  ecx
    jz   counter_is_now_zero
    
    
  • JEJNE の後の方がより適切です。 CMP という命令があります。

    cmp  edx, 42
    je   the_answer_is_42
    
    

    (A CMP 命令は引き算を行い、フラグを保持したまま結果の値を捨てます。 ZF=1 オペランドが等しい場合 と ZF=0 ということになる)。