1. ホーム
  2. assembly

[解決済み] アセンブリで命令セテは何をするのですか?

2022-02-14 15:01:20

質問内容

私のユニバーシティ・コースでは、基本的なアセンブリの知識が必要なのですが、私は何も持っていません。しかし、彼らはこのサンプルアセンブリコードを私たちに与えました。

080485fa <check_pin>:
 80485fa:       55                      push   ebp
 80485fb:       89 e5                   mov    ebp,esp
 80485fd:       81 7d 08 bf 07 00 00    cmp    DWORD PTR [ebp+0x8],0x7bf
 8048604:       0f 94 c0                sete   al
 8048607:       0f b6 c0                movzx  eax,al
 804860a:       5d                      pop    ebp
 804860b:       c3                      ret

以下のCコードとほぼ同等と思われる。

int check_pin(int pin) {
        return pin == 0x7bf;
}

このアセンブリコードが一体何をするものなのか、私は理解しようとしているのですが、次のように唖然としています。 sete という命令があります。この命令は何をするのでしょうか?

ウィキブックスでは x86アセンブリのコース については見つけられませんでした。 sete という章があり、その中にアセンブリ命令について書かれています。

解き方は?

その sete 命令(およびそれに相当するもの。 setz ) は、その引数を 1 は、ゼロフラグが設定されている場合、または 0 それ以外の場合は ゼロフラグは、最後の比較または算術命令で等しいかゼロの結果を得た場合に設定されます。 したがって、あなたの場合 sete セット al から 0 または 1 の結果に応じて、前の cmp という命令があります。