打印
[NXP ARM]

ARM指令BL的困惑

[复制链接]
4478|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楼回答的挺好的

使用特权

评论回复
5
zsyok77322| | 2009-11-20 16:40 | 只看该作者
就是,不必深究,仿真时看看寄存器的变化就知道了。

使用特权

评论回复
6
desert_hawk| | 2009-11-20 20:14 | 只看该作者
这个与处理器更新LR值的时间点有关,三级流水线的“执行”,对于BL指令来说,就是执行跳转,而更新LR可能不是在“执行”这一步更新的,我分析是在译码阶段就更新了LR了。

使用特权

评论回复
7
pkat| | 2009-11-21 08:24 | 只看该作者
有些原理还是要搞清楚的,当然做产品时就没必要深究这些原理性的东西

使用特权

评论回复
8
秋天落叶| | 2009-11-22 09:36 | 只看该作者
是的,平时我们做项目,很少有人会认真去研究这些原理,但是搞清楚是很必要的

使用特权

评论回复
9
gxgclg| | 2009-11-22 18:27 | 只看该作者
以前学习的时候还稍微注意些,现在完全不会深究这些了

使用特权

评论回复
10
sinadz| | 2009-11-23 21:44 | 只看该作者
多思考下着类问题,好处也挺大的

使用特权

评论回复
11
baidudz| | 2009-11-24 09:14 | 只看该作者
关键是自己要知道怎么思考,我呀,不懂

使用特权

评论回复
12
hsbjb| | 2009-11-24 18:54 | 只看该作者
思考的时候,不懂得就要多问下,我就是这样的

使用特权

评论回复
13
秋天落叶| | 2009-11-28 10:05 | 只看该作者
嗯,问的问题也是自己思考的结晶

使用特权

评论回复
14
zwll| | 2009-11-28 16:50 | 只看该作者
与ARM编程没关系吧

使用特权

评论回复
15
xsgy123| | 2009-11-29 20:54 | 只看该作者
应该没多大关系

使用特权

评论回复
16
gxgclg| | 2009-11-30 09:48 | 只看该作者
与编程关系不大,编程就是C语言,可对理解它的结构和硬件资源还是很有帮助的

使用特权

评论回复
17
sinadz| | 2009-11-30 21:28 | 只看该作者
要做实际的项目,肯定就不会考虑这些了

使用特权

评论回复
18
pkat| | 2009-12-1 10:01 | 只看该作者
有时还是要考虑的

使用特权

评论回复
19
司徒老鹰| | 2009-12-1 22:34 | 只看该作者
这还把你困惑的……

使用特权

评论回复
20
dfsa| | 2009-12-2 10:07 | 只看该作者
说明楼主勤于思考,呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

150

主题

3470

帖子

3

粉丝