C寄存器调用约定

时间:2011-05-06 17:28:50

标签: c assembly

在哪里可以找到有关寄存器的文档,哪些汇编在调用C函数时必须保留?

6 个答案:

答案 0 :(得分:4)

您想要的是您系统的C应用程序二进制接口。谷歌的“C ABI”和你的架构,你会发现它。例如,here是sparc的一个,而here是AVR的相关位。

答案 1 :(得分:4)

这称为 ABI (应用程序二进制接口)。你在哪里找到它?取决于您的架构和操作系统。

例如:Google for ABI x86_64 linux如果你想找到64位linux系统的调用约定。

答案 2 :(得分:2)

Agner Fogs博士的优化手册包含32位和64位的所有常见系统和编译器约定(ABI)的精彩并列列表。它们还包含许多其他有用的信息,您可以在此处获取它们:http://www.agner.org/optimize/

答案 3 :(得分:0)

使用了几种调用约定,但最常见的是CDECL。参数按照该链接描述的顺序被压入堆栈,被调用者可用的“临时”寄存器是%eax%ecx%edx。其他任何东西都应该保留在堆栈上。

但是,正如其他人所指出的那样,这只是众多惯例之一。查看您正在编程的系统的文档。

答案 4 :(得分:0)

答案 5 :(得分:0)

这几乎是特定于架构的。看看维基百科对初学者的解释。

http://en.wikipedia.org/wiki/Calling_convention