【发布时间】:2019-08-18 15:09:14
【问题描述】:
从维基百科 x86 调用约定,它说对于 Microsoft x64 调用约定:
寄存器 RBX、RBP、RDI、RSI、RSP、R12、R13、R14 和 R15 被视为非易失性(被调用方保存)。
但对于 System V AMD64 ABI:
如果被调用者希望使用寄存器 RBX、RBP 和 R12-R15,则必须在将控制权返回给调用者之前恢复它们的原始值。
它没有提到任何关于 rdi 和 rsi 的内容。
我还了解到 %rax、%rcx、%rdx、%rdi、%rsi、%rsp 和 %r8-r11 被认为是调用者保存寄存器 (来自pdf)
我的问题是,不同平台的调用约定是否不同?(我尝试在 asm 中为 unix 环境编写一些 libc 函数)
我找不到任何讨论该主题的文章,该主题的资源也会有所帮助。我想知道这些约定的优缺点。
【问题讨论】:
标签: assembly x86-64 nasm calling-convention