我写这经典功能:(在32位模式下)错误的Visual Studio程序集输出?
void ex(size_t a, size_t b)
{
size_t c;
c = a;
a = b;
b = c;
}
我称之为主内部如下:
size_t a = 4;
size_t b = 5;
ex(a,b);
我是从进入时生成的汇编代码期待功能是这样的:
1-推的b和a的值在堆栈:(这是完成)
mov eax,dword ptr [b]
push eax
mov ecx,dword ptr [a]
push ecx
2 - 使用的在堆栈中的值和b:
push ebp
mov ebp, esp
sub esp, 4
c = a;
mov eax, dword ptr [ebp+8]
mov dword ptr [ebp-4], eax
等的其他变量。
然而,这就是我发现在调试时:
push ebp
mov ebp,esp
sub esp,0CCh // normal since it's in debug with ZI option
push ebx
push esi
push edi
lea edi,[ebp-0CCh]
mov ecx,33h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]
size_t c;
c = a;
mov eax,dword ptr [a]
mov dword ptr [c],eax
为什么使用变量在调用存储在堆栈的价值,而不是直接?我不明白...
整数不能叫。只有函数被调用。你需要使用其他一些动词。 –
你的功能是无意义的,所以你真的可以期待任何无意义的事情发生。你正在操作一些局部变量,然后返回而没有返回值,也没有任何副作用。我敢打赌,在非调试版本中,你的函数将被编译为无。 –
我很惊讶,有任何代码生成,因为功能不做任何事情。 – ThingyWotsit