Visual studio C++ 程序集 |括号的意思?

Visual studio C++ Assembly | Meaning of the brackets?

我正在尝试比较两段代码的程序集,它们如下所示。我的问题是 [esp+4] [esp+8] [esp+0Ch] 中的添加是在 运行 时间执行的,还是在此之前以某种方式解决的。

版本 1

00FE104D  mov         eax,dword ptr [esp+4]  
00FE1051  imul        eax,dword ptr [esp+8]  
00FE1056  mov         esi,dword ptr [esp+0Ch]  

版本 2

00FE104D  mov         eax,dword ptr [x]  
00FE1051  imul        eax,dword ptr [y]  
00FE1056  mov         esi,dword ptr [z]  

当然是在运行时执行的。 "resolving" 以前是没有意义的

mov eax,dword ptr [x]

的意思是:取x指向的任何DWORD,放入eax。在 C 中它会是这样的:

   DWORD x;
   ...
   eax = *((DWORD*)x);

   mov eax,dword ptr [x + 4]

在 C 中会是这样的

   DWORD x;
   ...
   eax = *((DWORD*)(x + 4));