OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4186|回复: 10

ARM汇编的pc指针仿真的时候为什么不+8

[复制链接]

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
发表于 2019-12-9 10:43:05 | 显示全部楼层 |阅读模式

请问问大家  这个arm9不是三级流水线么,按说这个执行到第7条的时候,pc的值应该是第7条的地址+8啊,也就是改等于0x00000008+8啊,为什么pc的值=0x00000008啊
QQ图片20191209100435.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
 楼主| 发表于 2019-12-9 11:14:41 | 显示全部楼层
回复 支持 反对

使用道具 举报

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
 楼主| 发表于 2019-12-9 12:59:12 | 显示全部楼层
在线等啊
回复 支持 反对

使用道具 举报

37

主题

595

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1572
金钱
1572
注册时间
2017-7-17
在线时间
308 小时
发表于 2019-12-9 14:06:11 | 显示全部楼层
真实的流水线不一定是三级的,有可能是是十几级了,只是为了理解方便,就一直沿用了3级的说法,编程手册里面说的PC值,也不一定是真正的PC值,而是编程者角度的PC值。
回复 支持 反对

使用道具 举报

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
 楼主| 发表于 2019-12-9 14:16:12 | 显示全部楼层
candylife9 发表于 2019-12-9 14:06
真实的流水线不一定是三级的,有可能是是十几级了,只是为了理解方便,就一直沿用了3级的说法,编程手册里 ...

可是我用的arm9是三级流水线啊,按说pc的值不该是当前执行指令的值+8吗?
回复 支持 反对

使用道具 举报

37

主题

595

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1572
金钱
1572
注册时间
2017-7-17
在线时间
308 小时
发表于 2019-12-9 15:07:14 | 显示全部楼层
说是那样说的,其实ARM1是真正的三级流水线,后面的都不知道多少了。抛开这个不说,就算是3级流水线,也会遇到有异常,跳转,分支预测这样的情况。我们实际上只知道它表示的就是下一条要取的指令,因为它的设计很复杂,不是简单的+4, +8就可以表示的,因为如此,PC的值也没有什么参考性,所以汇编指令里面也不会用PC来做源操作数。
回复 支持 反对

使用道具 举报

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
 楼主| 发表于 2019-12-9 16:26:39 | 显示全部楼层
candylife9 发表于 2019-12-9 15:07
说是那样说的,其实ARM1是真正的三级流水线,后面的都不知道多少了。抛开这个不说,就算是3级流水线,也会 ...

我想了下你说的,但是还是想不通,因为 有的时候需要返回的时候,比如mov r15, r14,这个时候不就是pc做源操作数了吗?按说这个一般情况下 是流水线操作啊,pc应该是等于当前指令地址+8啊
回复 支持 反对

使用道具 举报

37

主题

595

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1572
金钱
1572
注册时间
2017-7-17
在线时间
308 小时
发表于 2019-12-9 17:08:00 | 显示全部楼层
1.你这个例子,PC不是源操作数,是目的操作数。
2.一般异常返回都是用的SUBS PC, LR, #4,而不是你说的MOV R15, R14. 但是为什么要把LR的值减去4呢,而不是直接将LR的值赋值给PC就可以了呢?这同样是一个历史遗留的问题。因为在进入异常的时候,LR的值实际是要返回的地址加一个偏移,这个偏移可能是4,可能是8,是处理器模式决定。所以在返回的时候,同样要根据处理器的模式减去这个偏移才是PC的值。3.很多东西我们想不通,但是ARM就那样做了,是为了在编程上前向兼容,就算是它实际不是这样实现的,也让我们去这样想。这是为了方便那些学习了早期ARM架构的人,不用转换太多的思维。但是却导致了新手学习新架构的时候有很多困惑,不用去纠结。
捕获1.PNG
捕获2.PNG
回复 支持 反对

使用道具 举报

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
 楼主| 发表于 2019-12-9 17:16:48 | 显示全部楼层
candylife9 发表于 2019-12-9 17:08
1.你这个例子,PC不是源操作数,是目的操作数。
2.一般异常返回都是用的SUBS PC, LR, #4,而不是你说的MOV  ...

谢谢大佬,我先把这块放放吧,以后慢慢理解
回复 支持 反对

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-9 18:42:03 | 显示全部楼层
帮顶                                             
成功没有捷径
回复 支持 反对

使用道具 举报

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
 楼主| 发表于 2019-12-9 21:55:21 | 显示全部楼层

你也碰到这个问题了?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表