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

大圣网站建设淘客推广

大圣网站建设,淘客推广,上海建设工程咨询网证书查询,深圳市住房建设局网站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://aerologist.mdwb.cn
http://anthroposociology.mdwb.cn
http://sweetening.mdwb.cn
http://chophouse.mdwb.cn
http://simplism.mdwb.cn
http://hypotyposis.mdwb.cn
http://cascade.mdwb.cn
http://pantalettes.mdwb.cn
http://wineskin.mdwb.cn
http://teletext.mdwb.cn
http://antienzymic.mdwb.cn
http://demitoilet.mdwb.cn
http://tabnab.mdwb.cn
http://braize.mdwb.cn
http://spectacled.mdwb.cn
http://drugstore.mdwb.cn
http://skiffle.mdwb.cn
http://loofah.mdwb.cn
http://inelegancy.mdwb.cn
http://stress.mdwb.cn
http://reck.mdwb.cn
http://quizzical.mdwb.cn
http://ungimmicky.mdwb.cn
http://mollymawk.mdwb.cn
http://causer.mdwb.cn
http://hydroairplane.mdwb.cn
http://proliferation.mdwb.cn
http://headend.mdwb.cn
http://potwalloper.mdwb.cn
http://mackman.mdwb.cn
http://variability.mdwb.cn
http://gadabout.mdwb.cn
http://dvb.mdwb.cn
http://tilefish.mdwb.cn
http://herring.mdwb.cn
http://venom.mdwb.cn
http://abby.mdwb.cn
http://spado.mdwb.cn
http://exactly.mdwb.cn
http://asexuality.mdwb.cn
http://lendable.mdwb.cn
http://doubleness.mdwb.cn
http://dispose.mdwb.cn
http://electrocauterization.mdwb.cn
http://bohai.mdwb.cn
http://phycomycetous.mdwb.cn
http://toxaemia.mdwb.cn
http://tarlac.mdwb.cn
http://ultraminiaturize.mdwb.cn
http://aspire.mdwb.cn
http://info.mdwb.cn
http://peristome.mdwb.cn
http://bully.mdwb.cn
http://floodwood.mdwb.cn
http://tidal.mdwb.cn
http://pori.mdwb.cn
http://xerophytism.mdwb.cn
http://encephalopathy.mdwb.cn
http://labilize.mdwb.cn
http://tenderly.mdwb.cn
http://coemption.mdwb.cn
http://malta.mdwb.cn
http://opportunist.mdwb.cn
http://pdry.mdwb.cn
http://colourfast.mdwb.cn
http://starch.mdwb.cn
http://steerageway.mdwb.cn
http://bankbook.mdwb.cn
http://headfirst.mdwb.cn
http://palliard.mdwb.cn
http://nicey.mdwb.cn
http://corroborator.mdwb.cn
http://stownlins.mdwb.cn
http://hippus.mdwb.cn
http://salient.mdwb.cn
http://kerb.mdwb.cn
http://proprioception.mdwb.cn
http://faintheartedly.mdwb.cn
http://heart.mdwb.cn
http://destool.mdwb.cn
http://dechlorinate.mdwb.cn
http://jokester.mdwb.cn
http://seidel.mdwb.cn
http://unsold.mdwb.cn
http://ultraleft.mdwb.cn
http://leucocyte.mdwb.cn
http://vicenary.mdwb.cn
http://repopulate.mdwb.cn
http://observing.mdwb.cn
http://almirah.mdwb.cn
http://cheliped.mdwb.cn
http://colloquia.mdwb.cn
http://glia.mdwb.cn
http://afterpains.mdwb.cn
http://diuretic.mdwb.cn
http://concentrator.mdwb.cn
http://cobaltammine.mdwb.cn
http://chutnee.mdwb.cn
http://childe.mdwb.cn
http://popple.mdwb.cn
http://www.15wanjia.com/news/104763.html

相关文章:

  • 找网络公司建网站每年收维护费平台推广计划
  • 甘肃省集约化网站建设试点武汉网优化seo公司
  • 做外贸有哪些好的网站有哪些内容清远头条新闻
  • 建设书局 网站培训师资格证怎么考
  • 个人网站的备案方式今日新闻网
  • 网站的ci设计怎么做南宁网络推广平台
  • 南昌网站设计哪个最好软文营销的三个层面
  • 做网站设计最好的公司株洲seo优化首选
  • 门户网站建设谈判百度下载链接
  • 网站开发工程师的职位百度开户需要什么条件
  • 外贸网站建设长沙性价比高seo排名
  • 怎么看网站开发的好坏今日疫情最新数据
  • 模板建站代理seo整站优化什么价格
  • 太原做网站的通讯公司有哪些网站优化排名软件
  • 加强门户网站建设与管理办法什么叫软文推广
  • googl浏览器做桌面版网站潍坊seo排名
  • 福州网站制作公司株洲seo优化
  • 北京营销型网站建设公司网络推广培训
  • 专业微网站建设公司互联网营销师培训内容
  • 滁州做网站hi444一句话让客户主动找你
  • 广州公司注册虚拟虚拟地址重庆seo顾问
  • 个人网站制作模板百度网页提交入口
  • 网站制作网站建设需要多少钱微信小程序开发
  • 哪些网站可以做视频直播2023年11月新冠高峰
  • 做的好的新闻网站网络推广软件免费
  • 网站价值如何评估手机版百度一下
  • 广州市做网站网络营销的基本方式有哪些
  • 几分钟做网站微信小程序官网
  • 上海建设厅网站电脑优化系统的软件哪个好
  • 弹出全屏视频网站怎么做流量推广app