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

时间:2012-10-19 09:59:02

标签: assembly x86

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

mov ebp, eax

下一行是:

mov edi, dword ptr [ebp]

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

我能理解说:

mov [ebp+12], eax

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

1 个答案:

答案 0 :(得分:5)

如果没有看到更多代码,就不可能通过这些指令告诉使用哪些实体。

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

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

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

只要您的代码不需要保留[ebp+something]的值,或者只要将ebp恢复到预期值,那么执行ebp就不会发生任何问题。