HNU-计算机系统-实验1-PrototypeSystemLab

news2025/1/19 2:35:13

《计算机系统》

原型机实验报告

班级:计科21XX

学号:20210801XXXX

姓名:wolf

 

目录

1 实验项目一

1.1项目名称

1.2实验目的

1.3实验资源

2 实验任务

2.1原型机I

2.1.1练习内容

2.1.2思考问题

2.2原型机II-扩充指令集

2.2.1练习内容

2.2.2思考问题

3总结

3.1实验中出现的问题

3.2心得体会

1.实验项目一

1.1项目名称

原型机I

1.2实验目的

  1. 了解冯诺伊曼体系结构;
  2. 理解指令集结构及其作用;
  3. 理解计算机的运行过程,就是指令的执行过程,并初步掌握调试方法。
  4. 理解计算机的运行过程,对指令集进行修改

1.3实验资源

(1)教材中冯诺伊曼体系的相关内容;

(2)课程《最小系统与原型机I》。

2.实验任务

2.1原型机I

2.1.1练习内容

(1)按照上述的实验步骤,完成相关操作;

①打开与初始化,认识帮助界面

②逐步运行至判断跳转指令,

指令4 1 R2将累加步长1存放在R2内;

此后指令2 R0 R1,这步每次将R0累加至R1,其中R1存放累加结果,也就是最终结果;

指令3 R2 R0是计算下一个需要累加的数并存放在R0内。

③判断跳转

由于上一步的减法运算结果不为0,故R3=1,满足跳转条件,程序回到之前重复累加计算。

④多次运行si 3跳过循环

 

⑤判断跳转跳出循环,输出结果

此时由于R3=0,不符合跳转回循环的条件,故继续执行下一步,即跳出循环。

然后将结果传输回内存中,并输出结果。

 

(2)在目录下还有2.config3.config,其对应的指令代码文件分别为b.txtc.txt,请运行并调试,并对这些代码所做的工作进行解释;

Ⅰ对于b.txt

①运行调试

范例1:A=3,B=5

到上一步为止,进行的是A和B 的比较并且已经比较出结果

 

这里是将较大结果输出的过程

范例2:A=7,B=4

②工作解释

先后输入两个数A和B,比较A与B的大小并输出较大的数

下面给出逐步解释:

指令

解释

1

1

输入A,存储在R0

2

5 R0 0000

将A存储在地址0000

3

5 R0 R1

将A转移至R1

4

1

输入B

5

5 R0 0001

将B存储在0001

6

3 R1 R0

A与B作差,生成R3

7

6 3

若B>A,跳转至10

8

5 0000 0010

A>B,将A传输给0010

9

7 2

A>B,跳转至11

10

5 0001 0010

A<B,将B传输给0010

11

5 0010 R0

将0010传输给R0,也就是较大的数

12

8 R0

输出结果

13

0

停机

Ⅱ对于b.txt

①运行调试

 

②工作解释

这段代码做的是一个整除的工作,通过不断模拟减法与计数来统计最终的结果

2.1.2思考问题

  1.   如果基于这些指令实现两个整数的乘法与除法?

①实现乘法:

用到R0、R1、R2。对于A*B的计算,选定A与B的较小值作为计数量,较大值作为基础量。假定A<B,那么原理就是将B自加A次。具体操作如下:

(由于只有三个寄存器可用,所以需要涉及到多次从内存中存取,较为繁琐,这里就不写代码了)

R0作为基础量,R1作为结果,R2作为计数量。

R0加到R1上;

R2自减1;

检验R3(R2-1是不是为0),在R3=0时跳出循环

输出结果

②实现整除:

用到R0、R1、R2。对于A/B的计算,原理就是多次将A-B,但保证A>0,计数结果即为答案。具体操作如下:

(由于只有三个寄存器可用,所以需要涉及到多次从内存中存取,较为繁琐,这里就不写代码了)

循环内

R0为A,R1为B,R2作为计数量。

3 R1 R0;

若R3跳转至:R2自加1并继续循环;

否则跳转结束并输出R2

(2)原型机I的指令集是否完备?如果是,那么如何证明(提示:搜索并阅读“可计算性理论”)?如果不是,那么要增加哪些指令?

原型机I的指令集是不完备的,

比较浅薄地观察可以发现,缺少了一些基本的逻辑指令,比如按位运算指令的

按位与、按位或、按位非、求补、求反这些都无法完成。

2.2原型机II-扩充指令集

