mips-learning

寄存器


编号 寄存器名称 寄存器描述
0 zero 第0号寄存器,值始终为0
1 $at 保留寄存器
2-3 $v0-$v1 values,保存表达式或者函数返回值
4-7 $a0-$a3 aruments,作为函数的参数
8-15 $t0-$t7 temporaries,供汇编程序使用的临时寄存器
16-23 $s0-$s7 saved values,调用子函数时,保存寄存器值
24-25 $t8-$t9 temporaries,供汇编程序使用的临时寄存器,补充$t0-$t7
26-27 $k0-$k1 保留,中断处理函数使用
28 $gp 全局指针
29 $sp 堆栈指针
30 $fp 保存栈指针
31 $ra 返回地址
上述的寄存器为通用寄存器,mips中还有特殊寄存器为PC、HI(乘除结果高位寄存器)和LO(乘除结果低位寄存器)

mips指令集

有关特点:
1.指令固定4字节长度
2.内存中的数据访问(Load/Store)必须严格对齐(至少四字节)
3.mips默认不将子函数的返回地址存放到栈中,而是放到$ra中
4.流水线效应(当程序执行跳转指令时,跳转指令后面的指令也会执行)
常见指令:
LOAD/STORE指令:
1.LA将一个地址或者标签存入一个寄存器
2.LW用于从一个指定的地址加载一个word类型的值到寄存器
3.SW用于将源寄存器中的值存入指定的地址
syscall:
系统调用号通常存放于$v0,参数放在$a0-$a3
关于mips中的分支跳转,如下

直接的跳转指令:
1.j target:无条件跳转到target
2.jr $t3:跳转到$t3指向的地址处
3.jal target:跳转到target标签处,并保存返回地址到$ra中
在jal target中,需要将当前的pc值复制到$ra中,然后程序跳转到target,如果子函数又调用了其他函数,则$ra的值应该被保存到堆栈