[筆記] 計算機組織:MIPS 指令集 (一)

MIPS 的主要特色

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)
指令類型 目的地位置
Exit mobile version