惭愧惭愧, 之前一直不知道计组实验究竟是在干嘛, 所以基本没花时间。
今天用了大概两个小时左右将基本的流程都看明白了。
基本操作
指令添加
bne
分析一下beq指令的格式:
beq 的op 为 000100
![10651191-e79ca4c06a521df4.png](https://i-blog.csdnimg.cn/blog_migrate/91d23cafe38f97aa91f7cb8ffc0d6b83.png)
beq指令
我们知道beq指令是需要根据ALU的零信号来判断, 如果零信号有效, 也就是两个数据相等则跳转。(在这里跳转的含义就是NPC的值被修改为一个新的值)
先从最简单的bne指令开始。
op : 000101
![10651191-b6354e69dc9cb628.png](https://i-blog.csdnimg.cn/blog_migrate/43d7f0e756ec47c98a449a6ef5700672.png)
bne指令
![10651191-697fc7d1be2930c6.png](https://i-blog.csdnimg.cn/blog_migrate/ac8b359ee17e1727c688d519f611ad31.png)
对比
说明一下NPCOp = 01的时候就是计算i类型跳转指令(其实也就bne和beq两条)姚跳转的地址。
所以我们只需要去修改 NPCOp[0]就行啦。
ok, 貌似到这里第一条指令就添加完成了。
sll & srl
这也是一条R类型的指令
op = 000000, funct = 000000
![10651191-6363d660829e84e0.png](https://i-blog.csdnimg.cn/blog_migrate/467c09066b976ad15ebbc9d21d86e65c.png)
sll & srl
添加jr指令
这条指令的含义就是PC的值直接变为某个寄存器的值, 需要注意的是jr指令本身是一条R类型的指令。
想: 既然PC的值在执行jr这条指令的时候, 必须要得到寄存器的一个值, 而且是Rs这个寄存器号对应的值, 那就必须有一条线
所以,修改NPC
![10651191-8ed15bf11e8af927.png](https://i-blog.csdnimg.cn/blog_migrate/5a0bd55eeba7ba1dd0da0eb3aa32068d.png)
修改NPC