MIPS32 指令架构

指令格式

R 类型

在这里插入图片描述

说明: 用于寄存器和寄存器操作

参数说明:

  • Op: 指令操作码
  • Rs: 第一个源操作数寄存器号,参与运算使用
  • Rd: 目的操作数寄存器号,保存结果使用
  • Shamt: 位偏移量,仅在位移指令使用,在此直接置0
  • Func: 指令函数码,用于选择Op操作中的具体函数

例子:

  • 比如加法运算,在指令操作码中,指出它是算术运算;在指令函数码中,指出它是算术运算中的加法运算
  • $Rd = $Rs + $Rt

I类型

在这里插入图片描述

说明:

  • 用于短立即数和内存载入指令load操作
  • 立即数,顾名思义,就是可以立即使用的数,即在指令中就给了具体的数据,而不用先给出寄存器号到寄存器中去找

参数说明:

  • Op: 指令操作码
  • Rs: 第一个源操作数寄存器号,参与运算使用
  • Rt: 第二个源操作数寄存器号,参与运算使用
  • 16位立即数: 作为数据,参与运算使用

J型指令

在这里插入图片描述

说明: 用于无条件跳转

参数说明:

  • Op: 指令操作码
  • 26位地址数: 作为地址,参与寻址使用

and、or、xor、nor(R类型)

图例

在这里插入图片描述

and 例子

当功能码是6’b100100时,表示是and指令,逻辑"与"运算

指令用法: add rd, rs, rt

指令作用:

  • rd <- rs AND rt 。将地址为rs 的通用寄存器的值与地址为rt的通用寄存器的值进行逻辑"与"运算
  • 运算结果保存到地址为rd的通用寄存器中

or 例子

当功能码是 6’b100101时,表示是or指令,逻辑"或"运算

指令用法: or rd, rs, st

指令作用:

  • rd <- rs OR rt, 将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行逻辑"或"运算
  • 运算结果保存到地址为rd的通用寄存器中

xor 例子

当功能码是6’b100110,表示是xor指令,异或运算

指令用法: xor rd, rs, rt

指令作用:

  • rd <- rs XOR rt, 将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行逻辑"异或"运算
  • 运算结果保存到地址为rd的通用寄存器中

nor 例子

当功能码是6’b100111时,表示是nor指令,或非运算

指令用法: nor rd, rs, rt

指令作用:

  • rs <- rs NOR rt,将地址为rs的通用寄存器的值,与地址为rt的通用寄存器的值进行逻辑"或非"运算
  • 运算结果保存到地址为rd的通用寄存器中

andi、xori指令 (I类型)

图例

在这里插入图片描述

andi 例子

当指令码是 6’b001100,表示是andi指令,逻辑"与"运算

指令用法: andi rt,rs, immediate

指令作用:

  • rd <- rs AND zero_extended(immediate)
  • 将地址为rs的通用寄存器的值与指令中立即数进行零扩展后的值与指令中立即数进行零扩展后的值进行逻辑“与”运算
  • 运算结果保存到地址为rt的通用寄存器中

xori 例子

当指令码是6’b001110,表示xori指令,异或运算

指令用法: xori, rt, rs, immediate

指令作用:

  • rs <- rs XOR zero_extended(immediate)
  • 将地址为rs的通用寄存器的值与指令中立即数进行零扩展后的值进行逻辑"异或"运算
  • 运算结果保存到地址为rt的通用寄存器

lui 指令(I类型)

图例

在这里插入图片描述

lui 例子

依据指令中第26 ~ 31bit指令码的值是否为6’b001111,从而判断是否是lui指令

指令用法: lui rt, immediate

指令作用:

  • rt <- immediate || 0 ^ 16
  • 将指令中的16bit立即数保存到地址为rt的通用寄存器的高16位
  • 另外,地址为rt的通用寄存器的低16位使用0填充

sll、sllv、sra、srav、srl、srlv指令(R类型)

图例

在这里插入图片描述

sll 例子

当功能码是6’b000000,表示是sll指令,逻辑左移

指令用法: sll rd, rt, sa

指令作用:

  • rd <- rt << sa(logic), 将地址为rt的通用寄存器的值向左移sa位,空出来的位置使用0填充
  • 结果保存到地址为rd的通用寄存器中

srl 例子

当功能码事 6’b000010, 表示srl指令,逻辑右移

指令用法: srl rd, rt, sa

指令作用:

  • rd <- rt >> sa(login), 将地址为rt的通用寄存器的值向右移sa位,空出来的位置使用0填充
  • 结果保存到地址为rd的通用寄存器中

sra 例子

当功能码是 6’b000022,表示sra指令,算术右移

指令用法: sra rd, rt, sa

指令作用:

  • rd <- rd >> sa(arithmetic) ,将地址为rt的通用寄存器的值向右移sa位,空出来的位置使用rt[31]的值填充
  • 结果保存到地址为rd的通用寄存器中

sllv 例子

当功能码是 6’b000100, 表示sllv指令,逻辑左移

指令用法: sllv rd, rt, rs

指令作用

  • rd <- rt << rs[4:0](logic), 将地址为rt的通用寄存器的值向左移位,空出来的位置使用0填充
  • 结果保存到地址为rd的通用寄存器中
  • 移位位数由地址为rs的寄存器值的第0~4bit确定

srlv 例子

当功能码 6’b000110, 表示是srlv指令,逻辑右移

指令用法: srlv rd, rt, rs

指令作用:

  • rd <- rt >> rs[4:9](logic),将地址为rt的通用寄存器的值向右移位,空出来的位置用0填充
  • 结果保存到地址为rd的通用寄存器中
  • 移位位数由地址为rs的寄存器的第0~4bit

srav 例子

当功能码是 6’b000111,表示是srav,算术右移

指令用法: srav rd, rt, rs

指令作用:

  • rd <- rt >> rs[4:0](arthmetic) ,将地址为rt的通用寄存器的值向右移位,空出来的位置使用rt[31]填充
  • 结果保存到地址为rd的通用寄存器中
  • 移位位数由地址为rs的寄存器值的第0~4bit确定

nop、ssnop、sync、pref指令

图例

在这里插入图片描述

nop、ssnop、sync 这3条指令都是R类型指令,并且 指令码都是 6’b000000,都是SPECIAL 类

pref 属于 J类型指令

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值