在程序集中调用符号时如何传递函数参数?

时间:2016-09-11 15:27:29

标签: c assembly x86

我在上一个问题中看到了这个示例代码。我对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

1 个答案:

答案 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用于某些浮点参数。

来源:https://en.wikipedia.org/wiki/X86_calling_conventions