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

Assembly 将另一个寄存器移动到EBP寄存器,assembly,x86,Assembly,X86,我理解EBP和ESP寄存器的基本语义,但我对以下内容有点困惑: mov ebp, eax 下一行是: mov edi, dword ptr [ebp] 我认为ebp寄存器是我们遍历堆栈的参考点,向它添加参数,减去得到局部变量。所以,通过将eax移动到ebp,这不会导致问题吗 我可以说: mov [ebp+12], eax 我猜这是沿着将eax移动到out参数的路线进行的?如果不看到更多代码,就不可能知道使用这些指令访问哪些实体 x86 CPU中没有任何东西阻止您使用ebp进行访问子程序参数

我理解EBP和ESP寄存器的基本语义,但我对以下内容有点困惑:

mov ebp, eax
下一行是:

mov edi, dword ptr [ebp]
我认为ebp寄存器是我们遍历堆栈的参考点,向它添加参数,减去得到局部变量。所以,通过将eax移动到ebp,这不会导致问题吗

我可以说:

mov [ebp+12], eax

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

如果不看到更多代码,就不可能知道使用这些指令访问哪些实体

x86 CPU中没有任何东西阻止您使用
ebp
进行访问子程序参数和局部变量以外的操作

在32位模式下,您也可以通过
esp
访问堆栈上的变量,因为
[esp+something]
有内存操作数编码。在16位模式下,无法使用
sp
执行此操作,需要使用以下列表中的一个寄存器:
bp
bx
si
di

有些编译器可以选择使用
[esp+something]
而不是
[ebp+something]
来访问堆栈上的数据。这为您购买了一个额外的通用寄存器,您可以将其用于其他用途


只要您的代码不需要保留
ebp
的值,或者只要它将
ebp
恢复到预期值,那么执行
mov ebp,eax

操作就不会发生任何不好的事情,在没有看到更多代码的情况下,不可能判断使用这些指令访问哪些实体

x86 CPU中没有任何东西阻止您使用
ebp
进行访问子程序参数和局部变量以外的操作

在32位模式下,您也可以通过
esp
访问堆栈上的变量,因为
[esp+something]
有内存操作数编码。在16位模式下,无法使用
sp
执行此操作,需要使用以下列表中的一个寄存器:
bp
bx
si
di

有些编译器可以选择使用
[esp+something]
而不是
[ebp+something]
来访问堆栈上的数据。这为您购买了一个额外的通用寄存器,您可以将其用于其他用途

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