MIPS指令基本格式 R、I、J
R型
1)一共有六个域
2)shamt表示的是移位操作的位数
3)R指令中opcode的值一般为0,funct和opcode一起表示指令的类型
4)目的操作数是用来保存运算结果的操作数
1、ADD:符号加
funct:32,opcode:0,shamt:0
2、ADDU:无符号加
funct:33,opcode:0,shamt:0
3、AND:与
funct:36,opcode:0,shamt:0
运算规则:有0为0,全1为1
4、NOR:或非
格式:nor rd,rs,rt
rs:第一个源操作数
rt:第二个源操作数
rd:目的操作数
funct:39,opcode:0,shamt:0
示例:nor $s1,$s2,$s3 //全零为1,有1为0
5、OR:或
格式:or rd,rs,rt
rs:第一个源操作数
rt:第二个源操作数
rd:目的操作数
funct:37,opcode:0,shamt:0
示例:or $s1,$s2,$s3 //全0为0,有1为1
6、XOR:异或
格式:xor rd,rs,rt
rs:第一个源操作数
rt:第二个源操作数
rd:目的操作数
funct:38,opcode:0,shamt:0
示例:xor $s1,$s2,$s3 //s2寄存器与s3寄存器的值相同则s1寄存器中的值为0,相异则为1
7、SUB:符号减
格式:sub rd,rs,rt
rs:第一个源操作数(被减数)
rt:第二个源操作数(减数)
rd:目的操作数
funct:34,opcode:0,shamt:0
8、无符号减
格式:subu rd,rs,rt
rs:第一个源操作数(被减数)
rt:第二个源操作数(减数)
rd:目的操作数
funct:35,opcode:0,shamt:0
练习
1.假定变量f, g, h, i, j的值分别放入对应寄存器$s0~$s4,并且字类型数组A和B的首地址分别放在寄存器$s6和$s7中,请分别用最短的C语言程序段实现以下MIPS指令序列的功能。
(1) add $s0,$s0,$s1
add $s0,$s0,$s2
add $s0,$s0,$s3
add $s0, $s0,$s4
sw $s0, 16($s7)
(2) Iw $s0,4($s6)
(3) add $s0,$s0,$s1
add $s0,$s3,$s2
add $s0,$s0,$s3
(4) lui $s0, 0xabcd
ori $s0,$s0,0x80
sw $s0,12($s6)
1)f = f + g + h + i + j; B[4] = f; //sw是存储字,将寄存器s0中的数存储在后述地址,4是由16/4得出
2) A[1] = f; //lw是加载字,将寄存器s0中的值加载到A[1] 1是由4/4得出
3)f = f + g + i + h + i;
4) f = 0xabcd | 0x80; A[3] = f; //lui:立即数加载至最高位,ori:或立即数