前言
最近在学ARM,对它的PC产生了疑惑,一开始是把PC类比成x86中的IP的,后面发现还是有点区别的
x86架构
在《深入理解计算机系统》一书中指出(P6)
从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器(PC)。
也就是说,在x86中,PC实际上是永远指向下一条待执行的指令
另外,在《汇编语言》—王爽,一书中指出,IP是指令指针寄存器,它的工作流程如下
可见,IP也是在其指向的指令被执行之后,才更新为下一条待执行的指令。因此其实质上等同于PC
小结
x86中,PC与IP实质上一致
ARM架构
在《汇编语言程序设计:基于ARM体系结构》一书中(P53),指出
寄存器R15用作程序计数器(PC),用于控制程序中指令的执行顺序。正常运行时,PC指向CPU运行的下一条指令。每次取指后PC的值会自动修改以指向下一条指令,从而保证了指令按一定的顺序执行。
划重点:每次取指后PC的值会自动修改以指向下一条指令
另外,这里只说明PC是用于控制程序中指令的执行顺序,并不是说PC执行下一条执行的指令
由此可见,x86架构和ARM架构的PC确实功能不完全一样。
考虑到ARM的流水线架构,举例ARM7的三级流水线
在时钟周期1取指完成后,PC=PC+4
在时钟周期2取指完成后,PC=PC+8,此时第一条指令正开始执行,PC值已经+8了
因此,实际上,在ARM中,每次当前指令执行时,PC=PC+8
总结
- x86:PC等于下一条指令地址
- ARM:PC等于下两条指令地址