# 参数传递
- 前 6 个整型/指针类型的参数使用寄存器
| 参数 1 | 参数 2 | 参数 3 | 参数 4 | 参数 5 | 参数 6 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| RDI | RSI | RDX | RCX | R8 | R10 |
- 多余参数调用者入栈(从右到左)
- 浮点数参数使用 XMM0-7 寄存器传递
# 返回值
- 小于 64 bits 存储在 RAX
- 小于 128 bits 存储在 RAX 和 RDX
- 浮点数类似地使用 XMM0 和 XMM1
# 寄存器保存
- 如果 callee 需要使用 RBX, RSP, RBP, R12–R15,则由 callee 保存,返回给 caller 之前需要恢复原始值。
- 其他的寄存器则由 caller 负责保存(如果 caller 想要保留寄存器里的值)
# Refs
- [博客园: Windows/Linux x64汇编函数调用约定](https://www.cnblogs.com/shines77/p/3788514.html)
- [Wiki: x86 calling conventions](https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI)