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 同事生日祝福语简短独特
13 最新高考祝福语 简短
14 给长辈冬至祝福语 简短
15 写给女友的祝福语++简短
16 英文祝福语 唯美简短的
17 新年祝福语简短语英语
18 物业元旦祝福语简短独特