逻辑操作指令
and: 寄存器与
andi: 立即数与
or: 寄存器或
ori: 立即数或
xor: 寄存器异或
xori: 立即数异或
nor: 寄存器或非
lui: 将16位立即数存在目的寄存器的高16位中,低位补0
R型指令
op[31:26] | rs[25:21] | rt[20:16] | rd[15:11] | sa[10:6] | func[5:0] |
---|
名称 | 指令用法 | 指令作用 | 指令码[31:26] | 移位相关[10:6] | 功能码[5:0] |
---|---|---|---|---|---|
AND | and rd, rs, rt | rd <- rs AND rt | 6’b 00_0000 | 5’b 00000 | 6’b 10_0100 |
OR | or rd, rs, rt | rd <- rs OR rt | 6’b 00_0000 | 5’b 00000 | 6’b 10_0101 |
XOR | xor rd, rs, rt | rd <- rs XOR rt | 6’b 00_0000 | 5’b 00000 | 6’b 10_0110 |
NOR | nor rd, rs, rt | rd <- rs NOR rt | 6’b 00_0000 | 5’b 00000 | 6’b 10_0111 |
I型指令
op[31:26] | rs[25:21] | rt[20:16] | immediate[15:0] |
---|
名称 | 指令用法 | 指令作用 | 指令码[31:26] |
---|---|---|---|
ORI | ori rt, rs, imm | rt <- rs ORI imm | 6’b 00_1101 |
ANDI | andi rt, rs, imm | rt <- rs ANDI imm | 6’b 00_1100 |
XORI | xori rt, rs, imm | rt <- rs XORI imm | 6’b 00_1110 |
LUI | lui rt, imm | rt <- imm II 016 | 6’b 00_1111 |
移位操作指令
sll: 逻辑左移sa位,空位补0
sllv: 逻辑左移rs[4:0]位,空位补0
sra: 算术sa位,空位补0
srav: 逻辑左移rs[4:0]位,空位补0
srl: 算术右移sa位,空位补rt[31]
srlv: 算术右移rs[4:0]位,空位补rt[31]
R型指令
op[31:26] | rs[25:21] | rt[20:16] | rd[15:11] | sa[10:6] | func[5:0] |
---|
名称 | 指令用法 | 指令作用 | 指令码op[31:26] | 源寄存器rs[25:21] | 移位相关sa[10:6] | 功能码func[5:0] |
---|---|---|---|---|---|---|
SLL | sll rd, rt, sa | rd <- rt << sa(logic) | 6’b 00_0000 | 5’b 0_0000 | sa | 6’b 00_0000 |
SRL | srl rd, rt, sa | rd <- rt >> sa(logic) | 6’b 00_0000 | 5’b 0_0000 | sa | 6’b 00_0010 |
SRA | sra rd, rt, sa | rd <- rt >> sa(arithmetic) | 6’b 00_0000 | 5’b 0_0000 | sa | 6’b 00_0011 |
SLLV | sllv rd, rt, rs | rd <- rt << rs[4:0] (logic) | 6’b 00_0000 | rs | 5’b 0_0000 | 6’b 00_0100 |
SRLV | slrv rd, rt, rs | rd <- rt >> rs[4:0] (logic) | 6’b 00_0000 | rs | 5’b 0_0000 | 6’b 00_0110 |
SRAV | srav rd, rt, rs | rd <- rt >> rs[4:0] (arithmetic) | 6’b 00_0000 | rs | 5’b 0_0000 | 6’b 00_0111 |
空指令
nop、ssnop
snnop是一种特殊类型的空操作,在每个周期发射多条指令的CUP中,使用ssnop可以却确保单独占用一个发射周期。OpenMIPS设计为标量处理器,也就是每个周期发射一条指令,所以ssnop的作用yunop相同,可以按照nop指令的处理方式来处理ssnop
R型指令
op[31:26] | rs[25:21] | rt[20:16] | rd[15:11] | sa[10:6] | func[5:0] | |
---|---|---|---|---|---|---|
NOP | 6’b 000000 | 5’b 00000 | 5’b 00000 | 6’b 000000 | 5’b 00000 | 6’b 000000 |
SSNOP | 6’b 000000 | 5’b 00000 | 5’b 00000 | 6’b 000000 | 5’b 00000 | 6’b 000000 |
nop、和ssnop的指令码、功能码都是6’b 00_0000,和逻辑左移sll指令相同。
nop = sll $0, $0, 0
ssnop = sll $0, $0, 1
向$0写入任何数据,始终都是0,效果等于什么都不做
补充指令
R型指令
sync:用于保证加载、存储指令的操作。对应OpenMIPS,指令顺序执行,加载、存储操作也是按顺序进行,可以将sync看作nop指令处理,将其归纳为空指令
pref:用于缓存预取,OpenMIPS没有实现缓存,可以将pref看作nop指令处理,将其归纳为空指令
op[31:26] | rs[25:21] | rt[20:16] | rd[15:11] | sa[10:6] | func[5:0] | |
---|---|---|---|---|---|---|
SYNC | 6’b 000000 | 5’b 00000 | 5’b 00000 | 6’b 000000 | 5’b 00001 | 6’b 00_1111 |
op[31:26] | rs[25:21] | rt[20:16] | func[5:0] | |
---|---|---|---|---|
PREF | 6’b 11_0011 | base | hint | offset |
J型指令
op[31:26] | address[25:0] |
---|