C调用约定/参数传递

C调用约定/参数传递,c,assembly,C,Assembly,我到处看(“从头开始编程”,维基百科,…),都说C通过堆栈传递参数。然而,在下面的C代码中 int func(int); int main() { func(5); return 0; } int func(int a) { return a; } 参数a通过寄存器%edi传递(用于在Ubuntu 64位机器上编译)。我传递了更多的参数,调用方只是使用更多的寄存器来传递值 这正常吗?我访问的在线资源是否过时了 提前感谢。“C通过堆栈传递参数”:错误:它是实现定义的,

我到处看(“从头开始编程”,维基百科,…),都说C通过堆栈传递参数。然而,在下面的C代码中

int func(int);

int main() {
    func(5);
    return 0;
}

int func(int a) {
    return a;
}
参数a通过寄存器%edi传递(用于在Ubuntu 64位机器上编译)。我传递了更多的参数,调用方只是使用更多的寄存器来传递值

这正常吗?我访问的在线资源是否过时了


提前感谢。

“C通过堆栈传递参数”:错误:它是实现定义的,取决于编译器。如果有足够的寄存器,编译器可能会选择通过寄存器进行传递以提高效率。更进一步,我们可以控制编译器在这方面的行为吗?我想用C包装器调用我自己的汇编例程。我应该重新发布吗?您正在编译x86-64 System V调用约定(答案还包括函数调用约定)。相关人士:哦。一个全新的世界刚刚打开。。。(对我说)。问题得到了回答。