MIPS32 指令架构

server/2024/9/24 8:08:02/

指令格式

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类型指令


http://www.ppmy.cn/server/20391.html

相关文章

分布式与一致性协议之Paxos算法(二)

Paxos算法 如何达成共识 想象这样一个场景&#xff0c;某地出现突发事件&#xff0c;当地村委会、负责人等在积极研究和搜集解决该事件的解决方案&#xff0c;你也决定参与其中&#xff0c;提交提案&#xff0c;建议一些解决方法。为了和其他村民的提案做区分&#xff0c;你的…

刷机维修进阶教程------MTK字库与分区 三星cpu字库分区说明 麒麟字库分区等相关刷写 分区恢复常识

今天将解析下MTK字库 三星字库 麒麟字库中分区的有关说明。包含 主要分区说明以及关键分区作用。分区表修复 提取。不管是字库更换还是修复,在可能的条件下先备份是操作的常态行为。在高版本安卓机型的当下,数据加密分区的安全性都很高 。有些机型不是单一的靠写入分区就可以…

ROS机器人小车建模仿真

ROS机器人小车建模仿真 引言&#xff1a; ​ 在机器人技术的迅速发展中&#xff0c;仿真技术已成为研究和教育领域的重要工具。通过仿真&#xff0c;我们可以在虚拟环境中测试和验证机器人的设计和行为&#xff0c;无需承担高昂的成本和潜在的风险。本实验从零开始&#xff0c;…

python包里的__init__.py文件里,如果有__all__变量,这个变量用来干什么

__all__ 变量在 Python 包的 __init__.py 文件中用于定义在导入该包时默认导入的模块名称列表。当一个包被导入时&#xff0c;Python 解释器会查找该包的 __init__.py 文件&#xff0c;并检查其中是否定义了 __all__ 变量。如果定义了 __all__ 变量&#xff0c;解释器将只导入 …

Unity打包PC端exe,压缩打包为一个exe文件

目录 一.打包成功 1.打包输出文件 二.压缩输出目录为exe单个文件 1.添加到压缩文件 2.其他设置 1.点击“高级→自压缩选项” 2.修改解压后运行程序 3.设置模式 4.更新 三、生成.exe 一.打包成功 1.打包输出文件 1、一个后缀为 BurstDebugInformation_DoNotShip的文…

OpenHarmony语言基础类库【@ohos.util.List (线性容器List)】

List底层通过单向链表实现&#xff0c;每个节点有一个指向后一个元素的引用。当需要查询元素时&#xff0c;必须从头遍历&#xff0c;插入、删除效率高&#xff0c;查询效率低。List允许元素为null。 List和[LinkedList]相比&#xff0c;LinkedList是双向链表&#xff0c;可以…

编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 编写…

Linux: Netlink 简介

文章目录 1. 前言2. Netlink 范例3. Netlink 简析3.1 Netlink 协议簇注册3.2 创建 用户空间 Netlink 套接字3.3 用户空间 Netlink 套接字 的 绑定3.4 向 内核空间 Netlink 套接字 发消息3.5 从 内核空间 Netlink 套接字 读消息3.5.1 内核空间 Netlink 套接字 向 用户空间 Netli…