1. ホーム
  2. assembly

[解決済み】JNZとCMPのアセンブリ命令

2022-02-23 12:22:37

質問

間違っていたら訂正してください。

これは、私の理解では JNZCMP .

JNZ - の場合、ジャンプは行われます。 Z フラグがゼロ(1)でない場合

CMP - 2つの値が等しい場合 Z フラグが設定される(1)か、そうでない場合は設定されない(0)

これは、私が見ているフラッシュチュートリアルです。簡単なCrackMeの解法を教えてくれています。

ご覧の通り、先の命令で比較した AL47h . を設定したものと同等でした。 Z のフラグを立てます。(右側のレジスターウィンドウで確認できます)

次の命令は JNZ . 私の理解では、ジャンプが行われるのは Z フラグが設定されています。その Z フラグは設定されていますが、ジャンプは行われません。

なぜですか?

解決方法は?

JNZは"Jump if not zero (ZF = 0)"の略で、以下のようになります。 NOT "ZFが設定されている場合にジャンプする"。

少しでも覚えやすければ、JNZとJNE(jump if not equal)は等価だと考えてください。したがって cmp al, 47 で、その中身は AL が47と等しい場合、ZFが設定され、ジャンプ(Not Equal - JNE)は行われない。