ARM保存现场和恢复现场解读

本文详细解析了ARM汇编指令在调用函数时如何保存和恢复现场,遵循APCS规则,讨论了堆栈的分类以及在ARM中的应用,特别是满递减堆栈的使用。内容包括保存现场的步骤(保存sp到ip,压入pc, lr, ip, fp到栈)和恢复现场的过程(利用fp恢复sp,然后从栈中恢复fp, sp, pc)。堆栈保护和恢复现场的代码分析帮助理解这一过程。" 113349658,10553169,构建MIPS交叉编译工具链:Ubuntu12.04下Mysql编译步骤,"['MIPS编译', 'Linux工具链', '交叉编译环境', 'Ubuntu', '软件构建']
摘要由CSDN通过智能技术生成

arm汇编指令调用函数的时候,需要保存现场和回复现场

1.1

在这里插入图片描述
解读:
为什么我们的c语言程序可以调用其他函数后,继续回来执行我们的代码,而他的其他值没有变呢。编译器又是怎么做的,怎么确保我们的值不变,这个就要用到我们的保存和恢复现场,在调用函数之前,保存当前现场,调用函数后,在恢复到之前的现场。

首先,我们要懂,我们用的arm是要遵循APCS规则:
sp指向最后一个压入的值,数据栈由高地址向低地址生长的栈是满递减的, 所以sp指针一直指的就是我们的栈顶的那个数据。这个时候,我们要开始保存现场了:
(我们只要遵循一点,就是在调用函数之前,把我们的sp指针保存起来(保存到了ip中),当然同时也要保存pc和lk指针,因为我们要跳回之前的函数的地址的时候,要用到。)

1,2,3保存现场

"mov   ip,   sp \n\t"            //sp的值放到ip中

1、首先我们把sp的值保存到ip寄存器中。(保存了调用寒素之前的sp寄存器的值)


                
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值