我有一個函數,它需要3個參數,dest,src0,src1,每個指針指向大小爲12的數據。我提出了兩個版本。一個用C語言編寫,由編譯器優化,另一個用_asm寫。嗯是的。 3個參數?我很自然地做這樣的事情:MSVC彙編函數參數C++ vs _asm
mov ecx, [src0]
mov edx, [src1]
mov eax, [dest]
我有點編譯器迷惑,因爲它認爲應該增加以下內容:
_src0$ = -8 ; size = 4
_dest$ = -4 ; size = 4
_src1$ = 8 ; size = 4
[email protected]@[email protected]@[email protected]@Z PROC ; vm_vec_add_scalar_asm
; _dest$ = ecx
; _src0$ = edx
; 20 : {
sub esp, 8
mov DWORD PTR _src0$[esp+8], edx
mov DWORD PTR _dest$[esp+8], ecx
; 21 : _asm
; 22 : {
; 23 : mov ecx, [src0]
mov ecx, DWORD PTR _src0$[esp+8]
; 24 : mov edx, [src1]
mov edx, DWORD PTR _src1$[esp+4]
; 25 : mov eax, [dest]
mov eax, DWORD PTR _dest$[esp+8]
Function body etc.
add esp, 8
ret 0
什麼的_src0 $ [ESP + 8]等。甚至意味着?爲什麼它在我的代碼之前完成所有這些東西?它爲什麼試圖[顯然]堆疊什麼東西?
相比之下,C++版本只在它的身上,這是非常類似之前以下內容:
_src1$ = 8 ; size = 4
[email protected]@[email protected]@[email protected]@Z PROC ; vm_vec_add
; _dest$ = ecx
; _src0$ = edx
mov eax, DWORD PTR _src1$[esp-4]
爲什麼是這個小足夠了嗎?