MIPS 汇编/寄存器文件
外观
< 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(汇编器临时寄存器)用于伪指令中的临时值。它不会跨函数调用保留。例如,在 (slt $at, $a0, $s2) 指令中,如果 $a0 小于 $s2,则 $at 设置为 1,否则设置为 0。
$v 寄存器用于从函数返回的值。它们不会跨函数调用保留。
$a 寄存器用于将参数传递给函数。它们不会跨函数调用保留。
临时寄存器由汇编器或汇编语言程序员用于存储中间值。它们不会跨函数调用保留。
保存的临时寄存器用于存储更持久的的值。它们在跨函数调用时保留。
k 寄存器为操作系统内核保留。由于中断处理程序使用它们,因此它们可能会在任何时候随机更改。
- 全局指针 ($gp) - 通常存储指向全局数据区域的指针(这样就可以使用内存偏移寻址来访问它)。
- 堆栈指针 ($sp) - 用于存储堆栈指针的值。
- 帧指针 ($fp) - 用于存储帧指针的值。
- 返回地址 ($ra) - 存储返回地址(函数需要返回到的程序中的位置)。
所有指针寄存器在跨函数调用时保留。