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 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短