OpenEdv-开源电子网

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

请教一个cortex M3 PC值的问题

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-12-5
在线时间
6 小时
发表于 2018-12-13 05:03:03 | 显示全部楼层 |阅读模式
5金钱
R15 寄存器起到PC的作用。因为是三级流水线的关系(取址  译码  执行)。第一次取址的指令,在第二次译码,到了第三次执行。(不考虑跳转带来的清洗流水线的问题)看了书,又百度一下。。基本都是两种说法。   


(1) 程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或者正在“译码”的指令。
(2) 在Cortex-M3中指令是3级流水线,出于对Thumb代码的兼容的考虑,读取pc时,会返回当前指令地址+4的值。


20170122112404673.gif


对于(1)的理解也就是PC寄存器里面的值指向了正在取址的地址?比如PC=0x04是取址,但实际程序在执行0x00地址的指令?
对于(2)读取pc时,会返回当前指令地址+4的值这一现象得到了验证,也符合三级流水的逻辑。(因为差了两级流水,同时为了兼容thumb16位2字节   
所以有 2级*2字节=4


那么不懂的地方来了,图里执行完读PC的指令后,PC的值还是指向下一指令,并没有加四 。(这也正常因为程序既然不跳转就得顺序执行啊)   
(但是又该如何理解------  程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或者正在“译码”的指令。


所以PC到底指向哪里?貌似一和二有点矛盾了,还是我理解错了。。。???




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-12-5
在线时间
6 小时
 楼主| 发表于 2018-12-13 16:31:00 | 显示全部楼层
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-12-5
在线时间
6 小时
 楼主| 发表于 2018-12-18 05:27:42 | 显示全部楼层
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-12-5
在线时间
6 小时
 楼主| 发表于 2018-12-20 17:39:16 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 17:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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