课程地址:

PA1-1 https://www.bilibili.com/video/BV1JE411J7AK

PA1-2 https://www.bilibili.com/video/BV1EE411J7Y6

PA1-3 https://www.bilibili.com/video/BV1fE411H7nS

Guide的仓库及其镜像地址:

​ GitHub: http://github.com/ics-nju-wl/icspa-public-guide

​ Gitee: https://gitee.com/wlicsnju/icspa-public-guide

实验框架代码及其镜像地址:

​ GitHub: http://github.com/ics-nju-wl/icspa-public

​ Gitee: https://gitee.com/wlicsnju/icspa-public

一、实验目的

通过数据的存储开始简单了解NEMU的总体结构,进而从整数和浮点数的表示、存取和运算出发,构建一台完整的计算机。

二、实验步骤

PA1-1 数据的表示和存取

首先我们了解了各种数据(无符号整数,带符号整数,定点/浮点数,非数值型数据)是怎么编码成机器数的;然后进一步了解了cpu是怎么处理数据的:

然后我们进一步了解了NEMU中这些数据的存储的地方以及这些存储地方是怎么被我们写出来的,即NEMU是如何用c语言表示内存和寄存器的:(ISA遵从i386)

通过进一步阅读代码,可以发现内存是由一个uint_8的数组来模拟的,并且给出了从顶层到底层的一系列读写接口(虚拟地址读写、线性地址读写、物理地址读写,需要后面去完成);

了解内存后,我们继续来了解NEMU中的通用寄存器组;

在pa1-1中我们模拟了一个x86体系的通用寄存器组,这个寄存器组拥有八个32位的寄存器;由于寄存器具有兼容性,即如下图,我们通过使用struct类型和union类型来达到模拟效果:

typedef struct
{
union
{
union
{
union
{
uint32_t _32;
uint16_t _16;
uint8_t _8[2];
};
uint32_t val;
} gpr[8];
struct
{ // do not change the order of the registers
uint32_t eax, ecx, edx, ebx, esp, ebp, esi, edi;
};
}; … } CPU_STATE;

PA1-2 整数的表示与运算

在PA1-1中我们了解了NEMU的内存和GPRs组成,在PA1-2中我们将视角放到cpu中,去了解并完成cpu中的运算部件。(需要实现的部分是算术逻辑单元,即ALU)

其中ALU要实现的功能包括各类算术运算(加减乘除)和逻辑运算(与或非)。在这个过程,我们要将需要实现的指令和i386手册比对,通过手册来找到相关指令描述以实现基本操作,同时实现五个符号位(OF CF PF SF ZF)的判断。

实现的指令有:算术运算:ADD ADC SUB SBB MUL IMUL DIV IDIV SHL SHR SAL SAR

​ 逻辑运算:AND OR XOR

对应代码在:

nemu/include/cpu/alu.h

nemu/src/cpu/alu.c

PA1-3 浮点数的表示与运算

在这一章节,我们要在NEMU中模拟浮点数的算术运算单元即FPU;

我们需要实现四个浮点数运算:加减乘除。并同时在它们的实现过程中实现对浮点数结果的规格化处理;相关函数为internal_float_xxx()

相关代码:nemu/src/cpu/fpu.c

三、思考题

SUB为什么不能对减数取补码后,简单复用add的CF判断标准?

如果对减数取补码进行运算,如3-6的情况,运算得出的结果补码会为负数,0011 + 1010 = 0 1101,不会发生借位。所以不能简单服用add的cf判断标准。

为浮点数加法和乘法各找两个例子:1)对应输入是规格化或非规格化数,而输出产生了阶码上溢结果为正(负)无穷的情况;2)对应输入是规格化或非规格化数,而输出产生了阶码下溢结果为正(负)零的情况。是否都能找到?若找不到,说出理由。

1)加法:10E38 + 1.0

​ 乘法:3.4E38 * 100.0

2)加法:不能找到,因为对阶运算再进行规格化后,阶码为0时可以表示非规格化浮点数。

​ 乘法:非规格化下溢:( 0 & 0x1 ) * ( 0 & 0x1 )= 0;

