MIPS指令集(一)基本操作
目录
计算机硬件的操作数
存储器操作数
常数或立即数操作数
有符号数和无符号数
指令的格式
逻辑操作
决策指令
循环
计算机硬件的操作数
先从一条C语句入手
a = b + c;
将其翻译为MIPS
add a, b, c
其中a,b,c就是这条指令的操作数。表示将b与c的和放入a中。
加法指令只有三个操作数,也就是说只能一次完成两个数相加,下面的指令序列会完成四个数相加
add a, b, c
add a, a, d
add a, a, e
只能一次完成两个数相加体现了硬件简单性的设计原则。下面会知道,使用指令实际上不会写诸如a,b,c之类的字符,而是使用寄存器。
与高级语言不同,MIPS的算术运算被要求操作数只能来自寄存器。寄存器是构成计算机的基本单元。在MIPS体系结构中寄存器大小为32位,同时拥有32个寄存器。在MIPS体系结构中也常把32位称作一个字(word)。
MIPS在使用寄存器时,用'$'后跟两个字符表示寄存器。用$s0,$s1...表示类似C语言中的变量所对应的寄存器,用$t0,$t1...表示临时变量对应的寄存器。
a = (b + c) - (d + e)
以该C赋值语句为例,将其翻译为MIPS指令,假设s0,...s4分别对应存储了a,..e
add $t0, $s1, $s2 #b+c的结果存在临时变量寄存器t0中
add $t1, $s3, $s4 #同上
add $s0, $t0, $t1
MIPS中#后是注释,注意这种语言一行只有一条指令,且注释是在一行的末尾结束
存储器操作数
高级语言中常有数组和结构体,而且往往大小不止一个字,这种数据结构就会存储在内存中,而内存就是存储器,磁盘更习惯叫做io设备。
由于MIPS算术指令只能操作寄存器,因此必须有一种手段,能将内存中的数据加载到寄存器中。
这些指令叫做数据传输指令。
为了访问内存中的字,必须给出地址。内存中的地址是按字节编排的,也就是说每个相邻的地址相差1
图中每一块大小一个字节。
将数据从内存加载到寄存器通常称为取数(load)指令,实际MIPS取数指令助记符是lw,操作数有三个,第一个表示要把数据存到哪个寄存器,第二个是地址偏移量(单位为字节,要求是常数),第三个是基址寄存器。
a = b + A[8];
假设a存在s0,b存在s1,A地址存在s2。
lw $t0, 32($s2) #一个字大小为32位,也就是4字节,8个字就得偏移32字节
add $s0, $s1, $t0
MIPS字的起始地址是4的倍数,这叫做对齐限制。字在内存中如图存储。
MIPS还有一类指令是将寄存器中的数据复制到存储器中,叫做存数(store)指令。MIPS记作sw,用法与lw类似,只是第一个操作数代表要从哪个寄存器中得到数据。
常数或立即数操作数
仅仅从已经介绍的指令来看,要使用常数,只能从存储器取出(lw),如要将a+4
lw $t0, AddrConstant($s1)#AddrConstant为某一常数偏移量,将4加载到t0
add $s0, $s0, $t0
如果要避免使用取数指令,可使用addi指令
addi $s0, $s0, 4
像这种加法叫加立即数(add immediate),常数操作数出现频率高,像这种带立即数的指令,比从存储器种取值快很多,能耗也较低。
常数0可简化指令集。例如,数据传输指令可视为操作数为0的加法。MIPS将$zero恒置为0,编号也为0
有符号数和无符号数
有符号数在MIPS中用补码表示。需要注意的是,当不满32位的数被存储时,高位会补上符号位。
像0100,存在寄存器中
00000000 00000000 00000000 00000100
1100,存在寄存器中
11111111 11111111 11111111 11111100
MIPS有一些末尾为u的指令操作无符号数,具体后面可以见到。
指令的格式
指令以二进制的形式存储,现在我们可以把指令翻译成二进制。
所有的寄存器会被映射为数字,$s0~$s7映射到16~23, $t0~$t7映射到8~15。
add $t0, $s1, $s2
以该指令为例,先将其翻译为十进制,再转为二进制。
机器指令分为多个字段,本例第一个和最后一个告诉MIPS计算机要执行加法操作,第二个和第三个表示源操作数寄存器,第四个字段表示存放结果的寄存器,第五个字段没有用到,故置为0。
截取《计算机组成与设计 硬件/软件接口》中相关说明
这种指令格式在某些场景可能不适用,如lw指令需要传入偏移量,5位是不够用的,这时,想要增加位数,但是MIPS的设计是,所有指令的长度都相同,这样,就会采取折中方案:所有指令长度相同,但不同类型指令采用不同指令格式。如上述指令就是R型。另一种是I型,用于传输立即数。
在这种I型格式中,立即数大小仍然有限制。可以看到这种格式下,很难增加寄存器的数量,因为寄存器序号会使得rs,rt字段增加位。
逻辑操作
一张图即可解决,用法也与其他指令类似。
决策指令
计算机的运算能力强大,但计算机与计算器的差别在于计算机能执行决策指令,也就是条件分支指令。MIPS有两条类似C语言 if和 go to的指令
beq regsiter1, register2, L1
表示若寄存器register1 和register2的值相等,跳转到L1标签。beq(branch if equal),相等则分支。
bne regsiter1, register2, L1
表示若寄存器register1 和register2的值不等,跳转到L1标签。bne(branch if not equal),不等则分支。
还需介绍另一种分支指令——无条件分支
j L1
j为jump的缩写
if (i == j) f = g + h;
elsef = g - h;
现在将该C语句编译为MIPS指令。
假设i存在s0,j存在s1,f,g,h分别存在s2,s3,s4
bne $s0, $s1, Else
add $s2, $s3, $s4
j Exit
Else: sub $s2, $s3, $s4
Exit:
循环
条件分支指令可以实现循环
while (save[i] == k)i += 1;
假设i和k存在s3和s5中,save的基址存在s6中。
Loop: sll $t1, $s3, 2 #需要将i×4
add $t1, $s6, $t1
lw $t0, 0($t1) #要求偏移量为常数
bne $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
Exit:
相关文章:
MIPS指令集(一)基本操作
目录 计算机硬件的操作数 存储器操作数 常数或立即数操作数 有符号数和无符号数 指令的格式 逻辑操作 决策指令 循环 计算机硬件的操作数 先从一条C语句入手 a b c; 将其翻译为MIPS add a, b, c 其中a,b,c就是这条指令的操作数。表示将b与c…...
半导体数据分析(二):徒手玩转STDF格式文件 -- 码农切入半导体系列
一、概述 在上一篇文章中,我们一起学习了STDF格式的文件,知道了这是半导体测试数据的标准格式文件。也解释了为什么码农掌握了STDF文件之后,好比掌握了切入半导体行业的金钥匙。 从今天开始,我们一起来一步步地学习如何解构、熟…...
在window环境下安装openssl生成钥私、证书和签名,nodejs利用express实现ssl的https访问和测试
在生成我们自己的 SSL 证书之前,让我们创建一个简单的 Express应用程序。 要创建一个新的 Express 项目,让我们创建一个名为node-ssl -server 的目录,用终端cmd中进入node-ssl-server目录。 cd node-ssl-server 然后初始化一个新的 npm 项目…...
C++中类和对象的细节原理
文章目录 一、C中的构造函数二、C中的析构函数三、两者的配合与注意事项四、C中的静态成员变量五、C中的静态成员函数六、C中普通成员函数和静态成员函数的区别七、C中的const成员变量八、C中的const 成员函数九、C中构造函数的初始化列表十、C中的浅拷贝操作十一、C中的深拷贝…...
解决并发情况下调用 Instruct-pix2pix 模型推理错误:index out of bounds 问题
解决并发情况下调用 Instruct-pix2pix 模型推理错误:index out of bounds 问题 背景介绍 在对 golang 开发的 图像生成网站 进行并发测试时,调用基于 Instruct-pix2pix 模型和 FastAPI 的图像生成 API 遇到了以下错误: Model inference er…...
OpenXLSX开源库在 Ubuntu 18.04 的编译、交叉编译与使用教程
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
windows和LINUX下校验文件的哈希值(MD5、SHA256)
可以通过两个文件的哈希值来对比两个文件是不是一模一样,有没有缺失 1、windows CertUtil -hashfile 文件路径 MD5 CertUtil -hashfile 文件路径 SHA256 2、Liunx 校验当前目录下所有文件 sha256sum . 校验指定文件名 sha256sum 文件名...
〔 MySQL 〕视图
以下是上述文章的目录: 一、视图概述 视图的定义 二、基本使用 创建视图查询视图修改视图影响基表查询验证删除视图 三、视图规则和限制 命名规则数量限制索引和触发器安全性ORDER BY规则与表一起使用 四、实战案例 牛客实战OJ修改基表影响视图查询验证删除…...
嵌入式硬件产品:CC254x 蓝牙升级
目录 固件更新 OAD原理 作者简介 固件更新 支持固件更新的CC2541芯片中, 包括三段代码: Boot Image Manager(BIM)、ImageA、Im...
Drag and Drop API 实现 JavaScript 中的原生拖放功能
理解什么是拖放,我们先做个简单的实验。鼠标移动到页面左上角“CSDN” 图片上方,点击左键不放开,拖动鼠标,发现图片随着鼠标移动,松开鼠标时,图片消失。 一、拖放(Drag and Drop)有…...
人脸检测的若干思考!!!
1.目前主要有人脸检测方法分类? 主要包含两类:传统人脸检测算法和基于深度学习的人脸检测算法。 传统人脸检测算法主要可以分为4类: 基于知识、模型、特征和外观的人脸检测方法; 基于深度学习的方法:基于级联CNN的人脸…...
【时间序列分析】斯皮尔曼(Spearman)相关系数理论基础及python代码实现
文章目录 1. 斯皮尔曼相关系数1.1 公式定义1.2 计算过程1.3 计算示例1.4 注意事项(当有重复值时) 2. 优缺点2.1 优点2.2 缺点 3. 适用场景4. Python代码实现4.1 调用scipy库 5 思考5.1 什么是单调关系?与线性关系的区别是什么?5.2…...
python | linux | ModuleNotFoundError: No module named ‘WFlib‘ |找不到模块
问题: (base) beautyby521-7:~/Website-Fingerprinting-Library-master$ bash scripts/NetCLR.sh Traceback (most recent call last):File "/home/beauty/Website-Fingerprinting-Library-master/exp/pretrain.py", line 8, in <module>from WFli…...
B-TREE详解
B - tree 的详细结构特点 节点结构细节 关键字存储方式:B - tree 节点中的关键字是按照一定顺序排列的,这个顺序可以是升序或者降序。例如,在一个以数字为关键字的 B - tree 中,关键字从左到右依次增大。每个关键字都有一个分隔作…...
Kotlin复习
一、Kotlin类型 1.整数 2.浮点 显示转换: 所有数字类型都支持转换为其他类型,但是转换前会检测长度。 toByte(): Byte toShort(): Short toInt(): Int toLong(): Long toFloat(): Float toDouble(): Double 不同进制的数字表示方法(为了提高…...
批处理文件的创建与编辑方法
批处理命令保存在以BAT为扩展名地文本文件中,因此可以使用任何字处理软件创建、编辑批处理文件,如Word、WinHex、Editpuls等。 案例一 使用copy con命令创建批处理文件 ”copy con“是一个功能简单、易于使用的创建文本文件命令,命令中”con…...
Spring Boot集成Kafka:最佳实践与详细指南
文章目录 一、生产者1.引入库2.配置文件3.配置类PublicConfig.javaMessageProducer.java 4.业务处理类 三、消费者1.引入库2.配置类PublicConfig.javaMessageConsumer.java 3.业务类 一、生产者 1.引入库 引入需要依赖的jar包,引入POM文件: <depend…...
maven 中 有历史模块缓存 怎么清
Maven 在运行时会将一些数据保存在本地仓库中,以加快构建过程。其中一部分是项目的依赖项,还有就是“历史模块缓存”。这些缓存信息保存在本地仓库的 _remote.repositories 文件中。 解决方案: 手动删除缓存文件: 进入你的Maven本…...
云计算HCIP-OpenStack04
书接上回: 云计算HCIP-OpenStack03-CSDN博客 12.Nova计算管理 Nova作为OpenStack的核心服务,最重要的功能就是提供对于计算资源的管理。 计算资源的管理就包含了已封装的资源和未封装的资源。已封装的资源就包含了虚拟机、容器。未封装的资源就是物理机提…...
【信息系统项目管理师-论文真题】2015下半年论文详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论题一:大项目或多项目的成本管理解题思路写作要点论题二:项目的采购管理解题思路写作要点论题一:大项目或多项目的成本管理 随着移动互联网、物联网、云计算、大数据等新一代信息技术的广泛应用,我国目前…...
C# 面试中常见递归算法
前言 今天我们主要总结一下C#面试中常见递归算法。 C#经典十大排序算法(完结) C#递归算法计算阶乘的方法 一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。180…...
qemu源码解析【02】qom基本概念
目录 qemu源码解析【02】qom基本概念参考资料基本数据结构TypeImplObjectClassObjectTypeInfo qemu源码解析【02】qom基本概念 参考资料 https://blog.csdn.net/u011364612/article/details/53485856qemu中为了模拟各种虚拟设备和总线,采用了面向对象的思想&#…...
C++算法第八天
本篇文章我们继续学习c算法 目录 第一题 题目链接 题目展示 代码原理 代码编写 第二题 题目链接 题目展示 代码原理 代码编写 第三题 题目链接 题目展示 代码原理 代码编写 第一题 题目链接 69. x 的平方根 - 力扣(LeetCode) 题目展示…...
大语言模型的常用微调方法
文章目录 数据构造与清洗数据构造方法1.基于 Self-Instruct 方法的数据构造2.面向结构化知识的数据构造 数据清洗方法1.IFD 指标法2. MoDS 方法 2.2 分词器构造2.2.1 分词器概述BPE 分词器WordPiece 分词器Unigram 分词器 2.3 大型语言模型的微调方法前缀调优提示调优P-Tuning …...
安卓获取所有可用摄像头并指定预览
在Android设备中,做预览拍照的需求的时候,我们会指定 CameraSelector DEFAULT_FRONT_CAMERA前置 或者后置CameraSelector DEFAULT_BACK_CAMERA 如果你使用的是平板或者工业平板,那么就会遇到多摄像头以及外置摄像头问题,简单的指…...
Jwt和Session的区别和优缺点
目录 一、Authentication和Authorization的区别 二、用户认证的两种主流方法 ① 、基于session认证流程如下: ②、基于token(令牌)用户认证如下: 三、区别和优缺点 JWT的优点: JWT的缺点: 安全性 …...
如何使用 Python 读取和写入 CSV 文件?
在Python中,处理CSV文件是一项常见的任务,通常用于数据交换和数据存储。 Python的标准库csv模块提供了一种方便的方式来读取和写入CSV文件。 下面我将详细介绍如何使用Python的csv模块来读取和写入CSV文件,并提供一些实际开发中的建议和注意…...
FR2012富芮坤PMU:设置PMU GPIO为输入读取状态;在睡眠功能中读取IO;PMU GPIO设置唤醒源中断
从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...
私有云dbPaaS为何被Gartner技术成熟度曲线标记为“废弃”?
当云计算席卷而来,基于云基础设施的数据库部署也改变了数据库。在传统的私有化部署(On-premises)和公有云部署(Public Cloud)之间,不断融合的混合IT(Mixed IT)形式成为最常见的企业级…...
RabbitMQ 高级特性——延迟队列
文章目录 前言延迟队列延迟队列的概念TTL 死信队列模拟延迟队列设置队列的 TTL设置消息的 TTL 延迟队列插件安装并且启动插件服务使用插件实现延迟功能 前言 前面我们学习了 TTL 和死信队列,当队列中的消息达到了过期时间之后,那么这个消息就会被死信交…...
Perl 引用
Perl 引用 Perl,作为一种灵活而强大的编程语言,广泛用于系统管理、网络编程、GUI开发等领域。在Perl编程中,引用(References)是一个核心概念,它允许变量引用其他数据,从而创建复杂的数据结构&a…...
llama2——微调lora,第一次参考教程实践完成包括训练和模型
前言:磕磕绊绊,不过收获很多,最大的收获就是解决报错error的分析方法和解决思路 1、首先,我参考的是这篇博客:怎样训练一个自己的大语言模型?全网最简单易懂的教程!_开源模型训练出一个语言模型…...
【人工智能数学基础篇】——深入详解矩阵分解:奇异值分解(SVD)与主成分分析(PCA)在数据降维与特征提取中的应用
目录 1. 引言 2. 矩阵分解概述 2.1 矩阵分解的意义 3. 奇异值分解(SVD) 3.1 定义与数学基础 3.2 SVD 的性质 3.3 SVD 在数据降维中的应用 3.4 示例代码:使用 SVD 进行图像压缩 3.5 结果分析 4. 主成分分析(PCA࿰…...
C++常见面试题-初级2
1. C和C有什么区别? C是面向对象的语言,而C是面向过程的语言;C引入new/delete运算符,取代了C中的malloc/free库函数;C引入引用的概念,而C中没有;C引入类的概念,而C中没有࿱…...
R square 的计算方法和一点思考
模型的性能评价指标有几种方案:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(平均平方误差)、R2_score 其中,当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏。这就需要用到R2_score࿱…...
梳理你的思路(从OOP到架构设计)_简介EIT造形
目录 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码结构 <基类/子类>代码结构的变形 2、 从<基类/子类>结构到EIT造形 3、 EIT造形的基本形与变形 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码…...
梳理你的思路(从OOP到架构设计)_认识EIT造形与内涵
目录 1、 认识类(Class)与内涵 2、 认识EIT造形与内涵 EIT造形: 类造形的组合编辑 复习EIT的基本形与变形编辑 不同内涵 EIT造形 1、 认识类(Class)与内涵 回顾 类(Class)是比较小的造形 各种不同内涵,可以透过类(Class)的形式(Form)来呈现出…...
【FTP】FTP基础知识点
文章目录 一、概述二、 工作原理2.1 两个连接2.2 安全性 三、代码实现:1. 选择合适的库2. 连接配置和初始化3. 连接状态检查4. 重连机制5. 文件操作6. 安全性7. 资源管理 参考: 一、概述 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机…...
排序算法(7):堆排序
问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 堆排序 堆排序是一种基于堆数据结构的排序算法。堆是一个近似完全二叉树的结构,即除了最后一层外,每一层都必须填满,且最后一层从左往右填充。 堆可以分为大根堆和小根堆。在大根堆中&…...
BERT模型入门(6)语言建模
文章目录 自回归语言建模自编码语言建模 BERT模型在以下两个任务上进行预训练: (1)掩蔽语言建模 (2)下一句预测 让我们逐一了解这两种预训练策略是如何工作的。在介绍掩蔽语言模型任务之前,首先让我们了…...
RNN LSTM Seq2Seq Attention
非端到端: data -》 cleaning -》 feature Engining (70%-80%工作 设计特征)-》 分类器 -》预测 端到端 End-to-End: data -》 cleaning -》Deep learning(表示学习,从数据中学习特征) -》…...
go语言使用websocket发送一条消息A,持续接收返回的消息
在Go语言中实现一个WebSocket客户端,可以使用gorilla/websocket这个非常流行的库来处理WebSocket连接。下面是一个简单的示例,展示了如何创建一个WebSocket客户端,向服务器发送消息"A",并持续接收来自服务器的响应。 首…...
音频进阶学习八——傅里叶变换的介绍
文章目录 前言一、傅里叶变换1.傅里叶变换的发展2.常见的傅里叶变换3.频域 二、欧拉公式1.实数、虚数、复数2.对虚数和复数的理解3.复平面4.复数和三角函数5.复数的运算6.欧拉公式 三、积分运算1.定积分2.不定积分3.基本的积分公式4.积分规则线性替换法分部积分法 5.定积分计算…...
沟通的艺术,学会转移矛盾
我的一位好友,资深项目经理,同时也是我公益课程的热心志愿者,最近向我倾诉了他在团队沟通上的挑战。 他发现,尽管辅导学员时感到轻松愉快,但与自己团队成员的沟通却充满挫折。 我询问了他的沟通方式,他解释…...
测评|携程集团25年社招在线测评北森题库、真题分析、考试攻略
携程集团社招入职测评北森题库主要考察以下几个方面: 1. **言语理解**:这部分主要测试应聘者运用语言文字进行思考和交流、迅速准确地理解和把握文段要旨的能力。 2. **资料分析**:包括文字题和图表题,考察应聘者快速找出关键信息…...
C++(进阶) 第4章 map和set的使⽤
C(进阶) 第4章 map和set的使⽤ 文章目录 前言一、序列式容器和关联式容器二、set1. insert2.迭代器遍历3.范围for4.erase5.count6.lower_bound和upper_bound 三、multiset总结 前言 上一篇博客写了二叉搜索树,这一篇博客会在上一篇博客原来的上在深入介…...
数独游戏app制作拆解(之三)——数字候选区实现
所谓的数据候选区就是这个: 数字候选区功能及实现: 说明:这部分其实也是textview. 本区功能: 一、实现数字显示到显示区。点击显示区选定某个格子后,再点击这里的数字,会在格子内显示相应的数字。在编辑…...
数据结构——排序
*排序属于数据的运算 1、定义:将一组杂乱无章的数据按一定规律顺次排列一起,即将无序序列排成一个有序序列的运算。 (如果参加排序的数据结构包含多个数据域,那么排序往往是针对其中某个域而言) 2、排序的应用十分广泛:程序中间接应用(二分查找、最短路径、最小生成树…...
制造业4.0:AI与机器人如何重塑生产线
引言:从传统到未来的转型 在轰鸣的生产线上,传统制造业曾以规模化生产和成本效益为核心竞争力,推动了全球工业化进程。然而,面对现代市场的多样化需求和激烈竞争,这种模式正暴露出越来越多的局限性:产能过剩…...
Fastdfs V6.12.1集群部署(arm/x86均可用)
文章目录 一、 Fastdfs 介绍二、部署 信息三、步骤tracker/storage 机器的 compose 内容storage 机器的 composetracker 与 storage 启动目录层级与配置文件测试测试集群扩容与缩减注意事项 一、 Fastdfs 介绍 FastDFS 是一款高性能的分布式文件系统,特别适合用于存…...