寄存器使用约定"/>
MIPS寄存器使用约定
ref:.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 | 子函数寄存器变量,子函数必须保存和在返回之前恢复寄存器的值 |
更多推荐
MIPS寄存器使用约定
发布评论