MIPS汇编:MIPS32中通用寄存器的使用约定
2017-06-12 14:19
253 查看
这段时间一直在学习MIPS32汇编。
MIPS32并没有强制指定通用寄存器的使用规则(除了0号寄存器始终为0,比较特殊),但是在实际使用中大家都会遵循一系列的约定。这里以表格的方式予以展示,当作是做个笔记,方便自己以后回看。
摘自《计算机组成与设计:硬件/软件接口》
摘自《自己动手写CPU》
MIPS32并没有强制指定通用寄存器的使用规则(除了0号寄存器始终为0,比较特殊),但是在实际使用中大家都会遵循一系列的约定。这里以表格的方式予以展示,当作是做个笔记,方便自己以后回看。
名称 | 寄存器号 | 用途 | 调用时是否保存 |
---|---|---|---|
$zero | 0 | 常数0 | 不适用 |
$v0~$v1 | 2~3 | 计算结果和表达式求值 | 否 |
$a0~$a3 | 4~7 | 参数 | 否 |
$t0~$t7 | 8~15 | 临时变量 | 否 |
$s0~$s7 | 16~23 | 保存的寄存器 | 是 |
$t8~$t9 | 24~25 | 更多临时变量 | 否 |
$gp | 28 | 全局指针 | 是 |
$sp | 29 | 栈指针 | 是 |
$fp | 30 | 帧指针 | 是 |
$ra | 31 | 返回地址 | 是 |
寄存器名字 | 约定命名 | 用途 |
---|---|---|
$0 | zero | 总是为0 |
$1 | at | 留作汇编器生成一些合成指令 |
$2、$3 | v0、v1 | 用来存放子程序返回值 |
$4~$7 | a0~a3 | 调用子程序时,使用这4个寄存器传输前4个非浮点参数 |
$8~$15 | t0~t7 | 临时寄存器,子程序使用时可以不用存储和恢复 |
$16~$23 | s0~s7 | 子程序寄存器变量,改变这些寄存器值的子程序必须存储旧的值并在退出前恢复,对调用程序来说值不变 |
$24、$2 4000 5 | t8、t9 | 临时寄存器,子程序使用时可以不用存储和恢复 |
$26、$27 | k0、k1 | 由异常处理程序使用 |
$28 | gp | 全局指针 |
$29 | sp | 堆栈指针 |
$30 | fp | 子程序可以用来作堆栈帧指针 |
$31 | ra | 存放子程序返回地址 |
相关文章推荐
- 32/64位跨平台反汇编引擎BeaEngine使用简介
- 使用crosstool-ng-1.19.0.tar.bz2制作mips32大端交叉编译工具
- 如何在64位的linux系统上使用汇编和C语言混合编程-32汇编移植64位系统
- 8086汇编学习之基础知识、通用寄存器、CS/IP寄存器与Debug的使用
- 32汇编调试工具的使用
- 汇编学习——使用高级IA-32特性
- mips汇编程序中的.set指令使用
- 如何使用lcc编译c文件到mips 汇编
- c/c++ 下使用内嵌汇编(inline assembler) (转自MSDN)
- Win32汇编教程六 工具栏和状态栏的使用
- 汇编语言与C语言的混合使用
- VC中使用汇编语言
- 使用汇编直接写屏
- 使用汇编取得PE文件导入的DLL名称和函数名称
- MIPS体系下的汇编
- 使用 Visual Basic 通过 32 位 地址访问内存(中英对照)
- Win32汇编教程三 一个简单的对话框 --- 兼谈资源文件的使用
- Win32汇编教程五 菜单和加速键的使用
- SQL Server中32全球唯一码(GUID)的使用
- 汇编语言与C语言的混合使用