arm PC寄存器的问题~~~

HOHOcai 2016-04-12 08:06:41
我的理解是:arm在运行程序的时候,一般情况,每一个机器周期,pc的值都+4(32位的指令)。因为arm的流水构架(取指, 译码, 执行),所以PC寄存器的值为当前执行指令的地址+8(2个指令字节大小), 也就是正在取指的地址。
不知道有没有错
我想问的是:
1.PC自动加4的是在哪个逻辑电路单元完成(取指, 译码, 执行)中的那一个?
2.书上说流水构架,所以3个逻辑单元是并行的,这样可以提高效率。但是PC总是等于当前执行的指令地址+8,那么是不是可以理解为PC+4的这个操作是在执行逻辑单元完成以后才实现,那么这个pc自加4的逻辑电路和3级流水是串行咯?
3.当跳转指令或异常跳转时,实际上改变PC的值,但是指令执行完后,PC不会自加4(不然的话就会在跳转处的下一个指令处开始取指),是不是可以认为这时,会暂时禁用pc自加4的逻辑电路。

不太明白,
求大牛们指教~~
...全文
711 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
91program 2016-04-18
  • 打赏
  • 举报
回复
PC 是当前执行的好像,这个应该是没有错的。 但下一条执行指令,不一定是什么。
HOHOcai 2016-04-16
  • 打赏
  • 举报
回复
是这样吗 有点晕
不是说取指从pc里取,所以执行的指令地址比pc小8
吗,确实此时取指和译码的指令还没执行
但如果是你说的这样,pc是当前执行的好像不对。。
fly 100% 2016-04-13
  • 打赏
  • 举报
回复
pc是当前执行的,流水线是预取指令。指令预存两条但是不一定执行的,比如中断来了就直接跳转了

19,498

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