1

EBP および ESP レジスタの基本的なセマンティクスは理解していますが、次の点で少し混乱しています。

mov ebp, eax

次の行は次のとおりです。

mov edi, dword ptr [ebp]

ebp レジスタは、スタックをウォークするための参照ポイントであると考えました。これに追加するとパラメーターが得られ、減算するとローカル変数が取得されます。では、eax を ebp に移行することで問題が発生することはありませんか?

私は言うことを理解できました:

mov [ebp+12], eax

これは、eax を out パラメータに移動する方向に沿っていると思いますか?

4

1 に答える 1

5

より多くのコードを見ずに、これらの命令でどのエンティティがアクセスされているかを知ることは不可能です。

x86 CPUには、ebpサブルーチンパラメータとローカル変数へのアクセス以外の目的での使用を妨げるものはありません。

32ビットモードでは、のespメモリオペランドエンコーディングがあるため、スタック上の変数にもアクセスできます[esp+something]。16ビットモードでは、これを行うことはできず、sp次のリストのレジスタの1つを使用する必要があります:bp、、、。bxsidi

一部のコンパイラには、スタック上のデータにアクセスする[esp+something]代わりに使用するオプションがあります。[ebp+something]これにより、他の用途に使用できる追加の汎用レジスターが購入されます。

コードがの値を保持する必要がない限り、または期待値にebp復元する限り、を実行しても問題は発生しません。ebpmov ebp, eax

于 2012-10-19T10:11:34.717 に答える