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

[复制链接]
5413|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 | 显示全部楼层
程序一般不能多于四个参数,超过用栈来实现。这是她们的规定,只能遵守了
 楼主| 电子菜鸟435 发表于 2009-10-10 17:38 | 显示全部楼层
R4-R11不需要保护吗?
ciniao 发表于 2009-10-10 23:19 | 显示全部楼层
5# 电子菜鸟435 程序习惯在r1-r3里面放需要入栈的数据,特别是模式切换时
 楼主| 电子菜鸟435 发表于 2009-10-13 16:53 | 显示全部楼层
In the base standard, a subroutine call preserves the values of r4-r11 and sp.
这是我在ATPCS上看到的,是因为这个所以不用保护r4他们吧?
arm_fan168 发表于 2009-10-13 22:35 | 显示全部楼层
是的,汇编代码调用的C语言函数会生成保存R4-R11的代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

183

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部