_fastcall : 寄存器方式传参,函数本身负责管理函数调用堆栈,不支持不定参数,VC默认在参数个数小于等于3的情况下使用这种方式。;--- e:\code\win32\dre\helloworld\main.cpp --------------------------------------
#include <stdio.h>
int _cdecl Test(int a, int b)
{
009E13A0 push ebp
009E13A1 mov ebp,esp
009E13A3 sub esp,0C0h
009E13A9 push ebx
009E13AA push esi
009E13AB push edi
009E13AC lea edi,[ebp-0C0h]
009E13B2 mov ecx,30h
009E13B7 mov eax,0CCCCCCCCh
009E13BC rep stos dword ptr es:[edi]
return a+b;
009E13BE mov eax,dword ptr [a]
009E13C1 add eax,dword ptr [b]
}
009E13C4 pop edi
009E13C5 pop esi
009E13C6 pop ebx
009E13C7 mov esp,ebp
009E13C9 pop ebp
009E13CA ret ;无平衡堆栈,这类调用方式不用处理函数堆栈帧
;--- 无源文件 -----------------------------------------------------------------------
;--- e:\code\win32\dre\helloworld\main.cpp --------------------------------------
int _stdcall Test1(int a, int b)
{
009E13F0 push ebp
009E13F1 mov ebp,esp
009E13F3 sub esp,0C0h
009E13F9 push ebx
009E13FA push esi
009E13FB push edi
009E13FC lea edi,[ebp-0C0h]
009E1402 mov ecx,30h
009E1407 mov eax,0CCCCCCCCh
009E140C rep stos dword ptr es:[edi]
return a+b;
009E140E mov eax,dword ptr [a]
009E1411 add eax,dword ptr [b]
}
009E1414 pop edi
009E1415 pop esi
009E1416 pop ebx
009E1417 mov esp,ebp
009E1419 pop ebp
009E141A ret 8 ;平衡堆栈,这类调用方式需要处理函数堆栈帧
;--- 无源文件 -----------------------------------------------------------------------
;main
;{
Test(1,2);
009E145E push 2
009E1460 push 1
009E1462 call Test (9E100Ah)
009E1467 add esp,8 ;平衡堆栈,调用者需要处理函数堆栈帧
Test1(1,2);
009E146A push 2
009E146C push 1
009E146E call Test1 (9E107Dh) ;无平衡堆栈,被调用者已处理函数堆栈帧
;}