ARM中PC和x86中IP的區別

前言

最近在學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等於下兩條指令地址
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章