Intel x86 Assembly& Microarchitecture 64位Windows
示例
参数
前4个参数按顺序传递RCX,RDX,R8和R9。XMM0至XMM3用于传递浮点参数。
任何其他参数都在堆栈上传递。
大于64位的参数按地址传递。
溢出空间
即使函数使用少于4个参数,调用方也始终在堆栈上为4个QWORD大小的参数提供空间。被调用者可以随意将它们用于任何目的,通常将参数复制到那里,如果它们会被另一个调用所溢出。
返回值
对于标量返回类型,返回值放在RAX中。如果返回类型大于64位(例如,对于结构),则RAX是指向该类型的指针。
保存和破坏的寄存器
被调用者可以溢出用于参数传递的所有寄存器(RCX,RDX,R8,R9和XMM0至XMM3),RAX,R10,R11,XMM4和XMM5。所有其他寄存器都需要由调用方保留(例如,在堆栈上)。
堆栈对齐
堆栈必须保持16字节对齐。由于“call”指令将一个8字节的返回地址压入,这意味着每个非叶函数都将以16n+8形式的值来调整堆栈,以恢复16字节的对齐方式。
呼叫后,清理堆栈是呼叫者的工作。
来源:调用约定的历史,第5部分:amd64RaymondChen
热门推荐
10 儿子立冬祝福语简短独特
11 对当兵的祝福语简短
12 侄儿高考试祝福语简短
13 伴郎红包祝福语朋友简短
14 媳妇生日简短祝福语朋友
15 公司年会祝福语简短最好
16 元旦感恩祝福语简短大全
17 红包祝福语简短10字
18 周六早晨祝福语简短