1. ホーム
  2. assembly

[解決済み] ESPレジスタとEBPレジスタとは何ですか?

2022-03-04 01:44:47

質問

ESP レジスタは現在のスタックポインタ、EBP は現在のスタックフレームのベースポインタであることがわかりました。しかし、私はこれらの定義を理解していません(私はアセンブラでコーディングする方法を学び始めたばかりです)。

私が理解しているのは、ESPはスタックそのものを指し、EBPはスタックの一番上にあるものを指すということです。 1 . しかし、これらは私の推測に過ぎず、間違っている可能性が高いです。そうでなければ、次のような文は何を意味するのでしょうか?

MOV EBP, ESP    

脚注1:編集部注:はい、不正解です。 標準的な用語では、ESPはスタックフレームの最下位アドレスですが、quot;top of the stack"はESPが指す場所です。 これは、x86のコールスタック(ほとんどのISAと同様)が下向きに成長するにもかかわらず、上向きに成長するスタックデータ構造との類似によるものです。

解決するには?

espはスタックポインターで、ebpはスタックフレームのためにあり、関数に入ったときにebpがその時点でespのコピーを取得できるようにしたもので、その前にスタック上にあったもの、リターンアドレス、パラメータで渡されたもの、その他その関数に対してグローバルなもの(ローカル変数)は、その関数の間スタックフレームポインターから静的に離れた距離になります。espは今やコンパイラが望むように自由に動き回り、他の関数へのネストのときに使用できます(それぞれが自然にebpを保つ必要がある)。

コンパイラのデバッグを容易にし、コンパイラが生成するコードの理解を容易にしますが、他の汎用レジスタを燃やすことになります。