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
热门推荐
7 简短的二胎祝福语
10 简短霸气女儿生日 祝福语
11 祝福语高考小众诗句简短
12 元旦祝福语20秒简短
13 老师过年祝福语大全 简短
14 一生祝福语简短
15 产检祝福语简短霸气
16 朋友店开张祝福语简短
17 生日爱情祝福语大全简短
18 朋友女儿生日祝福语 简短