算术指令
指令 | 示例 | 含义 | 指令结构类型 | OP | funct | 注释 |
---|---|---|---|---|---|---|
加法 | add $s1, $s2, $s3 | $s1 = $s2 + $s3 | ||||
减法 | sub $s1, $s2, $s3 | $s1 = $s2 - $s3 | ||||
立即数加法 | addi $s1, $s2, 20 | $s1 = $s2 + 20 |
数据传输
指令 | 示例 | 含义 | 指令结构类型 | OP | funct | 注释 |
---|---|---|---|---|---|---|
取字 | lw $s1, 20($s2) | $s1 = Memory[$s2 + 20] | ||||
存字 | sw $s1, 20($s2) | Memory[$s2 + 20] = $s1 | ||||
取半字 | lh $s1, 20($s2) | $s1 = Memory[$s2 + 20] | ||||
取无符号半字 | lhu $s1, 20($s2) | $s1 = Memory[$s2 + 20] | ||||
存半字 | sh $s1, 20($s2) | Memory[$s2 + 20] = $s1 | ||||
取字节 | lb $s1, 20($s2) | $s1 = Memory[$s2 + 20] | ||||
取无符号字节 | lbu $s1, 20($s2) | $s1 = Memory[$s2 + 20] | ||||
存字节 | sb $s1, 20($s2) | Memory[$s2 + 20] = $s1 | ||||
取链接字 | ll $s1, 20($s2) | $s1 = Memory[$s2 + 20] | ||||
存条件字 | sc $s1, 20($s2) | Memory[$s2 + 20] = $s1; $s1 = 0 or 1 | ||||
取立即数的高位 | lui $s1, 20 | $s1 = 20 * |
逻辑
指令 | 示例 | 含义 | 指令结构类型 | OP | funct | 注释 |
---|---|---|---|---|---|---|
按位与 | and $s1, $s2, $s3 | $s1 = $s2 & $s3 | ||||
按位或 | or $s1, $s2, $s3 | $s1 = $s2 | $s3 | ||||
或非 | nor $s1, $s2, $s3 | $s1 = ~($s2 | $s3) | ||||
立即数与 | addi $s1, $s2, 20 | $s1 = $s2 & 20 | ||||
立即数或 | ori $s1, $s2, 20 | $s1 = $s2 | 20 | ||||
逻辑左移 | sll $s1, $s2, 10 | $s1 = $s2 << 10 | ||||
逻辑右移 | srl $s1, $s2, 10 | $s1 = $s2 >> 10 |
条件分支
指令 | 示例 | 含义 | 指令结构类型 | OP | funct | 注释 |
---|---|---|---|---|---|---|
相等时跳转 | beq $s1, $s2, 25 | PC+4+100 when $s1 == $s2 | ||||
不相等时跳转 | bne $s1, $s2, 25 | PC+4+100 when $s1 != $s2 | ||||
小于时复位 | slt $s1, $s2, $s3 | when $s2 < $s3 then $s1 = 1 else $s1 = 0 | ||||
无符号数比较小于时复位 | sltu $s1, $s2, $s3 | when $s2 < $s3 then $s1 = 1 else $s1 = 0 | ||||
无符号比较小于立即数时复位 | slti $s1, $s2, $s3 | when $s2 < $s3 then $s1 = 1 else $s1 = 0 | ||||
无符号比较小于无符号立即数时复位 | sltiu $s1, $s2, $s3 | when $s2 < $s3 then $s1 = 1 else $s1 = 0 |
无条件跳转
指令 | 示例 | 含义 | 指令结构类型 | OP | funct | 注释 |
---|---|---|---|---|---|---|
跳转 | j 2500 | go to 10000 | ||||
跳转至寄存器所指位置 | jr $ra | go to address($ra) | ||||
跳转并链接 | jal 2500 | $ra = PC + 4; go to 10000 |