指令集架構(ISA)

架構暫存器

架構暫存器是指令直接操作的那一小組具名儲存槽——處理器的工作檯。想像一間工作坊,後頭有一座巨大的倉庫(記憶體),但你正前方的檯面上只有幾個槽位(暫存器)。你能瞬間從檯面抓起一件工具,但去倉庫取東西卻要走一趟。幾乎所有的計算都發生在檯面上:你把幾個值拉近、加工、再把結果放回去。暫存器是機器中遠遠最快的儲存。

它們刻意只有少數幾個——RISC-V 有 32 個整數暫存器(x0 到 x31),MIPS 也一樣。它們是「具名」的,不是「定址」的:指令指的是「第 5 號暫存器」,而非「第 5 號記憶體位置」。它們小(每個一個機器字組,例如 64 位元)且少,因為指令格式必須只用幾個位元就把暫存器編號編進去,也因為把一個小儲存陣列做快,遠比把一個大的做快容易。依慣例,某些暫存器有特殊角色:在 RISC-V 中 x0 永遠讀作零(一個免費的常數),另一些則被呼叫慣例保留給堆疊指標與返回位址。

「架構」這個詞在這裡很講究。這些是 ISA 向軟體承諾它看得到、用得到的暫存器——可見的契約。一顆高效能晶片內部可能有多得多的隱藏實體暫存器,並在它們之間搬移值(暫存器更名)以便亂序執行指令,但軟體永遠看不到那些;它只會指名架構暫存器。所以「架構暫存器」意思是「ISA 菜單上的那些暫存器」,有別於實作偷偷保留的任何額外暫存空間。

在 RISC-V 中,暫存器 x0 被硬接成零。若要把某個暫存器設成常數 7,可以寫「addi x5, x0, 7」——把 7 加到零上。這個免費的零暫存器,讓你在這種常見情況下不必另設一條「載入常數」指令。

一個硬接零的暫存器,把「設成常數」變成單純的加法——一個小而巧妙的 ISA 設計選擇。

架構暫存器(軟體看得到的)與實體暫存器(晶片實際擁有的)不是一回事。一顆現代核心可能有 200 多個實體暫存器,映射到它那 32 個架構名稱上——但這對你的程式是不可見的。

又称
registersthe register filegeneral-purpose registers暫存器暫存器檔