【发布时间】:2020-12-14 23:19:08
【问题描述】:
ARM 的 C 函数调用约定说:
- 调用者将传递 r0-r3 中的前 4 个参数。
- 调用者将在堆栈上传递任何额外的参数。
- 调用者将从 r0 获取返回值。
我正在手工制作一个由C调用的汇编函数,原型等价于:
void s(void);
假设一个 C 函数 c() 调用 s()。
因为s() 没有参数也没有返回值。我相信r0-r3不会被编译器触动生成c()调用s()的调用序列。
假设s() 将使用r0-r12 来完成它的功能。 c() 也有可能使用这些寄存器。
我不确定是否必须明确保存和恢复s() 中涉及的所有寄存器,例如r0-r12。这样的内存操作会花费一些时间。
或者至少我不必为r0-r3这样做?
【问题讨论】:
-
void s()表示“接受任何参数”并且是过时的样式。请改用void s (void)。 -
@Lundin 哦,我没有意识到这一点。谢谢提醒。已更新。
标签: c gcc arm calling-convention