答案 0 :(得分:3)
我认为只是呼叫惯例适用于此处。 http://en.wikipedia.org/wiki/X86_calling_conventions
C标准库不保证它的函数是调用者的备份寄存器。这取决于调用约定以及它是如何由编译器处理的。
假设C函数对寄存器一无所知。
您将找到函数正在使用的调用约定,形成函数的声明/签名。默认值应为cdecl。
答案 1 :(得分:2)
这是一个特定于平台的问题,而不仅仅是特定于硬件的问题。 C标准库旨在从C程序调用,其中(通常)在编译时处理调用约定,并为您完成适当的寄存器和堆栈操作。
请参阅适用于您平台的特定于平台的ABI指南,以确定如何调用外部链接的函数。
答案 2 :(得分:2)
它是特定于平台的,通常您不需要在呼叫站点专门保存和恢复寄存器,被调用者通常会这样做。您只需遵循特定平台的链接约定即可。 C库不是无状态的,在没有初始化库的情况下调用某些函数通常不是一个好主意,因为它是在包含main()的典型c程序对象中完成的。