当前位置: 首页 > news >正文

好看的企业网站首页成都pc网站建设

好看的企业网站首页,成都pc网站建设,衣服图案设计网站,微信营销成功案例8个0 参考资料&工具 Cortex M3权威指南(中文).pdf keil5(用于仿真查看寄存器、栈变化)1 C语言调用子函数时出入/出栈(保护/恢复现场)全过程分析 使用C语言调用子函数是如何保护/恢复现场的呢?本文以Cortex-M3为例&a…

0 参考资料&工具

Cortex M3权威指南(中文).pdf
keil5(用于仿真查看寄存器、栈变化)

1 C语言调用子函数时出入/出栈(保护/恢复现场)全过程分析

使用C语言调用子函数是如何保护/恢复现场的呢?本文以Cortex-M3为例,逐行汇编代码分析C语言调用子函数时入/出栈(保护/恢复现场)全过程。
准备工作:
(1)使用keil5新建一个基于stm32f103的工程
(2)将栈底值设置为0x20000400(Cortex-M3栈从上往下生长),也就是将栈大小设置为0x400

1.1 C代码

本文用来调试分析的C代码如下:

typedef unsigned int u32;u32 fun2(u32 p1, u32 p2, u32 p3, u32 p4)
{return p1 + p2 + p3 + p4;
}/***   主函数*/
int main(void)
{u32 x;fun2(1, 2, 3, 4);x = 0x778899AA;
}void SystemInit(void)
{
}

说明:
使用主函数调用fun2子函数,查看Cortex-M3的保护、恢复现场过程。

1.2 C代码编译生成的汇编指令

以上C代码使用0级优化(不优化)生成的汇编指令如下,我们重点关注执行fun2函数前后的操作。
(1)执行fun2函数前传递变量
在这里插入图片描述
执行fun2函数前首先将第4、3、2、1个参数依次传递给r3、r2、r1、r0寄存器。
(2)跳转到fun2函数
在这里插入图片描述
参数传递完之后跳转到fun2函数。之所以不先保护现场而是先跳转到fun2函数,是因为使用BL指令会自动将跳转指令的下一条指令地址保存到LR。

BL function1 ;
使用“分支并连接”指令呼叫 function1 ; PC= function1,并且 LR=main的下一条指令地址
也就是说,在跳转到子函数前LR寄存器会被设置为子函数下一条指令地址

这里保存到LR的并非是0x0800021A,也就是fun2函数的下一条指令,反而保存的是0x0800021B。
在这里插入图片描述
这样操作的原因可以参考Cortex M3权威指南(中文).pdf:
在这里插入图片描述
也就是说,每次使用跳转指令跳转到子函数时,LR保存的实际上是子函数下一条指令地址+1 ,避免产生fault 异常。地址+1的值写入PC,PC会自动将最低位设置为0。

(3)执行fun2函数前保护现场
在这里插入图片描述
在执行fun2函数前,CPU会执行一条入栈指令PUSH,至少会将lr寄存器(程序链接寄存器,保存了子函数返回地址)入栈。使用keil的单步仿真功能,我们观察执行这条指令前后栈的变化:
(3.1)执行到fun2函数保护现场前栈内从顶到底依次保存了局部变量x(此时还未赋值,栈内值为0x08000234)、mian函数返回地址0x080001D9。此时栈指针值为0x200003F8。
在这里插入图片描述
(3.2)PUSH指令依次将lr、r4的值压入栈内。也就是依次向栈顶写入值0x0800021B、0x08000234。
此时栈指针值为0x200003F0。
在这里插入图片描述
此时,寄存器组内容如下:
在这里插入图片描述
(4)执行完fun2函数后恢复现场
在这里插入图片描述
执行POP指令出栈,从栈顶开始依次将栈值写入r4、PC。执行完该语句后栈的内容如下:
在这里插入图片描述
可以看到出入栈的部分已经被绿色标记出来,至此就算完成了C语言调用子函数保护/恢复现场操作。
此时寄存器组内容如下:
在这里插入图片描述

2 总结

C语言在调用函数时保护/恢复现场操作如下:
(1)保护现场
(1.1)传递函数参数
(1.2)跳转到子函数,自动将子函数下一条指令地址保存到LR
(1.3)保护现场,至少要将LR(程序链接寄存器,保存有子函数返回地址)入栈
(2)恢复现场
至少要将LR(程序链接寄存器,保存有子函数返回地址)出栈,将LR的值写入到PC,跳转到子函数下一条指令位置继续执行

http://www.yayakq.cn/news/531774/

相关文章:

  • 拼多多cms网站怎么做怎么改版网站
  • 沈阳哪家公司网站做的好洛阳市住房和城乡建设局网站
  • 网站项目运营网站制作需要什么人员
  • 青岛网站设计机构网站开发毕业答辩演讲稿范文
  • 网站托管工作室宁波网站建设优化企业推荐
  • dw可以做移动端网站飞凡网站建设
  • 加快网站收录黑龙江骏域建设网站专家
  • 网站开发人员的行业分析信息流投放平台有哪些
  • 企业品牌网站源码wordpress页面都在
  • 用虚拟机做网站服务器吗公司名字大全免费查询
  • 正规网站建设公司哪个比较好装饰公司网站模板
  • 网站集群系统 如何做域名解析太原做网站设计
  • 无锡网站建设 微信网站建设公司宣传文案
  • 金州网站建设京东商城网站首页
  • 廊坊网站建设方案最新报价深圳网站制作公司兴田德润在哪里
  • 北京网站设计研究与开发公司东莞住房和城乡建设局网站
  • 做属于自己公司的网站wordpress 插件查看
  • 企业建设网站优势建设心理网站的背景
  • 网站的横幅怎么做的网络维护和故障维修
  • 网站建设需求分析要做的事wordpress集成微博登录
  • 模板支撑体系搭设规范网站首页关键词优化
  • 宁波网站建设设计公司信息wordpress 扫码支付
  • 可以制作网站的软件什么是专业网站
  • 最贵网站建设报价网页设计与制作教程的教学目标
  • 网站推广策略包括哪些内容网站建设补充协议模板
  • 网站建设用哪的图片不侵权wordpress支付文件在哪里设置密码
  • 全影网的网站哪儿做d网站建设市场价
  • 江门骏域网站建设巴中建设局网站
  • wordpress站点设置使用时间文化传媒建设网站
  • 常州建设工程交易网站沭阳奥体小区做网站