【计算机组成原理实验】——实验 MIPS 指令系统和 MIPS 体系结构

实验 MIPS 指令系统和 MIPS 体系结构

一、实验目的

  1. 了解和熟悉指令级模拟器。

  2. 熟练掌握 MIPSsim 模拟器的操作和使用方法。

  3. 熟悉 MIPS 指令系统及其特点,加深对 MIPS 指令操作语义的理解。

  4. 熟悉 MIPS 体系结构。

二、实验平台

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

三、实验内容和步骤

首先要阅读 MIPSsim 模拟器的使用方法(见附录),然后了解 MIPSsim 的指令系统和汇编语言。

  1. 启动 MIPSsim(用鼠标双击 MIPSsim 模拟器(64 位).exe)。

  2. 选择“配置”—>“流水方式”选项,使模拟器工作在非流水方式下。

  3. 参照 MIPSsim 使用说明,熟悉 MIPSsim 模拟器的操作和使用方法。

  4. 以 alltest.s 为例,分析汇编代码并填写excel 表(附件)

  5. 载入样例程序 alltest.s(在本模拟器所在的文件夹下的“样例程序”文件夹中),然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序执行情况,观察 CPU 中寄存器和存储器的内容的变化,验证分析是否正确

四、 回答以下问题:

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

答:小端存储。
以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。
在这里插入图片描述
图片来源:附录B:MIPS使用手册/附录B-MIPS64指令格式和功能

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

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

无符号数 80H 对应的十进制数为()A . 96 B . 80 C . -128 D . 128

答: 无符号数80H(十六进制)转换为十进制是128。因此,正确答案是D. 128。

五、补充

按照以上步骤运行并观察 branch.s 的模拟结果,对实验结果进行分析。

对branch.s的汇编代码分析已经附在excel表中。

六、实验注意

需要阅读附录A-MIPS64指令列表和附录B-MIPS64指令格式和功能,才能在完成实验时理解指令含义。
excel表部分截图
在这里插入图片描述

实验结束
点赞关注收藏,获取更多干货知识~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/868176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通用的职位招聘小程序ui模板

蓝色简单的校园招聘,行业招聘,职位招聘手机小程序页面模板。包含:职位列表、职位详情、基本信息填写、登录、个人主页、消息页面等功能 通用的职位招聘小程序ui模板

洛谷 P3613 学习用map代替大大大数组的好题

题目链接:P3613 【深基15.例2】寄包柜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目截图: 题意分析: 非常简单的存入和取出操作 唯一的 “难点” 在于 数组开不到 a[100007][100007],会暴内存 非常巧妙的引入 map 来解决…

详解Java垃圾回收(GC)机制

一、为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。 二、哪些内…

【Java】了解异常

