跳转到内容

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) - 存储返回地址(函数需要返回到的程序中的位置)。

所有指针寄存器在跨函数调用时保留。

华夏公益教科书