天天看點

《計算機系統:系統架構與作業系統的高度內建》——2.10 LC-2200指令集

本節書摘來自華章計算機《計算機系統:系統架構與作業系統的高度內建》一書中的第2章,第2.10節,作者:(美)拉姆阿堪德蘭(ramachandran, u.)(美)萊希(leahy, w. d.)著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

我們定義lc-2200作為這個簡單體系結構的一個具體例子。這是一個面向寄存器的、小端的、使用定長指令格式的體系結構。有16個通用寄存器以及一個單獨的程式計數器(pc)。所有的位址都是字位址。介紹這個指令集的目的有3個:

lc-2200作為一個簡單的指令集的具體執行個體能夠滿足任何進階語言的需求。

它是我們第3章和第5章讨論實作細節的具體體系結構。

更重要的是,lc-2200作為一個簡單的、沒有阻礙的工具,用來讓我們在讨論中給它添加一些其他的特性,比如後面章節中的中斷、虛拟記憶體和同步。這種增加功能對于一個學習工具來說是非常有吸引力的,因為它能引導讀者走過根據某種需求給處理器增加某些特性的整個過程。

2.10.1 指令格式

lc-2200支援4種指令格式。r型指令包含add和nand。i型指令包含addi,lw,sw和beq。j型指令包括jalr。o型指令包括halt。是以,lc-2200共有8條指令。表2-1總結了這些指令的語義。

r型指令(add, nand):

28~31位:操作碼

24~27位:reg x

20~23位:reg y

4~19位:未使用(應為全0)

0~3位:reg z

《計算機系統:系統架構與作業系統的高度內建》——2.10 LC-2200指令集

i型指令(addi, lw, sw, beq):

0~19位:立即值或位址偏移量(20位的用補碼表示的數,範圍從–524 288~524 287)

《計算機系統:系統架構與作業系統的高度內建》——2.10 LC-2200指令集

j型指令(jalr):

24~27位:reg x(跳轉目标)

20~23位:reg y(連結寄存器)

0~19位:未使用(應為全0)

《計算機系統:系統架構與作業系統的高度內建》——2.10 LC-2200指令集
《計算機系統:系統架構與作業系統的高度內建》——2.10 LC-2200指令集

注意,從程式員友善(及實作者麻煩)的角度來說,彙編器根據指令給出的值或符号以及彙編器自己對pc的了解來計算offset值。在例子中,彙編器将done-(pc+1)存在offset中,是以機器能夠在運作時跳轉到“done”标簽

《計算機系統:系統架構與作業系統的高度內建》——2.10 LC-2200指令集

o型指令(中斷)

0~27位:未使用(應為全0)

《計算機系統:系統架構與作業系統的高度內建》——2.10 LC-2200指令集

2.10.2 lc-2200寄存器組

正如前面所說,lc-2200有16個程式員可見的寄存器。事實證明,在編譯進階語言時,0是個非常有用的小的整型數。比如,它常用來初始化程式變量。因為如此,我們決定讓寄存器r0一直保持0值。寫到r0的操作會被體系結構自動忽略掉。

我們為這16個寄存器起了便于記憶的名字,同時與2.8.3節中描述的軟體慣例相一緻。不僅如此,因為彙編器的需要,我們在寄存器名字前都加了個$符号。寄存器、助記名、預期的作用以及軟體慣例總結如表2-2所示。

《計算機系統:系統架構與作業系統的高度內建》——2.10 LC-2200指令集

繼續閱讀