打印

为什么很多入栈的程序都是把R0-R3, R12,LR入栈?

[复制链接]
4200|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子菜鸟435|  楼主 | 2009-10-10 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是中断程序入栈的语句:
STMFD   SP!, {R0-R3, R12,LR}
这是在汇编中调用C语言前的入栈。ATPCS规定R0-R3来传递参数,
所以要保存。但R4它们也会用来存局部变量啊,那么它们就不需要保存吗?

相关帖子

沙发
阿南| | 2009-10-10 15:15 | 只看该作者
这是他们的一种约定

使用特权

评论回复
板凳
john_light| | 2009-10-10 15:42 | 只看该作者
最省堆栈的做法是:过程中破坏什么就保护什么;
最省心的做法是:所有可能破坏的寄存器全部保护。

使用特权

评论回复
地板
gooogleman| | 2009-10-10 17:20 | 只看该作者
程序一般不能多于四个参数,超过用栈来实现。这是她们的规定,只能遵守了

使用特权

评论回复
5
电子菜鸟435|  楼主 | 2009-10-10 17:38 | 只看该作者
R4-R11不需要保护吗?

使用特权

评论回复
6
ciniao| | 2009-10-10 23:19 | 只看该作者
5# 电子菜鸟435 程序习惯在r1-r3里面放需要入栈的数据,特别是模式切换时

使用特权

评论回复
7
电子菜鸟435|  楼主 | 2009-10-13 16:53 | 只看该作者
In the base standard, a subroutine call preserves the values of r4-r11 and sp.
这是我在ATPCS上看到的,是因为这个所以不用保护r4他们吧?

使用特权

评论回复
8
arm_fan168| | 2009-10-13 22:35 | 只看该作者
是的,汇编代码调用的C语言函数会生成保存R4-R11的代码。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

183

帖子

1

粉丝