linux学习(七)设置栈

本博客是参考朱有鹏老师的linux课程总结, 在此声明感谢。

C语言运行时,需要栈。 因为C语言中的局部变量就是使用栈来实现的。

CPU 的每种模式中都有自己独立的栈, 也就是 SP寄存器(r13).
为什么需要模式中的栈独立呢, 因为如果共同使用栈,那么如果应用程序一旦出错,就会连累操作系统的栈损坏。
整个操作系统程序就会崩溃。
合理的解决方案就是使用独立的栈。这样自己的栈出现问题,不会连累到整个操作系统。

在系统复位之后, 默认是SVC模式(当复位和软中断指令执行时将会进入这种模式)。

所以要设置栈,只需要先SVC模式下的栈即可。

在ARM 中 ATPCS(ARM关于程序应该怎么实现的一个规范)中要求使用满减栈,所以不出意外都是使用满减栈。

栈有四种:满减栈 满增栈 空减栈 空增栈
满栈:进栈:先移动指针再存; 出栈:先出数据再移动指针
空栈:xxx
减栈:进栈:指针向下移动;	 出栈:指针向上移动
增栈:xxx

查找有关手册找到SVC 模式下的栈内存地址。 譬如是0xd0037d80 ~ 0xd0037780.

因为是满减栈, 因此只需要设置栈地址为 0xd0037d80即可。

即在汇编代码中 只需要这一句

ldr sp, =0xd0037d80

即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值