使用内联汇编实现函数调用

在实现之前需要熟悉汇编和堆栈的知识才行,否则可能无法理解;

首先输说一下函数的几种调用方式,常见的三种有:

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);

}

 

你可能感兴趣的:(c/c++)