int _stdcall s_addint(int i, int j)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
printf("i = %d\n",i);
printf("j = %d\n",j);
return i+j;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int __cdecl c_addint(int i, int j)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
printf("i = %d\n",i);
printf("j = %d\n",j);
return i+j;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int _fastcall f_addint(int i, int j, int k)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
printf("i = %d\n",i);
printf("j = %d\n",j);
printf("k = %d\n",k);
return i+j+k;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int _tmain(int argc, _TCHAR* argv[])
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int num;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 汇编调用_stdcall函数
// 参数由右至左压栈
// 调用返回时,堆栈由被调函数调整
// 返回值在EAX中
_asm
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
push 2
push 1
call s_addint
mov num,eax
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
printf("num = %d\n",num);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 汇编调用__cdecl函数
// 参数由右至左压栈
// 调用返回时,堆栈由调用者调整
// 返回值在EAX中
_asm
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
push 4
push 3
call c_addint
mov num,eax
add esp,4*2
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
printf("num = %d\n",num);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 汇编调用_fastcall函数
// 函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈
// 调用返回时,堆栈由被调函数调整
// 返回值在EAX中
_asm
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
mov ecx,5
mov edx,6
push 7
call f_addint
mov num,eax
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
printf("num = %d\n",num);
return 0;
}
以上代码通过VC8编译