将另一个寄存器移到EBP寄存器

Sci*_*ion 1 x86 assembly

我理解EBP和ESP寄存器的基本语义,但我对以下内容略有不满:

mov ebp, eax
Run Code Online (Sandbox Code Playgroud)

下一行是:

mov edi, dword ptr [ebp]
Run Code Online (Sandbox Code Playgroud)

我认为ebp寄存器是我们参考堆栈的参考点,添加它给我们参数,减去获取局部变量.因此,通过将eax移动到ebp,这不会导致问题吗?

我能理解说:

mov [ebp+12], eax
Run Code Online (Sandbox Code Playgroud)

我猜这是将eax移动到out参数的路线?

Ale*_*nze 5

在没有看到更多代码的情况下,无法通过这些指令判断正在访问哪些实体.

x86 CPU中的任何内容都不能阻止您使用ebp除访问子例程参数和局部变量之外的其他内容.

在32位模式下,您也可以访问堆栈上的变量esp,因为存在操作数编码[esp+something].在16位模式下,你不能这样做,与sp和必须使用的寄存器中的一个从以下列表:bp,bx,si,di.

有些编译器可以选择使用[esp+something]而不是[ebp+something]访问堆栈数据.这会为您购买额外的通用寄存器,您可以将其用于其他事项.

只要您的代码不需要保留其值ebp或者只要它恢复ebp到预期值,就不会发生任何不好的事情mov ebp, eax.