初始异常 我们平时应该已经接触过一些 “异常” 了,这里列举一些例子。 算术异常: 数组下标越界异常: 访问空指针异常: 所谓异常指的就是程序在 运行时 出现错误时通知调用者的一种机制。 异常的基本用法 捕获异常 try{ 有可能…

Open3D 删除点云中重叠的点(方法一)

目录 一、概述 二、代码实现 三、实现效果 3.1原始点云 3.2处理后的点云 3.3计算结果 一、概述 在点云处理中,重叠点(即重复点)可能会对数据分析和处理的结果产生负面影响。因此,删除重叠点是点云预处理中常见且重要的步骤。…

缺失行处理(R和python)

R(complete.cases) rm(listls()) # 创建一个包含缺失值的数据框 # df <- data.frame( # x c(1, 2, NA, 4), # y c(NA, 2, 3, 4), # z c(1, NA, 3, 3) # ) # # # 使用complete.cases函数筛选包含缺失值的数据行 # missing_rows <- !complete.cases(df) # # # …

Java的垃圾回收机制解说

Java 内存运行时区域中的程序计数器、虚拟机栈、本地方法栈随线程而生灭&#xff1b;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的&#xff08;尽管在运行期会由 JIT 编译器进行一些优化&…

使用vue3-treeselect问题

1.当vue3-treeselect是单选时&#xff0c;使用watch监听绑定value&#xff0c;无法监听到值清空 对照后将:value改为v-model&#xff0c;如图 2.使用vue3-treeselect全部清空按钮如何置空select的值&#xff0c;使用watch监听 多选&#xff1a;pageInfo.officeName(val) {// …

【手写数据库内核组件】0201 哈希表hashtable的实战演练,多种非加密算法,hash桶的冲突处理,查找插入删除操作的代码实现

hash表原理与实战 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 hash表…

【TB作品】51单片机 Proteus仿真 MAX7219点阵驱动数码管驱动

1、8乘8点阵模块&#xff08;爱心&#xff09; 数码管测试程序与仿真 实验报告: MAX7219 数码管驱动测试 一、实验目的 通过对 MAX7219 芯片的编程与控制&#xff0c;了解如何使用单片机驱动数码管显示数字&#xff0c;并掌握 SPI 通信协议的基本应用。 二、实验器材 51…

多项式求和之九(给定程序中函数 fun 的功能是:求出以下分数序列的前 n 项之和,并通过函数值返回 main 函数。)

代码 #include <stdio.h> /********found********/ double fun(int n){double a2,b1,c,s0;while(n>0){n--; /********found********/ssa/b;ca;aab;bc;}return s; } void main(){int n;scanf("%d",&n);printf("%lf\n",fun(n)); }友情提示 1、…

期末上分站——计组(5)

简答题11-21 11、为了提高计算机系统的输入/输出能力&#xff0c;可以在总线的设计与实现中采用哪些方案&#xff1f; 答&#xff1a;1. 提高总线时钟频率 2. 增加数据总线的位数 3. 采用成组数据传送&#xff08;BURST传送&#xff09;方式 4. 采用多总线结构 5. 优化总线传输…

微深节能 煤码头自动化翻堆及取料集控系统 格雷母线

微深节能格雷母线高精度位移测量系统是一种先进的工业自动化位置检测解决方案&#xff0c;它被广泛应用于煤码头自动化翻堆及取料集控系统中&#xff0c;以实现对斗轮堆取料机等大型机械设备的精准定位和自动化控制。 系统原理简述&#xff1a; 格雷母线系统的工作原理基于电磁…

EOF 为 (End Of File) 的缩写 , 值通常为 -1

EOF是一个计算机术语&#xff0c;为 End Of File 的缩写 EOF 的值通常为 -1 EOF 的值通常为 -1&#xff0c;但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。 与 feof 与 feof C语言中&#xff0c;当把数据以二进制形式存放到文件中时&#xff0c;就会有…

阿里云ecs服务器,nginx多域名多项目部署教程,含本地部署教程

nginx多域名部署项目 本地部署线上部署 一、本地部署 第一步&#xff1a; winr 输入drivers 打开hosts文件&#xff0c;编辑 加行 127.0.0.1 自定义域名 … 第二步&#xff1a; 下载 nginx 安装好以后 打开ngin安装目录&#xff0c;选择nginx.conf 打开 #user Administ…

前端面试题10(js多位数组变一维数组)

1. 使用concat()和递归 function flatten(arr) {return arr.reduce((acc, val) > Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []); }let multiDimArray [[1, 2, [3]], 4]; let flatArray flatten(multiDimArray); console.log(flatArray); // 输…

C++ STL IO流介绍

目录 一:IO流的继承关系: 二:输入输出功能 1. 基本用法 2. 格式化输入 3.非格式化输入 4. 格式化输出 三:流 1. 字符流 2. 向字符流中写入数据 3. 从字符流中读出数据 4. 清空字符流 5.完整的例子 四:文件流 一:IO流的继承关系: 类含义basic_streambuf 读取…

动态规划|剑指 Offer II 093. 最长斐波那契数列

如果数组 arr 中存在三个下标 i、j、k 满足 arr[i]>arr[j]>arr[k] 且 arr[k]arr[j]arr[i]&#xff0c;则 arr[k]、arr[j] 和 arr[i] 三个元素组成一个斐波那契式子序列。由于数组 arr 严格递增&#xff0c;因此 arr[i]>arr[j]>arr[k] 等价于 i>j>k。 把这道题…

【qt】TCP的监听 (设置服务器IP地址和端口号)

TCP监听是在自己的IP地址上进行的。 当一个TCP服务器程序启动时&#xff0c;它会绑定到一个特定的IP地址和一个端口号上&#xff0c;以便可以接收来自该IP地址和端口号的传入连接请求. 所以我们要先来获取主机的IP地址和设置端口号. 注意: 服务器程序无法任意设置IP地址&…

Java(七)——多态

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…