闲着没事想研究一下gcc的函数调用方式和m$的__stdcall、__fastcall之类有何区别,本想是了解一下关于参数的入栈顺序和清理方,就随便写了个C函数,编译成.s文件,一看发现根本就没有push和pop之类的指令...两个int参数都是利用rsi和rdi传递!网上百度了一个关于m$平台x64的调用约定
看完ddk里相关的部分,总结下吧,规则倒是不复杂,相对x86时代的stdcall cdecl fastcall 三分天下要简明的多。按ddk里的说法,m$就是要趁这次统一调用规则…… -__-
在x64下函数调用的前4个参数总是放在寄存器中传递,剩余的参数则压入堆栈中。而x86上则是全部压入堆栈中(除了fastcall方式)。这4个用于存放参数的寄存器分别是:存放整数参数的RCX,RDX,R8,R9;存放浮点数参数的XMM0,XMM1,XMM2,XMM3。
按照所传参数是整数还是浮点数的不同,寄存器的使用规则如下:
全部整数参数:
func1(int a