我寫這經典功能:(在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