我在上一个问题中看到了这个示例代码。我对int add(int a, int b)
的参数在esi和edi中的自动化方式感到困惑?这是默认的调用约定吗?我在哪里可以找到更多此类信息。
.globl _add // make it global so that others can find this symbol
....
_add: // int add(int a, int b)
movl %esi, %eax
addl %edi, %eax
ret
答案 0 :(得分:2)
System V AMD64 ABI的调用约定遵循Solaris,Linux,FreeBSD,OS X,[16]并且是Unix和类Unix操作系统中的事实标准。前六个整数或指针参数在寄存器RDI,RSI,RDX,RCX(Linux内核接口[17]:124中的R10),R8和R9中传递,而XMM0,XMM1,XMM2,XMM3,XMM4,XMM5, XMM6和XMM7用于某些浮点参数。