當前位置: 華文星空 > 知識

程式計數器(Program Counter)是一個實際存在的寄存器嗎?

2014-01-26知識
在很多微機原理和電腦組成原理書中說每當完成取指令操作後,PC = PC + 1,感覺這個說法不太正確,我的理解是 PC=PC + 「取出的指令長度」,比如上一條指令長度為 4 字節,PC=PC+4,這個理解正確嗎?又或者比如 MIPS 指令集的每條指令長均為 4 字節,所以指令地址一定為4的倍數,所以指令地址後兩位一定為 0,所以這裏的 +1 指代的就是 +4 字節呢?

+1 是指增加一個——概念中的單位。為了方便教學往往說 +1,實際上是增加(一條指令的長度 ÷ 尋址粒度),在 MIPS 中就是 4,因為 MIPS 一條指令長度 4 字節,尋址粒度是 1 字節。而 x86 體系的指令長度不定,所以每次增加的量會變化。

還有一個問題就是因為雖說經常聽到 PC 這個詞,但是我卻沒有見到其實體,所以我的理解是 PC 實際上就是 CS:IP 組合的邏輯表示。PC 不是一個實體,真正用來表示 PC 值的是 CS:IP,所謂的 PC 自動增加是指令指標寄存器 IP 在自增?這個理解對嗎?

在 x86 體系裏是這樣。x86 系統中自增的是 IP,用 CS:IP 組合表示正在執行的指令地址,此時 PC 只是一個概念上的說法。在 ARM 體系中 R15 就是 PC,當然 ARM 和 IA-32、x64 都支持高級記憶體管理,所以「PC」的內容未必是當前指令在記憶體中的絕對位置。