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));
我正在尝试比较两段代码的程序集,它们如下所示。我的问题是 [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));