前言

最近在学ARM,对它的PC产生了疑惑,一开始是把PC类比成x86中的IP的,后面发现还是有点区别的

x86架构

在《深入理解计算机系统》一书中指出(P6)

从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器(PC)。

也就是说,在x86中,PC实际上是永远指向下一条待执行的指令

另外,在《汇编语言》—王爽,一书中指出,IP是指令指针寄存器,它的工作流程如下
ARM中PC和x86中IP的区别
可见,IP也是在其指向的指令被执行之后,才更新为下一条待执行的指令。因此其实质上等同于PC


小结

x86中,PC与IP实质上一致


ARM架构

在《汇编语言程序设计:基于ARM体系结构》一书中(P53),指出

寄存器R15用作程序计数器(PC),用于控制程序中指令的执行顺序。正常运行时,PC指向CPU运行的下一条指令。每次取指后PC的值会自动修改以指向下一条指令,从而保证了指令按一定的顺序执行。

划重点:每次取指后PC的值会自动修改以指向下一条指令
另外,这里只说明PC是用于控制程序中指令的执行顺序,并不是说PC执行下一条执行的指令

由此可见,x86架构和ARM架构的PC确实功能不完全一样。

考虑到ARM的流水线架构,举例ARM7的三级流水线

ARM中PC和x86中IP的区别
在时钟周期1取指完成后,PC=PC+4
在时钟周期2取指完成后,PC=PC+8,此时第一条指令正开始执行,PC值已经+8了
因此,实际上,在ARM中,每次当前指令执行时,PC=PC+8

总结

  • x86:PC等于下一条指令地址
  • ARM:PC等于下两条指令地址

相关文章:

  • 2021-09-02
  • 2022-12-23
  • 2022-12-23
  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
  • 2021-04-14
猜你喜欢
  • 2022-12-23
  • 2021-10-13
  • 2022-12-23
  • 2021-09-04
  • 2021-08-23
  • 2021-10-22
相关资源
相似解决方案