MIPS寄存器使用约定

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 子函数寄存器变量,子函数必须保存和在返回之前恢复寄存器的值

猜你喜欢

转载自blog.csdn.net/mzhhaoo/article/details/62313348
今日推荐