Table of Contents
MIPS 的主要特色
- 固定指令長度為 32-bit,簡化取用指令的操作
- 詢址模式較為簡單
- 指令功能簡單、單純 (一條指令一個動作,能實現部分平行執行)
- 指令數量少
MIPS 通用暫存器
MIPS 的通用暫存器有以下 32 個:
暫存器名稱 | 暫存器號碼 | 用途 |
$zero | 0 | 固定為常數 0,不可改變 |
$at | 1 | 保留供組譯器使用 |
$v0 ~ $v1 | 2 – 3 | 傳回值 (values) 暫存器 |
$a0 – $a3 | 4 – 7 | 參數 (arguments) 暫存器 |
$t0 – $t7 | 8 – 15 | 暫時性 (temp) 暫存器 |
$s0 – $s7 | 16 – 23 | 儲存用 (saved) 暫存器 |
$t8 – $t9 | 24 – 25 | 暫時性 (temp) 暫存器 |
$k0 – $k1 | 26 – 27 | 作業系統核心使用 (kernel) |
$gp | 28 | 全域指標 (Global Pointer) |
$sp | 29 | 堆疊指標 (Stack Pointer) |
$fp | 30 | 框指標 (Frame Pointer) |
$ra | 31 | 返回位置 (Return Address) |
$at (編號 1)
保留供組譯器使用,當 I 類指令載入超過 16 位的常數時,組譯器會需要將運用 $at 作為暫存區以大常數拆開,重新組合入暫存器中。
MIPS 指令的類型與格式
MIPS 指令有三大類:R、I、J,三種指令的最高六位都是 Opcode。
R 型指令 (Register)
Opcode (31-26) | rs (25-21) | rt (20-16) | rd (15-11) | shamt (10-6) | funct (5-0) |
指令類型 (R 型指令均為 0) |
Source Register 第一個來源暫存器 |
Target Register 第二個來源暫存器 |
目的地暫存器 | 位移之位數 | 精確定義 指令類型 |
rs、rt、rd 都是 5-bit,正好可以表示上面的 32 個通用暫存器。
R 型指令的 Opcode 乃是為了對齊其他種指令而生。
I 型指令 (Immediate)
若要使用到立即數 (直接使用一般數字),就會需要使用 I 型指令。
Opcode (31-26) | rs (25-21) | rt (20-16) | immediate (15-0) |
指令類型 | Source Register 來源暫存器 |
Target Register 目的地暫存器 |
立即數 (最大可到 2^16) |
J 型指令 (Jump)
主要用於非條件式分支指令 (改變程式執行流向時)。
Opcode (31-26) | address (25-0) |
指令類型 | 目的地位置 |