2.2.1练习内容

  1. 按照上述的实验步骤,完成相关操作;

①增添代码段

在ExecuteInstruction增加一个判断分支如下

 

②增加一个d.txt文件,其中包括有乘法指令并修改1.config为

4

3

0011

d.txt

③使用make生成可执行文件,

④执行代码,操作过程如下

⑤增加一个e.txt文件,基于原型机I的指令完成两个数的乘法操作,

这里为了节省空间,只演示3*2的运算过程

(2)为原型机II增加整除指令,并基于原型机I的指令写出两数整除的代码,进行对比;

Ⅰ为原型机II增加整除指令

①增添代码段

在ExecuteInstruction增加一个判断分支如下

 

②增加一个f.txt文件,其中包括有除法指令并创建4.config

③使用make生成可执行文件,

④执行代码,操作过程如下

 

Ⅱ基于原型机I的指令写出两数整除的代码

代码及解读如下

1

1

读入被除数A

2

5 R0 00000

将A存入00000

3

1

读入除数B(一直保存在R0中)

4

5 00000 00001

将A存入00001

(此后00001用来保存A被减去n次后剩下的数M)

5

5 00001 R1

将M存入R1

6

3 R0 R1

M减去B,结果存入R1

7

6 2

若M>B(即还能继续减),跳转至9(继续循环)

8

7 7

若M<=B(即不够减了),跳转至15(跳出循环)

9

5 00010 R2

00010中的值存入R2(取出ans)

10

4 1 R3

11

2 R3 R2

ans自加1(即M-B成功了)

12

5 R2 00010

ans存入00010

13

5 R1 00001

(M-B)存入00001,成为新的M

14

7 -9

跳转至5

15

5 00001 R1

将M存入R1

16

5 R0 R2

将B存入R2

17

3 R1 R2

B减去M,结果保存在R0中

18

6 5

若M<B(即不能继续减了,直接输出ans即可)跳转至23

19

5 00010 R2

若M>=B,即还可以再减一次,00010存入R2

20

4 1 R3

21

2 R3 R2

ans自加1

22

5 R2 00010

将R2存入00010

23

5 00010 R1

将00010存入R1

24

8 R1

输出R1

25

0

结束

运行效果:

对比:显然使用模块化的处理会比自己编写程序更为方便,但是使用逐步编写程序的方法也是可以将这个功能实现的。

2.2.2思考问题

(1)原型机I与原型机II完成乘法和除法操作的方式有何不同?

原型机I需要使用现有指令集去编写实现乘法与除法的功能;

而原型机II将乘法与除法操作写入了指令集中,可以直接调用指令完成功能。

(2)在指令集中增加乘法、除法等指令时,原型机中需要增加代码,那么硬件实现上需要增加什么样的部件?

需要增加一个移位寄存器,可以实现移位操作,进而实现乘法与除法的功能。

(3)如果一台计算机只支持加法、减法操作,那么能否计算三角函数,对数函数?(提示:搜索并阅读“泰勒级数展开”等内容)

可以计算三角函数,

对三角函数与对数函数可以进行麦克劳林展开,可以在舍弃无穷小的情况下近似为只含四则运算的运算式,而由模型机I可知乘法与除法可由加法与减法来实现。

综上可知,该计算机可以计算三角函数与对数函数。

(4)对于某个需要完成的功能,如果既可以通过硬件上增加电路来实现,也可以通过其他已有指令的组合来实现,那么如何判断哪一种比较合适?(提示:搜索并阅读RISC与CISC)。

CPU从指令集的特点上可以分为两类:CISC和RISC。

RISC是“精简指令运算集”,CISC就是“复杂指令运算集”。RISC的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。关于RISC与CISC的比较如下

1)RISC更能充分利用VLSI芯片的面积。CISC的控制器大多采用微程序控制,其控制存储器在CPU芯片内所占的面积为50%以上,而RISC控制器采用组合逻辑控制,其硬布线逻辑只占CPU芯片面积的10%左右。

2)RISC更能提高运算速度。RISC的指令数、寻址方式和指令格式种类少,又设有多个通用寄存器,采用流水线技术,所以运算速度更快,大多数指令在一个时钟周期内完成。

3)RISC便于设计,可降低成本,提高可靠性。RISC指令系统简单,故机器设计周期短;其逻辑简单,故可靠性高。

4)RISC有利于编译程序代码优化。RISC指令类型少,寻址方式少,使编译程序容易选择更有效的指令和寻址方式,并适当地调整指令顺序,使得代码执行更高效化。

