当前位置:   article > 正文

“21天好习惯”第一期-14_i型指令格式

i型指令格式

计组笔记


3.5.1        MIPS32指令架构

目录

3. 指令集功能分析

 (1)R型指令 

(2)I型指令

(3)J型指令


3. 指令集功能分析

 (1)R型指令 

①R型运算指令,使用到了3个寄存器,包括6种计算:add(加)、sub(减)、and(与)、or(或)、xor(异或),它们的汇编形式统一表示为:

        add/sub/and/or/xor   rd,rs,rt

        各指令的操作也可以形式地统一为:

        $rs  op  $rt ——> $rd

        其操作含义是将前两个寄存器中的数据做op运算,结果写回到第三个寄存器,这里的op是指由操作码OP和功能辅助说明字段func联合确定的运算操作。

②R型移位指令,使用到两个寄存器,包括3种移位:sll(逻辑左移)、srl(逻辑右移)、sra(算术右移)。它们的汇编形式也可以统一表示为:

        sll/srl/sra    ra,rs,shamt

        各指令的操作也可以形式化地统一表示为:

        $rs  shift  shamt  ——> $rd

        其含义是将第一个寄存器中的数据进行移位shift,移位类型由操作码OP与func字段联合确定,移动的位数则由指令中的shamt字段给定。

 ③R型跳转指令,只使用到1个寄存器,也只有一种跳转:jr,他的汇编形式是:

        jr   rs

        这种寄存器型的跳转指令执行的操作是:

        $rs  ——>  PC

        是指把寄存器中存储的地址码直接写入程序指针计数器PC,再根据PC值去读取指令从而实现跳转,是基于寄存器直接寻址方式的无条件跳转。

(2)I型指令

①I 型运算类指令,使用到2个寄存器和1个立即数,包括4种运算操作:addi(立即数加)、andi(立即数与)、ori(立即数或)和xori(立即数异或),对应的汇编形式统一表示为:

        addi/andi/ori/xori    rt,rs,imm

        各指令执行的操作统一表示为:

        $rs   op  E(imm)——> $rt

        就是把寄存器中保存的数据字与指令中截取到的立即数进行运算,结果写回到第二个寄存器。

        注意:addi执行的是算术加法,所以16位的立即数imm扩展成32位,即执行E(imm)时,采用符号扩展(sign extension);其余3种逻辑运算中执行E(imm)时,采用0扩展。

 ②I型访存指令,使用到2个寄存器和1个立即数,包括lw(取字)、sw(存字),二者的汇编格式分别表示为:

        lw   rt,imm(rs)

        sw  rt,imm(rs)

        取字指令lw执行的操作是:

        Mem[$rs+E(imm)]——> $rt

        存字指令sw执行的操作与lw的操作刚好是逆向的:

        $rt——>Mem[$rs+E(imm)]

        这两条指令都是按基址寻址方式形成目标主存单元地址,前者从主存单元读数据字并写回到寄存器,后者把寄存器中的数据字写入到目标主存单元。

③I型数位设置指令,只使用到1个寄存器和一个常数,代表性的指令是lui。它的汇编格式表示为:

        lui  rt,imm

        其功能是把imm设置到寄存器rt的高16位:(imm<<16)——>$rt,执行时可以先将立即数imm左移16位且空位补0,转换成32位后赋值给rt寄存器。 

④I型分支指令,使用到两个寄存器和1个立即数,是条件转移型指令,主要包括:beq(相等则分支)和bne(不等则分支),相应的汇编格式可表示为:

        beq   rs,rt,imm

        bne   rs,rt,imm 

        beq指令的执行的操作可以描述为:如果$rs=$rt,则执行PC+E(imm)<<2——>PC,否则不修改PC值,以确保顺序执行后继指令;而bne指令的执行操作可以描述为:如果$rs<>$rt,则执行PC+E(imm)<<2——>PC,否则不修改PC值,从而确保顺序执行后继指令。

(3)J型指令

 

        表3-24中列出的J型指令只有两个,是一类无条件转移型指令。这类指令包括:j(普通无条件跳转)和jal(保存断点后的无条件跳转),它们的汇编格式是:

        j   address

        jall  address

        前者不需要保存断点(返回地址),所以直接执行:PC【31:28】U address <<2——>PC;后者需要先将断点地址保存到专用的堆栈寄存器ra以便调用的子程序执行完后能正确返回,再执行与j指令一样的操作:PC【31:28】U address << 2 ——>PC。

        R型指令中也有一条类似的无条件转移指令jr,I型指令中的无条件转移指令j与之的主要差别在于形成转移目标地址的方式不同。前者依靠寄存器直接寻址方式从寄存器中读取到转移地址,后者则通过伪直接寻址方式形成转移地址。 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/272189
推荐阅读
相关标签
  

闽ICP备14008679号