逻辑移位空指令代码原理

5.5.1 修改译码阶段的ID模块
对指令译码的前提是能判断出指令种类,这个过程如图5-15所示。其中op就是指指令的第26-31bit,即指令码,op2就是指令的第6-10bit,op3就是指令的第0-5bit,即功能码,op4就是指令的第16-20bit.定义如下:在这里插入图片描述首先依据指令码op进行判断,如果是SPECIAL类指令,再判断指令的第6-10bit(即op2)是否为0,如果为0,那么再依据功能码op3的值,进行最终判断,确定指令类型。如果指令码op不为SPECIAL,那么就直接依据指令码op的值进行判断。
只有在确定指令sll、srl、sra的时候有些特殊,这三条指令都是SPECIAL类指令,但是这三条指令还要求第21-25bit为0,而第6-10bit为移位位数,所以这3条指令的判断过程是:判断指令的第21-31bit是否全为0,如果全为0,那么再依据功能码op3进行最终判断,确定指令类型。在这里插入图片描述
对任意一条指令而言,译码工作的主要内容是:确定要读取的寄存器情况、要执行的运算和要写入的目的寄存器三方面的信息。下面对其中几个典型指令的译码过程进行解释。
  1. and指令的译码过程
    and指令译码需要设置的三方面内容如下(or、xor、nor、指令的译码过程可以参考and指令)
    (1)要读取的寄存器情况:and指令需要读取rs、rt寄存器的值,所以设置reg1_read_o、reg2_read_o为1.默认通过Regfile模块读端口1读取的寄存器地址reg1_addr_o的值是指令的第21-25bit,正是and指令中的rs,默认通过Regfile2模块读端口2读取的寄存器地址reg2_addr_o的值是指令的第16-20bit,正是and指令中的rt。
    (2)要执行的运算:and指令要进行的是逻辑"与"操作,所以设置alusel_o为EXE_RES_LOGIV,设置aluop_o为EXE_AND_OP。
    (3)要写入的目的寄存器:and指令需要将结果写入 目的寄存器,所以设置wreg_o为WriteEnable,设置wd_o为要写入的目的寄存器地址,默认是指令字的第11-15bit,正是and指令中rd的位置。

2.andi指令的译码过程
andi指令译码需要设置的三方面内容如下(xori指令的译码过程可以参考andi指令).
(1)要读取的寄存器的情况:andi指令只需要读取rs寄存器的值,所以设置reg1_read_o为1,reg2_read_o为0.默认通过Regfile模块读端口1读取的寄存器地址reg1_addr_o的值是指令的第21-25bit,正是andi指令中的rs。设置reg2_read_o为0,暗含使用立即数作为运算的操作数。imm就是指令中立即数进行零扩展后的值。
(2)要执行的运算:andi指令要进行的是逻辑“与”操作,所以设置alusel_o为EXE——RES——LOGIC,设置aluop_o为EXE_AND_OP。这一点与and指令的译码过程一样。
(3)要写入的目的寄存器:andi指令需要将结果写入目的寄存器,所以设置wreg_o为WriteEnable,设置wd_o为要写入的目的寄存器地址,默认是指令字的第11-15bit,在此需要修改,对andi治令而言,目的寄存器地址是指令字的第16-20bit。

3.sllv指令的译码过程
sllv指令译码需要设置的三个方面内容如下,(srlv、srav指令的译码过程可以参考sllv指令)。
(1)要读取的寄存器情况:同and指令一样,设置reg1_read_o、reg2_read_o为1.
(2)要执行的运算:sllv指令要进行的是逻辑左移操作,所以设置alusel_o为EXE_RES_SHIFT,设置aluop_o为EXE_SLL_OP。
(3)要写入的目的寄存器:同and指令一样,设置wreg_o为WriteEnable,设置wd_o为要写入的目的寄存器地址,默认是指令字的第11-15bit,正是指令中rd的位置。
4.lui指令的译码过程
OpenMIPS将lui指令转换成ori指令来执行,语句如下:
在这里插入图片描述也就是将指令中的立即数左移16bit,然后与$0寄存器进行逻辑“或”运算。需要设置的三方面内容如下。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

PS最后啦,本章内容建议反复观看,背下来指令的用途~
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值