ebp
スタックフレームの割り当てに必要であると誤って想定しています。これは正しくありませんesp
。直接使用できます。ebp
をスタック フレーム ポインタとして使用することは、現在ではまったく必要ありません。いくつかのポイントがあり、便利でした:
16 ビット コードでは、アドレッシングでの (スタック ポインター) の使用は厳しく制限されていました。x86 では、利用可能なすべてのアドレッシング モードsp
で相対アドレッシングを直接使用することはできませんでした。bp
この制限されたサポートの理由は、おそらく当時利用可能なコンパイラでしたsp
. leave
またはのようなスタックフレーム命令を特別にサポートするプロセッサは他にもたくさんありますがenter
、私の知る限り、インテル以外の誰もsp
そのプロセスで実際のものを無効にすることはありません:-)
デバッグ。フレーム ポインターが使用できる場合、スタックをアンワインドするのははるかに簡単ですが、最新のデバッガーはそれがなくても実行できます。
スタックに 100 バイトのスペースを割り当てたい場合は、 を実行し、 0 から 99 までsub esp, #100
のスペースにアクセスしてクリーンアップすれば完了です。手書きのアセンブリでスタック フレーム ポインタを使用することは、30 年前のコンパイラの動作をコピーするようなものだとさえ主張します。アセンブリを作成している場合、これはまったく必要ではなく、役に立ちません。move [esp + x]
x
add esp, #100