当前位置: 首页 > news >正文

【计算机组成与体系结构Ⅱ】MIPS指令系统(实验)

实验2:MIPS指令系统

一:实验目的

  1. 了解和熟悉指令级模拟器。
  2. 熟练掌握MIPSsim模拟器的操作和使用方法。
  3. 熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解。
  4. 熟悉MIPS体系结构。

二:实验要求

采用指令集和流水线操作级模拟器MIPSsim作为实验平台。

三:实验步骤

  1. 阅读MIPSsim模拟器的使用方法,了解MIPSsim的指令系统和汇编语言。
  2. 启动MIPSsim,用鼠标双击MIPSsim模拟器(64位).exe。
  3. 选择“配置”——“流水方式”选项,使模拟器工作在非流水方式下。
  4. 参照MIPSsim使用说明,熟悉MIPSsim模拟器的操作和使用方法。
  5. 以alltest.s为例,分析汇编代码并填写实验表格。
  6. 载入在本模拟器所在的文件夹下的“样例程序”文件夹中的样例程序alltest.s,然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序执行情况,观察CPU中寄存器和存储器的内容的变化,验证分析是否正确。
  7. 按照以上步骤运行并观察branch.s的模拟结果,对实验结果进行分析。

四:实验结果

【1】alltest.s实验表格

如excel文件中的sheet1所示。

【2】branch.s实验表格

如excel文件中的sheet2所示。

【3】回答问题

·模拟器中内存是小端存储还是大端存储,为什么?

小端存储。


以alltest.s中的【BUFFER:.word 300】为例。300 = 012C H,而在内存中可以发现,80H内存单元存储了2C,而81H内存单元存储了01,如下图所示。即数据的低位优先存储在低地址中,符合小端存储的特性。

而大端存储的特性是数据的高位优先存储在低地址中。两种存储方式的存放顺序如下图所示。

·模拟器中alltest的代码ADDIU $r8,$r0,DATA 为什么编译为ADDIU $r8,$r0,124,ADDIU $r8,$r0,BUFFER编译为ADDIU $r8,$r0,128?


DATA所存放的地址是0x0000 007C,7C H = 124。BUFFER所存放的地址是0x0000 0080,80H = 128。具体地址如下图所示。

ADDIU指令为无符号立即值加的指令,功能是rt ← rs + immediate。但是由于DATA和BUFFER是汇编程序中的标签,而不是具体的数值,所以编译器会将标签解析为它们在数据段.data中的地址,即124和128。

·执行到LB $r1,0($r8)时,R1的值为什么是-128,而LW $r1,0($r8)时为128,LBU $r1,0($r8)时为128?

LB指令为取字节的指令,且按有符号数操作,功能是rt ← memory[base + offset]。在LB $r1,0($r8)中,将r8寄存器中1个字节的内容以有符号数的形式取到r1寄存器中,即1000 0000 B,是一个负数,因此r1的值是-128。

LW指令为取字的指令,且按有符号数操作,功能是rt ← memory[base + offset]。在LW $r1,0($r8)中,将r8寄存器中1个字的内容以有符号数的形式取到r1寄存器中,由于64位计算机中1个字是8个字节,即0000 …… 1000 0000 B(共64位),是一个正数,因此r1的值是128。

LBU指令为取无符号字节的指令,功能是rt ← memory[base + offset]。在LBU $r1,0($r8)中,将r8寄存器中1个字节的内容以无符号数的形式取到r1寄存器中,即1000 0000 B,是一个正数,因此r1的值是128。

上述取指令的具体描述如下图所示。

