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