x86内存寻址功能参数

时间:2011-10-22 18:54:47

标签: assembly x86

因此,如果我有一个程序,其中第一个形式参数是int[]并且我通过该循环枚举,我很困惑为什么一个代码在另一个代码没有的情况下工作。我应该能够做到这一点:

#where ebp+8 is the location of the pointer, and ecx is the counter
mov edx, [ebp+ecx*4+8]

这给了我一个edx的乱码值,但这段代码工作正常

mov edx, [ebp+8]
mov edx, [edx+ecx*4]

我不明白这些陈述之间的区别。

1 个答案:

答案 0 :(得分:4)

他们是不同的:

在第一段代码中:

mov edx, [ebp+ecx*4+8]

您是从地址ebp+ecx*4+8

加载的

在第二个代码中:

mov edx, [ebp+8]
mov edx, [edx+ecx*4]

首先加载ebp+8存储的值。然后将它用作第二次加载的基地址。

换句话说,基地址存储在ebp + 8指向的内存位置。它实际上并不存储在ebp寄存器本身中。