ref:https://hev.cc/805.html
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 ABI/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变量(caller-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 |
$4,$6,$8,$10,$16,$18 |
暂时变量,子函数使用时,不需要保存和恢复 |
12,14 |
$f12,$f14 |
子函数调用的参数 |
20,22,24,26,28,30 |
$20,$22,$24,$26,$28,$30 |
子函数寄存器变量,子函数必须保存和在返回之前恢复寄存器的值 |
FPR(MIPS N32 ABI)
寄存器编码 |
助记符 |
使用说明 |
0,2 |
$f0,$f2 |
子函数调用返回值($f2在C语言中未使用) |
1,3-11,(16.17)21,23,25,27,29,31 |
$1,($16.$17)$21,$23,$25,$27,$29,$31 |
暂时变量,子函数使用时,不需要保存和恢复 |
12-19 |
$f12-$f19 |
子函数调用的参数 |
20,22,24,26,28,30 |
$20,$22,$24,$26,$28,$30 |
子函数寄存器变量,子函数必须保存和在返回之前恢复寄存器的值 |
FPR(MIPS N64 ABI)
寄存器编码 |
助记符 |
使用说明 |
0,2 |
$f0,$f2 |
子函数调用返回值($f2在C语言中未使用) |
1,3-11,20-23 |
$1,$3-$11,$20-$23 |
暂时变量,子函数使用时,不需要保存和恢复 |
12-19 |
$f12-$f19 |
子函数调用的参数 |
20,22,24,26,28,30 |
$20,$22,$24,$26,$28,$30 |
子函数寄存器变量,子函数必须保存和在返回之前恢复寄存器的值 |