在实现之前需要熟悉汇编和堆栈的知识才行,否则可能无法理解;
首先输说一下函数的几种调用方式,常见的三种有:
1.__cdecl 参数从右至左入栈 调用者清理栈(外平栈);
2.__stdcall 参数从右至左入栈 自身清理堆栈(内平栈);
3.__fastcall ecx和edx传送前两个参数,剩下的参数从右至左入栈 自身清理堆栈,如果参数<=两个
则不用平衡堆栈,因为参数在寄存器里;
在了解之后,就可以写代码了,
//使用内联汇编编写函数
int __fastcall add(int a,int b) {
__asm {
mov eax,ecx;第一个参数在ecx
add eax,edx;第二个参数在edx
}
}
void main()
{
int res;
__asm {
mov ecx, 11;传递第一个参数
mov edx, 22;传递第二个参数
call add;调用函数add
mov dword ptr[res], eax;从eax中取结果
}
printf("res=%d\n",res);
}