跳轉到內容

MIPS 彙編/暫存器檔案

來自華夏公益教科書,開放的書籍,開放的世界

暫存器

[編輯 | 編輯原始碼]

MIPS 有 32 個通用暫存器和另外 32 個浮點暫存器。暫存器都以美元符號 ($) 開頭。浮點暫存器命名為 $f0、$f1、…、$f31。通用暫存器既有名稱也有編號,如下所示。在使用 MIPS 組合語言程式設計時,最好使用暫存器名稱。

編號 名稱 註釋
$0 $zero, $r0 始終為零
$1 $at 為彙編器保留
$2, $3 $v0, $v1 分別為第一個和第二個返回值
$4, ..., $7 $a0, ..., $a3 函式的前四個引數
$8, ..., $15 $t0, ..., $t7 臨時暫存器
$16, ..., $23 $s0, ..., $s7 儲存的暫存器
$24, $25 $t8, $t9 更多臨時暫存器
$26, $27 $k0, $k1 為核心(作業系統)保留
$28 $gp 全域性指標
$29 $sp 堆疊指標
$30 $fp 幀指標
$31 $ra 返回地址

零暫存器

[編輯 | 編輯原始碼]

零暫存器 ($zero 或 $0) 始終包含值 0。它是硬體內建的,因此無法修改。

$at 暫存器

[編輯 | 編輯原始碼]

$at(彙編器臨時暫存器)用於偽指令中的臨時值。它不會跨函式呼叫保留。例如,在 (slt $at, $a0, $s2) 指令中,如果 $a0 小於 $s2,則 $at 設定為 1,否則設定為 0。

$v 暫存器

[編輯 | 編輯原始碼]

$v 暫存器用於從函式返回的值。它們不會跨函式呼叫保留。

引數暫存器

[編輯 | 編輯原始碼]

$a 暫存器用於將引數傳遞給函式。它們不會跨函式呼叫保留。

臨時暫存器

[編輯 | 編輯原始碼]

臨時暫存器由彙編器或組合語言程式設計師用於儲存中間值。它們不會跨函式呼叫保留。

儲存的臨時暫存器

[編輯 | 編輯原始碼]

儲存的臨時暫存器用於儲存更持久的的值。它們在跨函式呼叫時保留。

$k 暫存器

[編輯 | 編輯原始碼]

k 暫存器為作業系統核心保留。由於中斷處理程式使用它們,因此它們可能會在任何時候隨機更改。

指標暫存器

[編輯 | 編輯原始碼]
  • 全域性指標 ($gp) - 通常儲存指向全域性資料區域的指標(這樣就可以使用記憶體偏移定址來訪問它)。
  • 堆疊指標 ($sp) - 用於儲存堆疊指標的值。
  • 幀指標 ($fp) - 用於儲存幀指標的值。
  • 返回地址 ($ra) - 儲存返回地址(函式需要返回到的程式中的位置)。

所有指標暫存器在跨函式呼叫時保留。

華夏公益教科書