MIPS架構

指令集架构

MIPSMicroprocessor without Interlocked Pipeline Stages),是一種採取精簡指令集(RISC)的指令集架構(ISA),1981年出現,由 MIPS 公司開發並授權,廣泛被使用在許多電子產品、網路裝置、個人娛樂裝置與商業裝置上。最早的MIPS架構是 32 位元,最新的版本已經變成 64 位元。商業市場主要競爭對手為ARMRISC-V

MIPS
推出年份1981年,​40年前​(1981
設計公司MIPS科技公司Imagination Technologies
是否開放架構?
體系結構類型暫存器-暫存器,load-store
字長/暫存器資料寬度32位元64位元
位元組序可組態大小端序
指令編碼長度固定長度
指令集架構設計策略精簡指令集(RISC)
擴展指令集MSADSPVZMDMXMIPS-3D
分支預測結構比較和分支
通用暫存器31個+1個固定為0的暫存器R0
浮點暫存器32個(有一對32位元暫存器組成的雙精度浮點數暫存器)
管線式 MIPS,展示了五個階段(指令取得、指令解碼、執行、記憶體存取和寫回)。

MIPS 架構有多個版本。其中包括 MIPS I、II、III、IV,以及 MIPS V,它們各自各自是 MIPS32/64(分別是 32 位64 位的實現)發布的五個版本。早期的 MIPS 架構只有 32 位的版本,而其 64 位的版本隨後才被開發。截至 2017 年 4 月,MIPS32/64 的目前版本是 MIPS32/64 Release 6[1][2] 。MIPS32/64 與 MIPS I–V 的主要區別在於它除了使用者態架構外,還定義了特權核心模式系統控制協處理器。

MIPS 架構有幾個可選的拓展。比如 MIPS-3D,它是一個專用於常見 3D 計算任務的浮點 SIMD 指令集的簡單集合[3];MDMX(MaDMaX)是一個應用更加廣泛的整數 SIMD 指令集,它使用了 64 位浮點數暫存器;MIPS16e 則為提供了指令流壓縮的功能,這可以減小程式的體積[4];MIPS MT 則提供了多執行緒的能力。[5]

在一些大學和技術學校中電腦架構的課程上,學生們通常會學習 MIPS 架構。這個架構極大地影響了後來的精簡指令集架構(如 DEC Alpha)。

發展歷史編輯

MIPS I編輯

特性編輯

延遲槽編輯

為了減少各種指令後管線的阻塞,MIPS I引入了延遲槽機制,在分支與載入指令後都有一條指令的延遲槽。分支指令延遲槽中的內容會先於分支指令被提交。而載入指令的延遲槽中則不允許使用剛剛載入的資料。一般情況下延遲槽的安排會由組譯器完成,但在一些情況下程式設計師仍然需要關注他的存在。對於實在無法安排指令的延遲槽可以直接填入"NOP"。

運算元編輯

MIPS包括32個暫存器和2^30個記憶體字,詳見下表[7]

MIPS運算元
名字 舉例 注釋
32個暫存器 $s0 ~ $s7,$t0 ~ $t9,$zero,$a0 ~ $a3,$v0 ~ $v1,$gp,$fp,$sp,$ra,$at 暫存器用於資料的快速存取。在MIPS中,只能對存放在暫存器中的數執行算術操作,暫存器$zero恆為0,暫存器$at被組譯器保留,用於處理大的常數。
2^30個儲存字 Memory[0],Memory[4],...,Memory[4294967292] 記憶體只能通過資料傳輸指令存取。MIPS使用位元組編址,所以連續的字位址相差4。記憶體用於儲存資料結構、陣列和溢位的暫存器

指令格式編輯

在MIPS架構中,指令被分為三種類型:R型、I型和J型。三種類型的指令的最高6位均為6位的opcode碼。從25位往下,

  • R型指令用連續三個5位二進位碼來表示三個暫存器的位址,然後用一個5位二進位碼來表示移位的位數(如果未使用移位元運算,則全為0),最後為6位的function碼(它與opcode碼共同決定R型指令的具體操作方式);
  • I型指令則用連續兩個5位二進位碼來表示兩個暫存器的位址,然後是一個16位元二進位碼來表示的一個立即數二進位碼;
  • J型指令用26位二進位碼來表示跳轉目標的指令位址(實際的指令位址應為32位元,其中最低兩位為00,)。[8][9]

三種類型的指令圖示如下:

類型
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R opcode (6) rs (5) rt (5) rd (5) shamt (5) funct (6)
I opcode (6) rs (5) rt (5) immediate (16)
J opcode (6) address (26)

指令編輯

訪存指令編輯

MIPS I 具有訪存8-bit位元組,16-bit半字,32-bit字的能力, 並且只支援「基位址+偏移」一種定址模式。 由於MIPS I是一種32位元架構,少於32-bit的載入指令在目標暫存器中都會對高位進行符號擴充或全零擴充到32-bit。帶有 "無符號" 字尾的指令會被進行全零擴充,其他的指令會進行符號擴充。 載入指令會從一個通用暫存器中取得基位址 (rs) 並將從操作位址讀取的結果寫入一個通用暫存器 (rt). 儲存指令則會從一個通用暫存器取得基位址(rs),將另一個通用暫存器(rt)中的內容寫入相應操作位址。所有的訪存指令都會將基位址加上指令中的有符號16-bit立即數immediate偏移以獲得最終操作位址。 MIPS I要求所有的訪存指令與操作單位對齊,也就是目標位址必須是所存取資料位元組數的整數倍。為了支援高效的非對其訪存,MIPS提供了帶左/右字尾的訪存指令。所有的載入指令後面帶有一個延遲槽,延遲槽內的指令不得使用剛剛載入的指令。

指令功能 輔助記憶碼 格式 格式
載入位元組 LB I 3210 rs rt offset
載入半字 LH I 3310 rs rt offset
載入字左 LWL I 3410 rs rt offset
載入字 LW I 3510 rs rt offset
載入無符號字 LBU I 3610 rs rt offset
載入無符號半字 LHU I 3710 rs rt offset
載入字右 LWR I 3810 rs rt offset
儲存位元組 SB I 4010 rs rt offset
儲存半字 SH I 4110 rs rt offset
儲存字左 SWL I 4210 rs rt offset
儲存字 SW I 4310 rs rt offset
儲存字右 SWR I 4610 rs rt offset

相關條目編輯

參考文獻編輯

  1. ^ MIPS32 Architecture. MIPS. [March 20, 2020]. (原始內容存檔於2020-03-21). 
  2. ^ MIPS64 Architecture. MIPS. [March 20, 2020]. (原始內容存檔於2020-02-02). 
  3. ^ MIPS-3D ASE. Imagination Technologies. [January 4, 2014]. (原始內容存檔於2014-01-03). 
  4. ^ MIPS16e. MIPS. [March 20, 2020]. (原始內容存檔於2021-01-16). 
  5. ^ MIPS Multithreading. MIPS. [March 20, 2020]. (原始內容存檔於2020-10-26). 
  6. ^ 存档副本. [2020-07-29]. (原始內容存檔於2020-07-29). 
  7. ^ David A, Patterson. 计算机组成与设计:硬件、软件接口(原书第4版). 機械工業出版社. 
  8. ^ MIPS R3000 Instruction Set Summary. [2013-08-21]. (原始內容存檔於2018-06-28). 
  9. ^ MIPS Instruction Reference. [2013-08-21]. (原始內容存檔於2010-12-05). 

外部連結編輯