1 ori指令说明
ori是进行逻辑 或 运算的指令,其指令格式如下所示
从以上的指令格式,我们可以直到,这是一个I类型指令,ori指令的指令码是 6‘b001101,所以当处理器发现正在处理的指令的高6bit 是 001101 的时候,就知道当前正在处理的是 ori指令。
指令的用法是:ori rs rt immediate,作用是将指令中的16位立即数 immediate 进行无符号扩展至32位,然后与索引为rs 的通用寄存器的值进行逻辑 或 运算,运算的结果保存到索引 rt 的通用寄存器中。
(1)无符号扩展 和 符号扩展
在MIPS指令架构中,通常会有指令需要将其中的立即数 进行符号扩展 或者 无符号扩展,一般都是将n位立即数 扩展到32位,其中 符号扩展时将 n位立即数的最高位赋值到扩展后的32位数据的 高(32-n)位,无符号扩展 则是将扩展后的32位数据的高(32-n)位都置0.以16位立即数扩展为32位为例。(自己解释就比如,符号扩展,第16位的数据依次赋值给 高 16位的数据)
2 流水线 简单模型
简单来说,如果寄存器的输出端和输入端 存在环路,这样的电路称为状态机。状态机的简单模型如下图所示。如果寄存器之间有连接,没有上述环路,这样的电路结构称为 流水线。
在流水线结构中,信号在寄存器之间传递,每传递到一级都会引起相应的组合逻辑电路变化,对这种模型进行抽象描述就是寄存器传输级(RTL)。Register Transfer level
2.1 ori 指令流水线
在复习一下几个阶段的工作:
1 取指:取出指令存储器中的指令,PC值递增,准备取下一条指令
2 译码:对指令进行译码,依据译码的结果,从32个通用寄存器中取出 src 操作数,有的指令要求两个src 操作数都是寄存器的值,比如 or 指令,有的指令要求其中一个src操作数是指令中立即数的扩展,比如 ori 指令。所以这里有两个复用器,用于依据指令要求,确定参与运算的操作数,最终确定的两个操作数会送到执行阶段
3 执行阶段:依据译码阶段送入的src 操作数、操作码、进行运算。对于 ori指令而言,就是进行逻辑 或 运算,运算结果传递到访存阶段
4 访存阶段: 对于ori指令,在访存阶段没有任何操作,直接将运算结果向下传递到回写阶段。
5 回写阶段:将运算结果保存到目的寄存器
接下来就是代码的实现啦!!!!