3总结

3.1实验中出现的问题

在1.1任务中,出现的问题有

  1. 对于指令集的掌握不够牢固,在阅读学习汇编代码的时候需要经常性地查阅指令集来猜测汇编代码的意思,但是通过阅读多个汇编代码并多次练习,已经有所掌握与改善。
  2. 对于汇编代码的含义理解不够到位,由于是第一次阅读汇编代码,对于较为简短的程序还好理解,比方说a.txt和b.txt,但是对于较为长的代码就不是很好理解,比如说c.txt,我还是结合程序运行的情况再加上一些自己的猜测才能大致猜测出写的是一个整除的程序。
  3. 对于ubuntu的操作还不是很熟练。

在1.2任务中,出现的问题有

  1. 直接从老师给的说明文档上复制下来的汇编代码中间有“,”,导致运行失败,这个花费了许多时间才纠正。
  2. 老师给的说明文档上的ExecuteInstruction与模型机上的不配套,需要自行更改为case语句以配套,这一点需要小心。

3.2心得体会

由于上学期数电的学习,对于模型机我有一定的基础,因此第一个实验还是比较好上手的。但是ubuntu这个崭新的环境还是给我的模型机实验带来了一些挑战。所幸按照老师给的说明文档所铺设的梯度,在一次一次的使用i r查看寄存器值与使用x 3 0000查看内存地址的值的情况下,我对于汇编程序的思想与结构还是有了更为深入的了解。

总的感受就是,这是一门有趣的课程,但是需要花费时间与精力才能学习好。这是一门好玩的学科,也值得花费更多尝试。

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

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

相关文章

《编程思维与实践》1040.字符串消除

《编程思维与实践》1040.字符串消除 题目 思路 每次消除都可能会受到第一次插入字符的影响,所以难以直接判断在哪个位置插入哪个字符后消除的字符数最多. 因此考虑暴力枚举: 在每个位置依此插入A,B,C 对所有情况消除的字符数进行比较,求出最大值. 对于字符串的插入可以利用str…

这个看过吗

el-upload调两个接口&#xff0c;获取二进制文件 &#xff0c;并且上传后不立即执行&#xff0c;通过 this.$refs.upload.submit();触发提交&#xff0c;直接调两个接口&#xff0c;获取到二进制文件后传输 <el-upload:auto-upload"false":data"{report…

springboot+vue在线动漫信息平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的在线动漫信息平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

TPS和QPS的区别与联系

今天在工作中遇到了两个指标&#xff0c;将这两个指标作以解析。 1、TPS&#xff1a; Transactions Per Second&#xff0c;意思是每秒事务数。一个事务是指客户端向服务器发送请求然后服务器做出反应的过程&#xff0c;具体的事务定义&#xff0c;可以是一个接口、多个接口、…

IDEA中application.yaml文件无法自动提示

问题描述&#xff1a; 在IDEA中application.properties可以自动提示&#xff0c;但是application.yml/application.yaml文件却不可以实现关键词提示和代码跳转 甚至&#xff0c;在Modules模块中都无法识别到application.yml文件&#xff01;&#xff01; 总感觉这个yml文件图标…

【C++学习】类和对象--继承

基本语法 继承是面向对象三大特性之一&#xff0c;有些类和类之间存在特殊关系。 下级别成员除了拥有上一级的共性还有自己的特点。 这个时候我们就可以考虑利用继承的技术&#xff0c;减少重复代码。 基本语法&#xff1a;class 子类 &#xff1a;继承方式 父类 子类也称为…

【HTML 标签详解】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

MySQL(三)-数据类型

MYSQL数据类型 1 整数类型2 浮点数类型和定点数类型3 日期与时间类型4 文本字符串类型5 二进制字符串类型6 数据类型的选择 表是由多列字段组成&#xff0c;每一个字段会有不同的数据类型&#xff0c;不同的数据类型决定了字段包含的数据内容。不同的数据类型也决定了mysql在使…

SpringBoot项目结构及依赖技术栈

目录 1、pom.xml文件配置说明 2、SpringBoot项目结构说明 3、入门案例关键配置说明 &#x1f308; 前面我们学习了SpringBoot快速入门案例&#xff0c;本节我们通过POM文件和项目结构分析两部分内容了解下关于SpringBoot的一些配置说明&#xff0c;以便全面了解SpringBoot项…

