A Quantitative Approach-appendix K(1)——RISC指令系統的基本比較
A Quantitative Approach-appendix K(1)——RISC指令系統的基本比較
-
RISC體系結構可以分為兩個組
-
為了桌面和伺服器服務的RISCs:Digital Alpha,MIPS,HP PA-RISC,IBM and Motorola PowerPC,Sun Microsystems SPARC
-
為嵌入式服務的RISCs:ARM,Thumb,Hitachi SuperH(日立),Mitsubishi M32R(三菱),MIPS16
-
-
常零暫存器的作用:(PowerPC可以使用ALU操作,修改該暫存器。常量暫存器重要在適用於桌面和伺服器的ISA中有,但是在嵌入式體系結構中沒有保留這個暫存器)
- 在偏移定址中,以0為基址可以合成絕對地址定址模式
- 暫存器間接定址,可以使用0作為偏移量來合成
-
RISC的定址模式和指令格式
-
大部分的程式碼引用都是PC相關的引用,儘管jump register是用於程式返回,case語句和函式跳轉
-
對於32定長指令,PC相關的分支指令在使用偏移時,會先將其左移2位;對於16位定長指令,左移1位
-
對於桌面RISC指令,每種指令系統都是四種主要的指令格式;但是在嵌入式中,會有六種指令格式。這個是因為為了更小的程式碼大小需要提供更多的指令格式
-
不同的RISC指令系統,在將常量擴充套件為暫存器寬度時,所做的工作很相似,但是不一樣
-
定址模式的支援。PA-RISC還具有偏移定址模式的短地址版本,MIPS64有浮點load/store的索引定址模式。SuperH和M32R有獨立的暫存器間接和暫存器+偏移定址模式,而不是使用0暫存器來實現暫存器間接定址。在直到資料寬度的情況下,ARM和Thumb會將偏移量左移1或者2位
-
立即數擴充套件:MIPS的跳轉和呼叫指令中的常量沒有擴充套件,因為使用時是直接替換PC的低位,而保持高位不變。PA-RISC沒有邏輯立即數指令。16位長度的指令具有比桌面RISCs短得多的立即數,通常只有5到8位。
-
-
指令對比,以MIPS的部分指令為基準,進行對比。幾乎所有的MIPS指令在其它體系中都有。表中指令的對比以MIPS為基準,可能一條MIPS指令,會在其它ISA中由多條指令組合完成同樣的功能,此時這些指令以分號分割;同時在其它ISA中可能會有多條指令能夠完成MIPS的一條指令的功能,此時這些指令以逗號分割
-
資料傳輸類指令
-
算術邏輯運算指令:在算術/邏輯類中,除SPARC之外的所有機器都使用單獨的指令助記符來指示立即運算元;SPARC提供了這些指令的立即數版本,但只使用了一個助記符,但是是獨立的操作碼
-
控制指令
-
浮點指令,嵌入式系統中,通常不定義浮點指令
-
暫存器使用約定和偽指令
-
-
RISC指令系統的比較和條件分支指令的差異
- SPARC使用傳統的四位元的條件碼儲存程式狀態:negative,zero,carry,overflow。在算術/邏輯運算指令都可能進行設定。
- 顯式的比較操作,需要將R0作為目的運算元來完成
- 浮點使用單獨的條件碼和一條浮點比較指令。
- SPARC的第九個版本中,增加了四種方式來擴充套件分支指令:為64位操作提供獨立的條件碼集合;暫存器和零進行各種比較;三個新的用於浮點的條件碼集合;編碼了靜態分支預測資訊的分支指令
- PowerPC也是用了四個條件碼:大於,小於,等於,溢位。每個條件碼有8個副本,以減少指令之間的使用競爭,8個副本即代表有8個四位的條件碼暫存器
- 整型指令可以通過一個選項位的設定,來使得指令執行之後,通過和R0比較,設定第一個條件碼暫存器
- PowerPC提供了條件碼暫存器之間的邏輯操作,從而提供更復雜的分支條件
- MIPS使用暫存器的內容來執行條件分支,例如BEQ,BNE等。同時提供了set-on-less-than指令,來比較兩個運算元,然後設定目的暫存器
- MIPS包含了特殊的比較分支指令,例如BGEZ,BLEZ等
- 對於浮點操作,MIPS I使用條件碼來完成分開的比較指令和分支指令。MIPS IV將條件碼擴充套件為8個,分支指令和比較指令能夠指定使用哪一個條件碼
- Alpha的比較指令(CMPEQ,CMPLE等)比較兩個源運算元,然後根據結果設定目的暫存器。浮點比較指令(CMTEQ, CMTLT, CMTLE, CMTUN)也是類似的使用方式。分支指令則是將一個暫存器的值和0進行比較或者是最低有效位和0比較,然後決定是否跳轉
- PA-RISC最直接的分支指令是COMB(比較並跳轉指令)
- ARM類似於SPARC,提供了四種可以選擇設定的條件碼。同時使用不同的特殊指令,完成條件碼的設定。ARM的一個特點在於,每條指令都可以根據狀態碼來選擇是否執行
- Thumb和ARM很像,但是狀態碼不再是可選的,沒有TEQ指令(用於設定前三個條件碼),沒有條件執行的指令
- Hitachi SuperH,只有一個單獨的T狀態位,通過比較指令設定,然後指導跳轉
- M32R只有一個單獨的條件狀態碼C,使用比較指令進行設定,實現類似於set-on-less-than指令一樣的功能。同時提供了兩條分支指令使用C。除此之外,M32R提供了一些32位的和零比較指令,包括大於,小於,等於…
- MIPS 16保留set-on-less-than指令,但是置位結果放入一個專門的T暫存器。同時MIPS 16增加了CMP,CMPI指令來完成相等比較,結果也放入T暫存器中,同時刪除了BEQ和BNE指令。MIPS 16還提供了比較暫存器內容是否為0的分支指令,和測試T暫存器是否為零的分支指令
- SPARC使用傳統的四位元的條件碼儲存程式狀態:negative,zero,carry,overflow。在算術/邏輯運算指令都可能進行設定。