NEMU PA 1 实验报告的更多相关文章

  1. ucoreOS_lab3 实验报告

    所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...

  2. ucoreOS_lab2 实验报告

    所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...

  3. JAVA实验报告及第七周总结

    JAVA第六周作业 实验报告五 第一题 1.设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法. 继承该抽象类定义三角型.矩形.圆. 分别创建一个三角形.矩形.圆存对象,将各类图 ...

  4. 第五次java实验报告

    Java实验报告 班级 计科二班 学号 20188437 姓名 何磊 完成时间2019/10/10 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实 ...

  5. 第七周总结&第五次实验报告

    学习总结 这周我们加深了对抽象类与接口的学习,获得的知识点也比上周多了许多,抽象类与接口很相似,就比如别人还没有做完的是交给你来做,而他那些样式都做好了,你只需要完善即可 但也有不同点. 区别点 抽象 ...

  6. 第七周课程总结 & 实验报告(五)

    第七周课程总结 一.抽象类与接口的应用 1.实例化 2.实际应用 ---模板设计(抽象类) ---制定标准(接口) 3.设计模式 ---工厂设计 ---代理设计 ---适配器设计 二.抽象类与接口之间 ...

  7. 第七周&实验报告五

    实验四 类的继承 •实验目的 •理解抽象类与接口的使用: •了解包的作用,掌握包的设计方法. •实验要求 •掌握使用抽象类的方法. •掌握使用系统接口的技术和创建自定义接口的方法. •了解 Java ...

  8. 2019JAVA第五次实验报告

    Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间2019/10/11 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. ...

  9. 实验报告5&第七周课程总结

    实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...

  10. 北京电子科技学院(BESTI)实验报告5

    北京电子科技学院(BESTI)实验报告5 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名) 郑凯杰.周恩德 学号:(按贡献大小排名) 20145314.20145217 ...

随机推荐

  1. gitee 创建代码仓库,并提交本地代码

    本文为博主原创,转载请注明出处: 1. 配置本地 gitee 的配置: git config --global user.name "xiangBaxiang" git confi ...

  2. Pgsql之查询一段时间内的所有日期

    前几天干活儿的时候,项目中有这么个需求,需要用pgsql查询两个日期间的所有日期,包括年月日,下面贴代码: 1 select date(t) as day 2 from 3 generate_seri ...

  3. Go-单链表-栈和队列

    package main import ( "errors" "fmt" "log" ) // 单链表 // 特征: // 1. 每个节点都 ...

  4. [转帖]shell 把以空格分隔的变量 分割后的每个字段赋值给变量

    比如我有一个变量 "123 456 789",要求以空格为分隔符把这个变量分隔,并把分隔后的字段分别赋值给变量,即a=123:b=456:c=789 共有3中方法: 法一:先定义一 ...

  5. [转帖]谈谈ClickHouse性能情况以及相关优化

    https://zhuanlan.zhihu.com/p/349105024 ClickHouse性能情况 主要分为4个方面 1.单个查询吞吐量 场景一: 如果数据被放置在page cache中,则一 ...

  6. [转帖]Redhat、CentOS添加静态路由的方法

    https://www.diewufeiyang.com/post/1174.html 我们经常遇到需要在系统默认路由的基础上,额外添加静态路由的需求.为了使得下次系统启动这些静态路由依旧生效,我们可 ...

  7. [转帖]hex,base64,urlencode编码方案对比

    https://www.jianshu.com/p/4d701c09d44e 原创:打码日记,欢迎分享,转载请保留出处. 简介 在工作过程中,我们慢慢会了解到hex.base64.urlencode这 ...

  8. [转帖]华为OpenEuler欧拉系统添加epel源方法

    https://blog.whsir.com/post-7002.html   由于国产华为OpenEuler欧拉系统的版本命名是22.03.22.03这种,并且在查看版本的路径中是/etc/open ...

  9. 【k哥爬虫普法】非法入侵计算机信息系统,获取1500万余条个人信息!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  10. Python 潮流周刊第 29 期(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...