课程地址:

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. 前端开发环境搭建踩坑笔记——npm install node-sass安装失败的解决方案

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  2. [转帖]JVM中年轻代里的对象什么情况下进入老年代?以及老年代垃圾回收算法-标记整理算法

    1.躲过15次GC之后进入老年代 系统刚启动时,创建的各种各样的对象,都是分配在年轻代里. 随着慢慢系统跑着跑着,年轻代满了,就会出发Minor GC ,可能1%的少量存活对像转移到空着的Surviv ...

  3. [转帖]harbor-db restarting问题

    现象: 在安装harbor后,启动时发现harbor-db 一直是restarting,/harbor-jobservice,/harbor-core 这两是starting 状态,如下图 解决: 1 ...

  4. [转帖]Linux:页表中PGD、PUD、PMD、TLB等概念介绍

    1.PGD: Page Global Directory        Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的.当创建一个新的进程时,都要为新进程 ...

  5. [转帖]耗时几个月,终于找到了JVM停顿十几秒的原因

    https://www.cnblogs.com/codelogs/p/16060792.html   原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 最近我们系 ...

  6. [转帖]JVM-工具-jcmd

    http://events.jianshu.io/p/011f0e3a39ff 一.jcmd 用法 1.1 基本知识 jcmd 是在 JDK1.7 以后,新增了一个命令行工具. jcmd 是一个多功能 ...

  7. Ubuntu2204设置固定IP地址

    前言 Ubuntu每次升级都会修改一部分组件. 从1804开始Ubuntu开始使用netplan的方式进行网络设置. 但是不同版本的配置一直在升级与变化. 今天掉进坑里折腾了好久. 所以这边总结一下, ...

  8. ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队

    ​ 1 前言 Elasticsearch作为一个分布式搜索引擎,自身是高可用的:但也架不住一些特殊情况的发生,如: 集群超过半数的master节点丢失,ES的节点无法形成一个集群,进而导致集群不可用: ...

  9. MySQL控制权限

    编写顺序和执行顺序是不一样的 编写顺序: SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 ...

  10. windows幻灯片壁纸

    设置为10秒 win+r输入regedit 查找路径 HKEY_CURRENT_USER\Control Panel\Personalization\Desktop Slideshow 修改inter ...