高32位存在hi寄存器,低32位保存在lo寄存器中
想得到结果需要用到前文的mfhi,mflo等
除法运算
与乘法类似
div $Rs,$Rt divu $Rs,$Rt
进行$Rs/$Rt的运算,结果保存在特殊寄存器中。余数存在hi寄存器,商存在lo寄存器中
位运算指令
位逻辑运算指令
先讲与、或、或非、异或四类运算,这里都是位逻辑运算
逻辑运算的具体功能请参考《数字电路》课程
可以通过或非0,异或1,实现非运算
and $Rd,$Rs,$Rt #Rs和Rt位与,结果存到Rd andi $Rd,$Rs,Imm #Imm是16位的,高16位充0后再和Rs位与 or $Rd,$Rs,$Rt #或运算 ori $Rd,$Rs,Imm #Imm是16位的,高16位充0 xor $Rd,$Rs,$Rt #异或运算 xori $Rd,$Rs,Imm #Imm是16位的,高16位充0 nor $Rd,$Rs,$Rt #或非运算,注意没有nori指令
移位指令
还有一类移位指令,分为逻辑移位和算术移位
# 逻辑移位指令,移入0,都是R型指令,Imm存在移位域 sll $Rd,$Rt,Imm #逻辑左移Imm srl $Rd,$Rt,Imm #逻辑右移Imm sllv $Rd,$Rs,$Rt #逻辑左移,移动的位数是$Rt的值 srlv $Rd,$Rs,$Rt #逻辑右移,移动的位数是$Rt的值
# 算术移位指令,移入符号位,都是R型指令,Imm存在移位域 # 没有算术左移,因为左移会丢失符号位 sra $Rd,$Rt,Imm #算术右移Imm srav $Rd,$Rs,$Rt #算术右移,移动的次数是$Rt的值
程序控制指令
在学这部分知识前,我们先要复习以下几个知识:
1.MIPS指令都是32位的,即4个字节,即1个字
2.MIPS架构的存储器要求边界对齐,字的存放的首地址必须是4的整数倍,也就是地址的最低两位是0
3.指令存放在存储器中,且是顺序存储。在程序中相邻的指令在内存中也相邻
4.PC寄存器指向下一条指令的地址
5.在无跳转指令时,程序依靠PC寄存器依次+4来顺序执行指令;实现跳转的关键是改变PC寄存器的值
相等条件控制指令
有