微處理器設計/程式計數器
程式計數器 (PC) 是一個暫存器結構,它包含當前指令的地址指標值。每個週期,指標指向的值都會被讀入指令譯碼器,而程式計數器會更新為指向下一條指令。對於 RISC 計算機,更新 PC 暫存器就像將機器字長(以位元組為單位)新增到 PC 一樣簡單。但是,在 CISC 機器中,需要計算當前指令的長度,並且需要將該長度值新增到 PC。
透過將使能訊號置高可以更新 PC。在每個指令週期之後,需要更新 PC 以指向記憶體中的下一條指令。在構建 PC 更新電路之前,瞭解記憶體的組織方式非常重要。
基於哈佛的系統傾向於在每個記憶體位置儲存一個機器字。這意味著每個週期都需要將 PC 加 1。共享資料和指令記憶體的計算機通常是位元組可定址的,也就是說每個位元組都有自己的地址,而不是每個機器字都有自己的地址。在這種情況下,需要根據機器字中的位元組數來增加 PC。

在這張圖片中,字母M被用作每個週期更新 PC 的數量。這可能是在 CISC 機器中的一個變數。
示例:MIPS
MIPS 架構使用位元組可定址的指令記憶體單元。MIPS 是一種 RISC 計算機,這意味著所有指令的長度都相同:32 位。因此,每個週期都需要將 PC 加 4(32 位 = 4 位元組)。
示例:英特爾 IA32
英特爾 IA32(有些人更熟悉它的別稱“x86”)是一種 CISC 架構,這意味著每個指令的長度可能不同。英特爾記憶體是位元組可定址的。每個週期,指令譯碼器都需要確定指令的長度(以位元組為單位),並且需要將該值輸出到 PC。PC 單元會根據從指令譯碼器接收的值來增加自身。
分支發生在稱為“分支”或“跳轉”指令的一組特殊指令中。
. 在分支或跳轉中,控制權會轉移到指令記憶體中不同位置的另一條指令。
在分支過程中,會載入一個新的 PC 地址,通常來自指令或暫存器。此新值將載入到 PC 中,並且未來的指令將從該位置載入。
無偏移分支,通常稱為“跳轉”,是一種分支,其中丟棄先前的 PC 值,並從外部源載入新的 PC 值。

在這張圖片中,PC 值要麼被載入為更新後的版本,要麼被載入為新的分支地址。為了簡化,我們沒有顯示 MUX 的控制訊號。
偏移分支是一種分支,其中將一個值新增到當前 PC 值(或從中減去一個值)以生成新值。這通常用於 PC 值大於暫存器值或立即值的系統中,在這種情況下,無法將完整的值載入到 PC 中。它也常用於支援可重定位的二進位制檔案,這些檔案可以載入到任意基地址。

在這張圖片中,有一個第二個 ALU 單元。請注意,如果我們使用以下配置,我們可以簡化此電路並刪除第二個 ALU 單元。

這些只是此電路的兩種可能的配置。
許多系統都具有使用偏移和無偏移分支的功能。一些系統可能會在“近跳轉”和“遠跳轉”之間進行區分,儘管這個術語已經過時了。
