自己动手写CPU(2)——逻辑、移位操作与空指令说明

逻辑操作指令

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]
ANDand rd, rs, rtrd <- rs AND rt6’b 00_00005’b 000006’b 10_0100
ORor rd, rs, rtrd <- rs OR rt6’b 00_00005’b 000006’b 10_0101
XORxor rd, rs, rtrd <- rs XOR rt6’b 00_00005’b 000006’b 10_0110
NORnor rd, rs, rtrd <- rs NOR rt6’b 00_00005’b 000006’b 10_0111

I型指令

op[31:26]rs[25:21]rt[20:16]immediate[15:0]
名称指令用法指令作用指令码[31:26]
ORIori rt, rs, immrt <- rs ORI imm6’b 00_1101
ANDIandi rt, rs, immrt <- rs ANDI imm6’b 00_1100
XORIxori rt, rs, immrt <- rs XORI imm6’b 00_1110
LUIlui rt, immrt <- imm II 0166’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]
SLLsll rd, rt, sard <- rt << sa(logic)6’b 00_00005’b 0_0000sa6’b 00_0000
SRLsrl rd, rt, sard <- rt >> sa(logic)6’b 00_00005’b 0_0000sa6’b 00_0010
SRAsra rd, rt, sard <- rt >> sa(arithmetic)6’b 00_00005’b 0_0000sa6’b 00_0011
SLLVsllv rd, rt, rsrd <- rt << rs[4:0] (logic)6’b 00_0000rs5’b 0_00006’b 00_0100
SRLVslrv rd, rt, rsrd <- rt >> rs[4:0] (logic)6’b 00_0000rs5’b 0_00006’b 00_0110
SRAVsrav rd, rt, rsrd <- rt >> rs[4:0] (arithmetic)6’b 00_0000rs5’b 0_00006’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]
NOP6’b 0000005’b 000005’b 000006’b 0000005’b 000006’b 000000
SSNOP6’b 0000005’b 000005’b 000006’b 0000005’b 000006’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]
SYNC6’b 0000005’b 000005’b 000006’b 0000005’b 000016’b 00_1111
op[31:26]rs[25:21]rt[20:16]func[5:0]
PREF6’b 11_0011basehintoffset

J型指令

op[31:26]address[25:0]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值