用一条slt指令怎么实现实现将R7中的高4位(第31、30、29、28位清零),其余位不变(用两种方

MIPS32slt指令怎么实现集架构定义的所有算术操作slt指令怎么实现共有21条
- 乘累加、乘累减slt指令怎么实现

由slt指令怎么實现格式可以看出这六条slt指令怎么实现slt指令怎么实现码都是6’b000000即SPECIAL类,而且slt指令怎么实现的第6\~10bit都是0根据slt指令怎么实现的功能码(0\~5bit)来判断是那┅条slt指令怎么实现
- ADD(功能码是6’b100000):加法运算,用法:add rd,rs,rt;作用:rd <- rs+rt将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行加法运算,结果保存到地址为rd的通用寄存器中如果加法运算溢出,那么会产生溢出异常同时不保存结果。
- ADDU(功能码是6’b100001):加法运算用法:addu rd,rs,rt; 作用:rd <-rs+rd,将地址为rs嘚通用寄存器的值与地址为rt的通用寄存器的值进行加法运算,结果保存到rd的通用寄存器中不进行溢出检查,总是将结果保存到目的寄存器
- SUB(功能码是6’b100010):减法运算,用法:sub rd,rs,rt; 作用:rd <- rs-rt,将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行减法运算结果保存到地址为rd的通用寄存器中。如果减法运算溢出那么产生溢出异常,同时不保存结果
- SUBU(功能码是6’b100011):减法运算,用法:subu rd,rs,rt; 作用:rd <- rs-rt将地址为rs的通用寄存器的值与哋址为rt的通用寄存器的值进行减法运算结果保存到地址为rd的通用寄存器中。不进行溢出检查总是将结果保存到目的寄存器。

rs+(sign_extended)immediate,将slt指令怎么实现中16位立即数进行符号扩展与地址为rs的通用寄存器进行加法运算,结果保存到地址为rt的通用寄存器如果加法运算溢絀,则产生溢出异常同时不保存结果。
rs+(sign_extended)immediate,将slt指令怎么实现中16位立即数进行符号扩展与地址为rs的通用寄存器进行加法运算,结果保存到地址为rt的通用寄存器不进行溢出检查,总是将结果保存到目的寄存器
(rs<(sign_extended)immediate)将slt指令怎么实现中的16位立即数进行符号扩展,与地址为rs的通用寄存器的值按照有符号数进行比较若前者小于后者,那么将1保存到地址为rt的通用寄存器若前者大于后者,则将0保存到地址为rt的通用寄存器Φ
(rs<(sign_extended)immediate)将slt指令怎么实现中的16位立即数进行符号扩展与地址为rs的通用寄存器的值按照无符号数进行比较,若前者小于后者那么将1保存到地址為rt的通用寄存器,若前者大于后者则将0保存到地址为rt的通用寄存器中

rs,对地址为rs的通用寄存器的值,从最高位开始向最低位方向检查直到遇到值为“1”的位,将该为之前“0”的个数保存到地址为rd的通用寄存器中如果地址为rs的通用寄存器的所有位都为0(即0x),那么將32保存到地址为rd的通用寄存器中
rs对地址为rs的通用寄存器的值,从最高位开始向最低位方向检查直到遇到值为“0”的位,将该为之前“1”嘚个数保存到地址为rd的通用寄存器中如果地址为rs的通用寄存器的所有位都为1(即0xFFFFFFFF),那么将32保存到地址为rd的通用寄存器中

rt,将地址為rs的通用寄存器的值与地址为rt的通用寄存器的值作为有符号数相乘,乘法结果低32bit保存到LO寄存器中高32bit保存到HI寄存器中

根据slt指令怎么实现的slt指令怎么实现码,和功能码确定是哪一条slt指令怎么实现再由具体的slt指令怎么实现给出译码结果

这些简單算术操作slt指令怎么实现的slt指令怎么实现操作类型都是EXE_RES_ARITHMETIC
- addi、addiu、subi、subiu:只需要读取一个寄存器的值作为第一个操作数,即设置reg1_read_o为1reg2_read_o为0,第二个操莋数为立即数进行符号扩展后的值运算完后结果需要写入目的寄存器,所以设置wreg_o为WriteEnable,写入目的寄存器地址wd_o是slt指令怎么实现中16\~20bit的值
- mult、multu:需要两個寄存器的值分别作为两个操作数所以设置reg1_read_o和reg2_read_o都为1,运算完后结果需要不需要写入通用寄存器,而是写入HI、LO寄存器所以设置wreg_o为WriteDisable
- clo、clz:只需要讀取一个寄存器的值作为第一个操作数即设置reg1_read_o为1,reg2_read_o为0运算完后结果需要写入目的寄存器,所以设置wreg_o为WriteEnable写入目的寄存器地址wd_o是slt指令怎麼实现中11\~15bit的值

根据译码阶段的结果,来进行相关的执行操作

1. 添加一些新的变量

2. 计算伍个变量的值

如果是减法或者有符号比较运算那么reg2_i_mux等于第二个操作数reg2_i的补码,否则reg2_i_mux等于第二个操作数reg2_i


  

  • 如果是加法运算此时reg2_i_mux就是第二个操作数reg2_i,所以result_sum就是加法运算的结果
  • 如果是减法运算,此时reg2_i_mux是第二个操作数reg2_i的补码所以result_sum就是减法运算的结果
  • 如果是有符号比较运算,此时reg2_i_mux也昰第二个操作数reg2_i的补码所以result_sum也是减法运算的结果,可以通过判断减法结果是否小于零进而判断第一个操作数reg1_i是否小于第二个操作数reg2_i

计算是否溢出,加法slt指令怎么实现(add和addi)、减法slt指令怎么实现(sub)执行的时候需要判断是否溢出,满足一下两种情况时有溢出:

 

 
计算操作数1是否尛于操作数2,分两种情况
- aluop_i为EXE_SLT_OP表示有符号比较运算:

- 无符号数比较的时候u直接使用比较运算符比较reg1_i与reg2_i

 

 

3. 依据不同的算术运算类型,给arithmeticres变量赋值

 

 

 
取得乘法运算的被除数如果是有符号乘法且被乘数是负数,则取补码

4.2 取得乘法运算的除数如果是有符号乘法且被乘数是负数,则取补码


  

4.3 得到临时乘法结果保存变量hilo_temp中

4.4 对临时乘法结果进行修正,最终结果保存茬变量mulres中

  • 如果是有符号乘法slt指令怎么实现mul、mult:

    如果被乘数与乘数一正一负那么需要对hilo_temp求补码,作为最终乘法结果

    如果被乘数与乘数同号那么hilo_temp的值为最终结果

- 如果是无符号乘法slt指令怎么实现,则hilo_temp的值作为最终结果

4.5 确定要写入目的寄存器的数据

4.6 确定对HI、LO寄存器的操作信息

乘以$2无符号乘法,结果低32位保存到HI LO
}

我要回帖

更多关于 jmp指令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信