一、MIPS寄存器
MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS I、MIPS II、MIPS III、MIPS IV、MIPS V,以及嵌入式指令体系MIPS16、MIPS32到MIPS64的发展。
MIPS32的架构是一种基于固定长度的定期编码指令集,并采用导入/存储(load/store)数据模型。经改进,这种架构可支持高级语言的优化执行。在路由器中,经常使用的一种MIPS架构就是MIPS32。
RISC的一个显著特点就是大量使用寄存器。因为寄存器的存取可以在一个时钟周期内完成,同时简化了寻找方式,所以,MIPS32的指令中除了加载/存储指令以外,都使用寄存器或者立即数作为操作数,以便让编译器通过保持对寄存器内数据的频繁存取进一步优化代码的生成性能。
MIPS32寄存器分为两类:通用寄存器(GPR)和特殊寄存器。
1、通用寄存器(GPR)
在MIPS体系结构中有32个通用寄存器,在汇编程序中可以用编号$0~$31表示,也可以用寄存器的名字表示,如$sp、$t1、$ta等,如图,堆栈是从内存的高地址方向向低地址方向增长的。编号寄存器名称寄存器描述
0zero第0号寄存器,其值始终为0
1$at保留寄存器
2~3$v0~v1values, 保存表达式或函数返回结果
4-7$a0~a3aruments, 作为函数的前4个参数
8~15$t0~$t7temporaries,供汇编程序使用的临时寄存器
16~23$s0~$s7saved values,子函数使用时需要先保存原寄存器的值
24~25$t8~t9temporaries, 供汇编程序的临时寄存器,补充$t0~t7
26~27$k0~$k1保留,中断处理函数使用
28$gpglobal pointer,全局指针
29$spstack pointer, 堆栈指针,指向堆栈的栈顶
30$fpframe pointer, 保存栈指针
31$rareturn address, 返回地址$0:即$zero,该寄存器总是返回0,为0这个有用常数提供了一个简洁的编码形式。在MIPS处理器的通用寄存器中,没有任何帮助运算判断的标志寄存器,要实现相应的功能时,都是通过测试两个寄存器是否相等完成的。MIPS编译器常常会使用slt、beq、bne等指令和由寄存器$0获得0值产生比较所有的比较条件,如相等、不等、小于等于、大于、大于等于。还可以用add指令创建move伪指令,如"move