打开主菜单

MIPS架構

指令集架构
(重定向自MIPS architecture

MIPS架構(英語:MIPS architecture,為Microprocessor without Interlocked Pipeline Stages的縮寫,亦為Millions of Instructions Per Second的頭字語),是一種採取精簡指令集(RISC)的處理器架構,1981年出現,由MIPS科技公司開發並授權,廣泛被使用在許多電子產品、網路設備、個人娛樂裝置與商業裝置上。最早的MIPS架構是32位元,最新的版本已經變成64位元。

MIPS
推出年份 1981年,​38年前​(1981
設計公司 MIPS科技公司Imagination Technologies
是否開放架構? 仅Release 6(ISA层面)
體系結構類型 load-store
字長/暫存器資料寬度 32位元64位元
位元組序 可配置大小端序
指令編碼長度 固定長度
指令集架構設計策略 精簡指令集(RISC)
擴展指令集 MSADSPVZMDMXMIPS-3D
分支預測結構 比較和分支
通用暫存器 31個+1個固定為0的暫存器R0
浮點寄存器 32個(有一對32位元暫存器組成的雙精度浮點數暫存器)
流水线式 MIPS,展示了五个阶段(指令取得、指令解码、执行、内存访问和写回)。

發展歷史编辑

在1981年,斯坦福大学教授約翰·軒尼詩領導他的團隊,實作出第一個MIPS架構的處理器。他們原始的概令是透過指令管線化來增加CPU運算的速度。

1984年,約翰·軒尼詩教授離開斯坦福大学,創立MIPS科技公司。於1985年,設計出R2000晶片,1988年,將其改進為R3000晶片。

MIPS编辑

特性编辑

延迟槽编辑

为了减少各种指令后流水线的阻塞,MIPS I引入了延迟槽机制,在分支与加载指令后都有一条指令的延迟槽。分支指令延迟槽中的内容会先于分支指令被提交。而加载指令的延迟槽中则不允许使用刚刚载入的数据。一般情况下延迟槽的安排会由汇编器完成,但在一些情况下程序员仍然需要关注他的存在。对于实在无法安排指令的延迟槽可以直接填入"NOP"。

操作数编辑

MIPS包括32个寄存器和2^30个存储器字,详见下表[1]

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,)。[2][3]

三种类型的指令图示如下:

类型 -31-                                 格式(位)                                 -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. ^ David A, Patterson. 计算机组成与设计:硬件、软件接口(原书第4版). 机械工业出版社. 
  2. ^ MIPS R3000 Instruction Set Summary
  3. ^ MIPS Instruction Reference

外部連結编辑