·无符号数80H对应的十进制数为(D

A.96    B.80    C.-128    D.128

80 H = 1000 0000 B

当80H表示无符号数时,所有位均是数位,即结果是2^7 = 128。


当80H表示有符号数时,最高位是符号位,其余位是数位。当符号位等于1时,表示负数;当符号位等于0时,表示正数。数位为000 0000,且表示负数,那么可以分析出它是表示范围内的最小负数而不是0,因为0的补码是唯一的。即结果是-128。

五:实验总结和分析

【1】空指令NOP

在本次实验的汇编程序中,有多行指令使用了空指令NOP。NOP在模拟器中编译后为SLL $r0,$r0,0。SLL指令是按立即值逻辑左移的指令,上述代码的含义为:将r0寄存器中的低32位进行逻辑左移,移动的位数是立即值0,结果按符号位扩展,然后放入r0寄存器中。执行该指令后,模拟器会保持r0寄存器中的值不变,即实际上是一个空操作,只是对PC的值进行了改变。

在本次实验中,NOP指令前面伴有分支指令,例如BEQ指令等。通过在分支指令后加入NOP指令,可以观察到执行分支指令时的PC变化情况,进而判断分支指令所执行的分支内容。具体而言,如果PC指向下一条NOP指令的地址,则表示分支内容为条件不成立后的结果;如果PC指向的不是下一条NOP指令的地址,则表示分支内容为条件成立后的结果。

【2】循环嵌套

    在本次实验中,branch.s汇编程序采用了loop循环,其中包含一段BGTZ  $r5,loop指令。BGTZ指令是大于0转移的指令,上述代码的含义为:如果r5寄存器中的值大于0,则继续loop循环,否则退出loop循环。这与高级语言中的循环结束的判断条件相似。

【3】自陷指令

在本实验中,alltest.s汇编程序在Label4处采用了TEQ $r0, $r0。TEQ指令是等于自陷的指令,上述代码的含义为:如果r0寄存器中的值等于r0寄存器中的值,则陷入陷阱中。在alltest.s中,如果执行到该指令,则表示程序运行完毕,应该结束程序。

其他自陷指令的具体描述如下图所示。

【4】跳转指令

    在本实验中,alltest.s汇编程序在Label3处采用了JALR $r3, $r1。JALR指令是寄存器跳转并链接的指令,上述代码的含义为:无条件转移到r1寄存器所给出的地址,并将返回地址PC+4保存到r31寄存器中。


其他跳转指令的具体描述如下图所示。

【5】分支指令

    在本实验中,alltest.s汇编程序在多处位置采用了分支指令,用于判断转移。如果符合分支指令的条件,则跳转到某个程序标签处;否则执行下一条指令。


跳转指令的具体描述如下图所示。

【6】内存空间变化的情况

在本实验中,只有SW指令会触发内存空间的变化。SW指令是存字指令,其功能为memory[base + offset] ← rt。


其他存指令的具体描述如下图所示。

六:实验意见和建议

首先需要熟悉插件的使用,阅读附件的操作手册。其次需要熟悉MIPS指令的功能,以及汇编代码中所对应的寄存器。最后需要了解PC(程序计数器)的作用是指向下一条需要执行的指令,对指令的执行过程进行合理的分析。

七:附件

【1】alltest.s源文件

# load和store指令

.text

main:

ADDIU $r8, $r0, DATA

LB $r1, 0($r8)

LW $r1, 0($r8)

LBU $r1, 0($r8)

ADDIU $r8, $r0, BUFFER

SW $r1,0($r8)

BEQ $r0, $r0, PROG2

NOP

# 算术运算指令

PROG2:

DADD $r3, $r1, $r2

DMULT $r1, $r2

BEQ $r0, $r0, PROG3

NOP

# 逻辑运算指令

PROG3:

AND $r3, $r1, $r2

ANDI $r3, $r1,0xFFFF0000

BEQ $r0, $r0, PROG4

NOP

# 控制转移指令  

PROG4:

BEQ $r1,$r2,LABEL1

NOP

NOP

LABEL1:

BGEZ $r1,LABEL2

NOP

NOP

LABEL2:

BGEZAL $r1,LABEL3

NOP

NOP

LABEL3:

ADDIU $r1, $r0, LABEL4

JALR $r3, $r1

NOP

NOP

LABEL4:

TEQ $r0, $r0

NOP

# 数据

.data

.align 2

DATA:

.word 128

BUFFER:

.word 300

【2】branch.s源文件

.text

main:

ADDI  $r2,$r0,1024

ADD   $r3,$r0,$r0

ADDI  $r4,$r0,8

loop: 

LW    $r1,0($r2)

ADDI  $r1,$r1,1

SW    $r1,0($r2)

ADDI  $r3,$r3,4

SUB   $r5,$r4,$r3

BGTZ  $r5,loop

ADD   $r7,$r0,$r6

TEQ   $r0,$r0

相关文章:

【计算机组成与体系结构Ⅱ】MIPS指令系统(实验)

实验2:MIPS指令系统 一:实验目的 了解和熟悉指令级模拟器。熟练掌握MIPSsim模拟器的操作和使用方法。熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解。熟悉MIPS体系结构。 二:实验要求 采用指令集和流水线操作级模拟器…...

jsonvue-mobile 联动方式说明。

目录 jsonvue-mobile的联动类型分为两种 一种是命令式的: 另一种是响应式的: 联动场景 场景一:某一个字段的值变化时,同步修改另一个字段的值 命令式: 响应式: 场景一演示效果GIF 场景二&#xff…...

abseil中的微操

给分支预测器的建议 原始代码 以下代码用于实现多线程中只调用一次的效果&#xff0c;这里的if大多数情况下都是false&#xff0c;即已经被调用过了。这里是否被调用过用的是一个std::atomic<uint32_t>的原子变量 template <typename Callable, typename... Args>…...

NLP论文阅读记录 - 2022 | WOS 数据驱动的英文文本摘要抽取模型的构建与应用

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 Construction and Application of a Data-Driven Abstract Extractio…...

虹科新闻丨LIBERO医药冷链PDF温度计完成2024年航空安全鉴定,可安全空运!

来源&#xff1a;虹科环境监测技术 虹科新闻丨LIBERO医药冷链PDF温度计完成2024年航空安全鉴定&#xff0c;可安全空运&#xff01; 原文链接&#xff1a;https://mp.weixin.qq.com/s/XHT4kU27opeKJneYO0WqrA 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 虹科LIBE…...

智能搬运机器人作为一种新型的物流技术

随着物流行业的快速发展&#xff0c;货物转运的效率和准确性成为了企业竞争的关键因素之一。智能搬运机器人作为一种新型的物流技术&#xff0c;已经在许多企业中得到了广泛应用。本文将介绍富唯智能智能搬运机器人在物流行业的应用和优势。 在实际应用中&#xff0c;智能搬运机…...

UI自动化测试工具对企业具有重要意义

随着软件行业的不断发展&#xff0c;企业对高质量、高效率的软件交付有着越来越高的要求。在这个背景下&#xff0c;UI自动化测试工具成为了企业不可或缺的一部分。以下是UI自动化测试工具对企业的重要作用&#xff1a; 1. 提高软件质量 UI自动化测试工具能够模拟用户的操作&am…...

Linux--进程状态与优先级

概念 进程指的是程序在执行过程中的活动。进程是操作系统进行资源分配和调度的基本单位。 进程可以看作是程序的一次执行实体&#xff0c;它包含了程序代码、数据以及相关的执行上下文信息。操作系统通过创建、调度和管理多个进程来实现对计算机系统资源的有效利用。 每个进程…...

如何实现无公网ip固定TCP端口地址远程连接Oracle数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…...

Orchestrator源码解读2-故障失败发现

目录 前言 核心流程函数调用路径 GetReplicationAnalysis 故障类型和对应的处理函数 ​编辑 拓扑结构警告类型 核心流程总结 与MHA相比 前言 Orchestrator另外一个重要的功能是监控集群&#xff0c;发现故障。根据从复制拓扑本身获得的信息&#xff0c;它可以识别各种故…...

REST2SQL是什么?它有什么功能和特性?它值不值得我们去学习?我们该如何去学习呢?

REST2SQL是一种将RESTful API转换为SQL查询的工具或技术。它可以将RESTful API中的请求转换为对数据库的SQL查询&#xff0c;以便从数据库中检索、更新或删除数据。 REST2SQL的工作原理是通过分析RESTful API的请求参数和路径&#xff0c;将其转换为相应的SQL查询语句。这样可…...

Android 实现获取集合中出现重复数据的值和数量

方法一&#xff1a;使用HashMap和HashSet 创建一个HashMap&#xff0c;用于存储集合中的元素及其出现次数。 Map<String, Integer> map new HashMap<>();遍历集合&#xff0c;将每个元素作为键&#xff0c;将其出现次数作为值添加到HashMap中。 for (String it…...

【QT学习十一】QThread

一、引言 在现代软件开发中&#xff0c;多线程编程变得越来越重要&#xff0c;尤其是对于需要处理并发任务的应用程序。Qt C 框架提供了强大的多线程支持&#xff0c;使得开发者能够轻松地创建和管理多线程应用。 在 Qt 中&#xff0c;多线程的实现主要基于 QThread 类。QThrea…...

Mybatis 39_使用MBG生成代码

此2个插件均未晚装成功!!!! 安装 MyBatipse插件 MyBatipse插件 - 开发MyBatis应用的Eclipse插件- 自动完成- 有效性验证- Mapper视图使用MBG MyBatis Generator (MBG):根据底层数据表来自动生成Mapper组件只要两步即可: (1) 提供一个简单的配置文件,告诉MBG连接数据…...

Hudi metadata table(元数据表)

什么是metadata表 Metadata表即Hudi元数据表,是一种特殊的Hudi表,对用户隐藏。该表用于存放普通Hudi表的元数据信息。Metadata表包含在普通Hudi表内部,与Hudi表是一一对应关系。 元数据表的作用 ApacheHudi元数据表可以显著提高查询的读/写性能。元数据表的主要目的是消…...

提高iOS App开发效率的方法

引言 随着智能手机的普及&#xff0c;iOS App开发成为越来越受欢迎的技术领域之一。许多人选择开发iOS应用程序来满足市场需求&#xff0c;但是iOS App开发需要掌握一些关键技术和工具&#xff0c;以提高开发效率和质量。本文将介绍一些关键点&#xff0c;可以帮助你进行高效的…...

MPU机制与实现详解

目录 MPU机制与实现详解 Partition元素-MPU Partition实现元素OSApplication Partition元素-RTE MPU机制与实现详解 1、freedom from interference 此概念来自ISO26262-1&#xff1a;多个元素之间没有可能导致违反安全目标的级联故障&#xff0c;称之为免于干涉。 在左侧的…...

pom文件冲突引起的Excel无法下载

问题一&#xff1a;之前生产环境上可以进行下载Excel的功能突然不能用了 报错提示信息&#xff1a; NoClassDefFoundError: Could not initialize class org.apache.poi.xssf.usermodel.XSSFWorkbook&#xff0c; 在最开始初始化的时候找不到对应的类&#xff0c;虽然我的Libr…...

【HarmonyOS4.0】第十篇-ArkUI布局容器组件(二)

三、层叠布局容器&#xff08;Stack&#xff09; 堆叠容器组件 Stack的布局方式是把子组件按照设置的对齐方式顺序依次堆叠&#xff0c;后一个子组件覆盖在前一个子组件上边。 注意&#xff1a;Stack 组件层叠式布局&#xff0c;尺寸较小的布局会有被遮挡的风险&#xff0c; …...

PLECS如何下载第三方库并导入MOSFET 的xml文件,xml库路径添加方法及相关问题

1. 首先xml库的下载&#xff0c;PLECS提供了一个跳转的链接。 https://www.plexim.com/download/thermal_models 2. 下载一个库&#xff08;以最后一个Wolfspeed为例&#xff0c;属于CREE的SiC MOSFET&#xff09; 下载这个就行&#xff0c;都包含了。不信自己可以试试再下载…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...