數位邏輯與基本元件

暫存器(register)

暫存器是一小組正反器,合在一起儲存一個多位元的值——一個完整的數,而不是單一位元。如果一個正反器記住一個位元,那麼 32 個共用一個時脈的正反器就記住一個 32 位元的數,全部在每個時脈邊緣一起被捕捉和更新。暫存器是處理器的便箋簿:一個極小、極快的暫放處,存放機器此刻正在處理的值,就像你擺在桌上、而非歸檔進櫃子的那幾樣東西。

具體來說,一個 n 位元暫存器是 n 個 D 正反器接到共同的時脈;在時脈邊緣,它們一次全部載入各自的輸入位元,在邊緣之間則把儲存的值穩穩握住,供電路其餘部分讀取。裸暫存器每個週期都載入新資料;更實用的版本有一個載入致能訊號,使它只在被命令時才更新,通常的做法是在每個正反器前面放一個 2 選 1 多工器,在「新資料」和「保持現值」之間選擇。各種變體再加上巧思:移位暫存器每個時脈把它的位元滑動一個位置(對序列資料或乘法很方便),而計數器則是把暫存器接過一個加法器,使它每跳動就把自己加一。

它為何重要:暫存器是整個記憶體階層裡最快的儲存,就坐落在運算發生的資料路徑內部,相較於快取或主記憶體,其存取延遲實際上是零。它們握住一條指令即將用到的運算元,以及它剛產生的結果。程式設計師看到的架構暫存器(指令集讓你定址的具名物件)就是由這些硬體暫存器實現的,通常聚成一個暫存器檔。不過這個詞要小心:硬體裡的「暫存器」指的是這個正反器叢集,它與記憶體位址或快取列有關,但並不相同。

一個帶載入致能、握著值 0110 的 4 位元暫存器:在致能=0 的時脈邊緣,它忽略資料輸入、繼續顯示 0110;在致能=1、資料輸入為 1011 的時脈邊緣,四個正反器一起更新,現在握住 1011。四個位元、一個共享時脈,作為一個整體被捕捉與握住。

暫存器不過是一排共用時脈的正反器:它儲存一個完整的值,是處理器擁有的最快記憶。

硬體暫存器(這個正反器叢集)和架構暫存器名稱並不相同。指令集也許對外提供 32 個具名暫存器,但晶片實際有多少個實體暫存器、以及它如何把名稱對應到它們,是微架構的選擇,有時透過更名而遠多於此。

又稱
hardware register暫存器register