一.R型指令

(1)R型指令格式

000000 (op) Rs Rt Rd shamt funct
6bits 5bits 5bits 5bits 5bits 6bits

注意: 该类型指令操作数和保存结果均通过寄存器进行。

操作 含义
op 操作码,所有R型指令都全为0
rs 寄存器编号,对应第一个源操作数
rt 寄存器编号,对应第二个源操作数
rd 寄存器编号,保存结果
shamt 常数,在移位指令中使用
funct 功能码,指定指令的具体功能

(2)具体R型指令

注意: R型指令根据操作的寄存器数可以分为三种不同类型。

【1】带有3个寄存器

指令 [31 : 26] [25 : 21] [20 : 16] [15 : 11] [10 : 6] [5 : 0] 指令功能
add 000000 rs rt rd 00000 100000 寄存器加
sub 000000 rs rt rd 00000 100010 寄存器减
and 000000 rs rt rd 00000 100100 寄存器与
or 000000 rs rt rd 00000 100101 寄存器或
xor 000000 rs rt rd 00000 100110 寄存器异或

$rd = $rs op $ rt

【2】带有2个寄存器

指令 [31 : 26] [25 : 21] [20 : 16] [15 : 11] [10 : 6] [5 : 0] 指令功能
sll 000000 00000 rt rd sa 100000 逻辑左移
srl 000000 00000 rt rd sa 000010 逻辑右移
sll 000000 00000 rt rd sa 000011 算术右移

$rd = $rt shift sa

【3】带有1个寄存器

指令 [31 : 26] [25 : 21] [20 : 16] [15 : 11] [10 : 6] [5 : 0] 指令功能
jr 000000 rs 00000 00000 00000 001000 寄存器跳转

jr rs;
PC = rs

二.I型指令

(1)I型指令格式

OP Rs Rt imm(立即数)
6bits 5bits 5bits 16bits

注意: 操作数中涉及立即数,结果保存到寄存器

操作 含义
op 标识指令的操作功能
rs 第一个源操作数,是寄存器操作数
rt 目的寄存器编号,用来保存运算结果
imm 第二个源操作数,立即数

(2)具体I型指令

注意: I型指令存在4种不同的类型

【1】面向运算的I型指令

指令 [31 : 26] [25 : 21] [20 : 16] [15 : 0] 指令功能
addi 001000 rs rt imm 寄存器和立即数“加”
andi 001100 rs rt imm 寄存器和立即数“与”
ori 001101 rs rt imm 寄存器和立即数“或”
xori 001110 rs rt imm 寄存器和立即数“异或”

第一条指令是对立即数进行符号拓展,其他都是0拓展
addi rt, rs, imm;
$rt = $rs op E(imm)

【2】面向访存的I型指令

指令 [31 : 26] [25 : 21] [20 : 16] [15 : 0] 指令功能
lw 100011 rs rt imm 从存储器种读取数据
sw 101011 rs rt imm 把数据保存到存储器

MIPS 32中唯一两条访问存储器的指令(RISC)
lw rt, imm(rs) #

r

t

=

m

e

m

[

rt = mem[

rt=mem[rs+E(imm)]
sw rt, imm(rs) #

m

e

m

[

mem[

mem[rs+E(imm)] = $rt

【3】面向数位设置的I型指令

指令 [31 : 26] [25 : 21] [20 : 16] [15 : 0] 指令功能
lui 001111 00000 rt imm 设置寄存器的高16位

lui rt, imm #$rt = imm<<16(空位补0)

【4】面向条件转移(分支)的I型指令

指令 [31 : 26] [25 : 21] [20 : 16] [15 : 0] 指令功能
beq 000100 rs rt imm 寄存器相等则转移
bne 000101 rs rt imm 寄存器不相等则转移

beq rs, rt, imm #if(

r

s

=

=

rs==

rs==rt) PC=PC+E(imm)<<2
bne rs, rt, imm #if(

r

s

!

=

rs!=

rs!=rt) PC=PC+E(imm)<<2
标准的PC相对寻址方式

三.J型指令

(1)J型指令格式

OP 立即数
6bits 26bits

(2)具体J型指令

指令 [31 : 26] [25 : 0] 指令功能
j 000010 address 无条件跳转
jal 001100 address 调用与联接

j address;
$ PC=($PC+4)H4U(address<<2)

jal address;
$ra = $PC+4(保存返回地址)
$ PC=($PC+4)H4U(address<<2)

四.举例

(1)关于R型指令

不同功能的R型指令使用的寄存器数量不一定相同,有一个、两个、三个

所有R型指令的操作码OP字段均为000000

R型指令既有算术运算指令,也有逻辑运算指令,它不支持访问主存的指令

(2)关于J造型指令

J型指令支持无条件跳转指令

J性指令只使用伪直接寻址方式

J型指令执行后,PC寄存器的值最后两位一定为00

J型指令需要使用ra寄存器

参考:华中科技大学mooc计算机组成原理


版权声明:本文为weixin_46308081原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_46308081/article/details/115798605