MIPS 寄存器使用约定

GPR (MIPS O32 ABI)

寄存器编号 助记符 使用说明
0 zero 永远返回值0
1 at 汇编器的暂时变量
2-3 v0-v1 子函数调用返回值
4-7 a0-a3 子函数调用的参数
8-15(24-25) t0-t7(t8-t9) 暂时变量,子函数使用时不需要保存和恢复
16-23 s0-s7 子函数寄存器变量,子函数必需保存和在返回之前恢复寄存器的值
26-27 k0-k1 通常被中断或异常处理程序使用作为保存一些系统参数
28 gp 全局指针,一些运行系统维护这个指针来更方便的存取“static”和“extern”变量 (caller-saved)
29 sp 堆栈指针
30 s8/fp 第9个寄存器变量,子函数可以用来作桢指针
31 ra 子函数返回地址

GPR (MIPS N32/N64 ABI)

寄存器编号 助记符 使用说明
0 zero 永远返回值0
1 at 汇编器的暂时变量
2-3 v0-v1 子函数调用返回值
4-11 a0-a7 子函数调用的参数
12-15(24-25) t0-t3(t8-t9) 暂时变量,子函数使用时不需要保存和恢复
16-23 s0-s7 子函数寄存器变量,子函数必需保存和在返回之前恢复寄存器的值
26-27 k0-k1 通常被中断或异常处理程序使用作为保存一些系统参数
28 gp 全局指针,一些运行系统维护这个指针来更方便的存取“static”和“extern”变量 (callee-saved)
29 sp 堆栈指针
30 s8/fp 第9个寄存器变量,子函数可以用来作桢指针
31 ra 子函数返回地址

FPR (MIPS O32 ABI)

寄存器编号 助记符 使用说明
0, 2 $f0, $f2 子函数调用返回值, $f2 C语言中未使用
4, 6, 8, 10, 16, 18 $f4, $f6, $f8, $f10, $16, $f18 暂时变量,子函数使用时不需要保存和恢复
12, 14 $f12, $f14 子函数调用的参数
20, 22, 24, 26, 28, 30 $f20, $f22, $f24, $f26, $f28, $f30 子函数寄存器变量,子函数必需保存和在返回之前恢复寄存器的值

FPR (MIPS N32 ABI)

寄存器编号 助记符 使用说明
0, 2 $f0, $f2 子函数调用返回值, $f2 C语言中未使用
1, 3-11, (16, 18) 21, 23, 25, 27, 29, 31 $f1, $f3-$f11, ($16, $f18), $f21, $f23, $f25, $f27, $f29, $f31 暂时变量,子函数使用时不需要保存和恢复
12-19 $f12-$f19 子函数调用的参数
20, 22, 24, 26, 28, 30 $f20, $f22, $f24, $f26, $f28, $f30 子函数寄存器变量,子函数必需保存和在返回之前恢复寄存器的值

FPR (MIPS N64 ABI)

寄存器编号 助记符 使用说明
0, 2 $f0, $f2 子函数调用返回值, $f2 C语言中未使用
1, 3-11, 20-23 $f1, $f3-$f11, $f20-$f23 暂时变量,子函数使用时不需要保存和恢复
12-19 $f12-$f19 子函数调用的参数
24, 25, 26, 27, 28, 29, 30, 31 $f24, $f25, $f26, $f27, $f28, $f29, $f30, $f31 子函数寄存器变量,子函数必需保存和在返回之前恢复寄存器的值

Over!

Leave a Reply

Your email address will not be published. Required fields are marked *