[NXP ARM] ARM指令BL的困惑

[复制链接]
6244|23
 楼主| 火箭球迷 发表于 2009-11-19 18:24 | 显示全部楼层 |阅读模式
BL指令同时还将PC寄存器的值保存到LR寄存器中。(《arm体系结构和编程》P58页最后一句)
返回的时候可以直接用
BX R14 或
MOV PC ,R14

当有L时,当前PC寄存器的值将保存到LR寄存器中。(P59页)

按照三级流水线,当执行BX的时候,PC的值不就是BX所在地址+8,而返回的LR(R14)不是应该保存BX所在地址+4才对吗?

还有个问题,既然其他指令PC都是当前指令+8,为什么STR/STM PC的时候会出现8或12的两种可能性呢? (P14页)
无冕之王 发表于 2009-11-19 18:38 | 显示全部楼层
1、当执行BX的时候,PC的值不就是BX所在地址+8,----------正确。
2、问的好。PC寄存器的值确实会保存到LR中。关键是,LR自动会做一个调整,把LR = LR - 4。也就是自减4。后续在异常中断章节中,会有更多的例子。实际上,都是相当于LR = PC -4。
记得有些资料管这个现象叫“抖动”-----但愿我没记错这个名词。
3、原因很简单,不同厂商设计的芯片方案,我们控制不了。这与arm汇编没有关系。
hsbjb 发表于 2009-11-19 21:28 | 显示全部楼层
楼上解释的真是耐心
xsgy123 发表于 2009-11-20 08:19 | 显示全部楼层
2楼回答的挺好的
zsyok77322 发表于 2009-11-20 16:40 | 显示全部楼层
就是,不必深究,仿真时看看寄存器的变化就知道了。
desert_hawk 发表于 2009-11-20 20:14 | 显示全部楼层
这个与处理器更新LR值的时间点有关,三级流水线的“执行”,对于BL指令来说,就是执行跳转,而更新LR可能不是在“执行”这一步更新的,我分析是在译码阶段就更新了LR了。
pkat 发表于 2009-11-21 08:24 | 显示全部楼层
有些原理还是要搞清楚的,当然做产品时就没必要深究这些原理性的东西
秋天落叶 发表于 2009-11-22 09:36 | 显示全部楼层
是的,平时我们做项目,很少有人会认真去研究这些原理,但是搞清楚是很必要的
gxgclg 发表于 2009-11-22 18:27 | 显示全部楼层
以前学习的时候还稍微注意些,现在完全不会深究这些了
sinadz 发表于 2009-11-23 21:44 | 显示全部楼层
多思考下着类问题,好处也挺大的
baidudz 发表于 2009-11-24 09:14 | 显示全部楼层
关键是自己要知道怎么思考,我呀,不懂
hsbjb 发表于 2009-11-24 18:54 | 显示全部楼层
思考的时候,不懂得就要多问下,我就是这样的
秋天落叶 发表于 2009-11-28 10:05 | 显示全部楼层
嗯,问的问题也是自己思考的结晶
zwll 发表于 2009-11-28 16:50 | 显示全部楼层
与ARM编程没关系吧
xsgy123 发表于 2009-11-29 20:54 | 显示全部楼层
应该没多大关系
gxgclg 发表于 2009-11-30 09:48 | 显示全部楼层
与编程关系不大,编程就是C语言,可对理解它的结构和硬件资源还是很有帮助的
sinadz 发表于 2009-11-30 21:28 | 显示全部楼层
要做实际的项目,肯定就不会考虑这些了
pkat 发表于 2009-12-1 10:01 | 显示全部楼层
有时还是要考虑的
司徒老鹰 发表于 2009-12-1 22:34 | 显示全部楼层
这还把你困惑的……
dfsa 发表于 2009-12-2 10:07 | 显示全部楼层
说明楼主勤于思考,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:姚明的铁杆球迷

150

主题

3470

帖子

3

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