Javaweb | 转发、重定向

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 转发 转发与页面跳转 转发 转发的作用在服务器端&#xff0c;将请求发送给服务器上的其他资源&#xff0c;以共同完成一次请求的处理 页面跳转 使用forward跳转时&am…

MySQL(七)-日期和时间函数的使用解析

日期和时间函数的使用解析 1 获取当前日期的函数和获取当前时间的函数2 获取当前日期和时间的函数3 UNIX时间戳函数4 返回UTC日期的函数和返 UTC 时间的函数5 获取月份的函数MONTH(date)和 MONTHNAME(date)6 获取星期的函数DAYNAME(d)DAYOFWEEK(d)和WEEKDAY(d)7 获取星期数的函…

芯片封装基本流程及失效分析处理方法

芯片封装 芯片封装的目的在于对芯片进行保护与支撑作用、形成良好的散热与隔绝层、保证芯片的可靠性&#xff0c;使其在应用过程中高效稳定地发挥功效。 工艺流程 硅片减薄 使用物理手段&#xff0c;如磨削、研磨等&#xff1b;或者化学手段&#xff0c;如电化学腐蚀、湿法腐蚀…

2023-04-24:用go语言重写ffmpeg的muxing.c示例。

2023-04-24&#xff1a;用go语言重写ffmpeg的muxing.c示例。 答案2022-04-24&#xff1a; 本程序的大体过程如下&#xff1a; 打开输出文件并写入头部信息。 添加音频和视频流&#xff0c;并为每个流创建 AVCodecContext 对象&#xff0c;根据输入格式设置编码器参数&#x…

springboot 整合itext 实现pdf下载

一 itext介绍 1.1 核心组件介绍 Text中用文本块(Chunk)、短语(Phrase)和段落(paragraph)处理文本。 1.文本块(Chunk)是处理文本的最小单位&#xff0c;有一串带格式&#xff08;包括字体、颜色、大小&#xff09;的字符串组成。如以下代码就是产生一个字体为HELVETICA、大小为…

【OAI】UERANSIM容器与OAI核心网分立部署及测试

说明启动核心网&#xff1a;启动基站&#xff1a;功能测试ueransim测试1&#xff1a;通过12.1.1.x ping192.168.70.1ueransim测试2&#xff1a; 通过nr-binder绑定自定义TCP程序传数据到核心网ueransim测试3&#xff1a;多ueransim启动 结论附录基站配置文件&#xff1a;TCP通信…

HCIA-RS实验-路由配置-静态路由缺省路由

在计算机网络中&#xff0c;路由器是实现数据包转发的重要设备。它通过查找路由表中的路由信息&#xff0c;将数据包从源地址转发到目标地址。而静态路由和缺省路由则是路由表中的两种重要信息&#xff0c;下面我们来详细了解一下它们的概念、特点和应用。 目录 简述 一、静态…

Let‘s Learn .NET|通过 Semantic Kernel .NET SDK 管理你的 OpenAI 项目

编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun Lets Learn .NET 系列 “Lets Learn .NET” 是面向全球的 .NET 初学者学习系列&#xff0c;旨在通过不同语言&#xff0c;帮助不同地区的开发者掌握最新的 .NET 开发知识与技能。 在 ChatGPT 与 OpenAI 火热的当下&#x…

雪花算法

雪花算法(SnowFlake)&#xff0c;是Twitter开源 的分布式ID生成算法 主要是由 64bit 的 long 型生成的全局 ID&#xff0c; 其中分为四个部分&#xff1a; ① 最高1位固定值 0&#xff0c;因为生成的 id 是正整数 ② 后面的41位存储毫秒级时间戳 ③ 第三部分的10位存储机器码…

tp6.1 bingher/ueditor(百度编辑器)(七牛、阿里OSS第三方云)详情图文教程(第二版)

之前做过一版&#xff1a;tp6 bingher/ueditor(百度编辑器)(七牛、阿里OSS第三方云)详情图文教程_我是高手高手高高手的博客-CSDN博客 登录权限是Session&#xff0c;现在系统是Cookie加jwt的Token方式验证 一、修改验证登录权限 修改文件&#xff1a; vendor\bingher\uedito…

R语言 | 向量对象运算

目录 一、数值型的向量对象 1.1 建立规则型的数值向量对象使用序列符号 1.2 简单向量对象的运算 1.3 建立向量对象&#xff1a;seq()函数 1.4 连接向量对象&#xff1a;c()函数 1.5 重复向量对象&#xff1a;rep()函数 1.6 numeric()函数 1.7 程序语句短语跨行的处理 …