课程地址:https://www.bilibili.com/video/BV1TE411P7tq

一、实验目的

通过PA2-0了解了汇编基础知识和如何去阅读i386手册后,在这个阶段我们就需要:

  • 了解程序执行的宏观过程,以及在NEMU中是怎么去模拟的
  • 实现庞大的指令体系,实现每条指令的解码和具体执行过程

二、实验步骤

首先我们了解了程序执行的过程:

即首先需要装载可执行文件到内存,然后不断读取文件中的内容进cpu中,由cpu来实现解码,完成对一条条指令的执行。

在了解程序装载的这一步中,我们知道了:

  • 程序装载在NEMU中内存的部位,其中ELF装载在RAMdisk区域(暂时这样划分内存),镜像文件装载到物理内存区域;装载方式为直接拷贝;
  • NEMU初始化cpu,将EIP和ESP分别初始化到镜像文件起点和内存尾部;

在了解程序执行的这一步中,我们需要做:

  • 了解程序执行这个循环往复的过程,代码位于:nemu/src/cpu/cpu.c

  • 了解指令是如何解码的,包括指令的汇编表示形式(AT&T和Intel),单独一条指令需要遵从的机器格式,并通过i386手册把指令“翻译”过来

在这一阶段我们的直接目标是通过所有这个阶段的测试样例,最终目标是把所有需要实现的指令都给它实现完成。

基本的步骤为:

  1. 修改Makefilerun目标规则中的<testcase_name>,指定要执行的测试用例。或使用make test_pa-2-1自动执行各个测试用例;

  2. 若遇到invalide opcode错误,则使用./scripts/objdump4nemu-i386 -d testcase/bin/<testcase_name>查看测试用例反汇编结果,看看到底是缺了哪条指令,查阅i386手册详细了解这条指令。

  3. 实现这条指令,完成指令对应的instr_func,过程中可以借用已经给出的宏,可以在结构相同的操作中省心省力。

  4. 将指令其加入opcode_entry[]数组,替换对应位置上的inv指令。框架代码已经提供了一部分指令的实现,只是没有填入opcode_entry[],比如mov.S所需要的所有指令);

重复上述过程,直至通过所有这一阶段要求的测试用例,见到Hit Good Trap

三、思考题

  • test-float测试用例是唯一的一个例外,它理应Hit Bad Trap,请在实验报告中简述为什么?

因为在给float变量赋值的过程中会发生精度丢失,导致将值1.2赋值到a的时候,a的实际表示值并不为1.2,而是1.20000005(同样也是一个近似值);故在进行条件比较跳转时,即使在字面上似乎条件为true,但实际上则因为精度问题而为false,导致了后面的badtrap。

NEMU PA 2-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. springboot启动流程 (1) 流程概览

    本文将通过阅读源码方式分析SpringBoot应用的启动流程,不涉及Spring启动部分(有相应的文章介绍). 本文不会对各个流程做展开分析,后续会有文章介绍详细流程. SpringApplicati ...

  2. SV 自定义数据类型

    概述 自定义类型 枚举类型 定义枚举值 自定义枚举类型 枚举类型之间进行赋值是可以的 枚举类型可以赋值给整型,整型不能直接赋值给枚举类型 枚举类型 + 1 ==> 会进行隐式的转换,枚举类型转换 ...

  3. [转帖]【InfluxDB V2.0】介绍与使用,flux查询、数据可视化

    目录 一.关键概念 二.系统结构 三.配置文件 四.Flux查询语句 五.可视化数据 附录 一.关键概念 相比V1 移除了database 和 RP,增加了bucket. V2具有以下几个概念: ti ...

  4. Jmeter之二_JSR223取样器,断言等添加失败的解决办法

    Jmeter之二_JSR223取样器,断言等添加失败的解决办法 背景 最近在学习jmeter 但是发现在进行JSR223的相关取样器以及断言处理时出现了错误: java.lang.NoClassDef ...

  5. [转帖]从CPU指令集自主到信息技术产业自主

    https://zhuanlan.zhihu.com/p/365210753 现代信息技术的应用都是以计算机为基础,CPU是计算机中的信息处理中枢.CPU指令集是CPU逻辑电路与操作系统和应用程序交流 ...

  6. 京东金融Android瘦身探索与实践

    作者:京东科技 冯建华 一.背景 随着业务不断迭代更新,App的大小也在快速增加,2019年~2022年期间一度超过了117M,期间我们也做了部分优化如图1红色部分所示,但在做优化的同时面临着新的增量 ...

  7. echarts使用transform缩放后导致图标模糊

    echarts使用transform缩放后导致图标模糊 --的解决办法 当使用了transform: scale(x,y)缩放后致使echarts图表模糊.怎么解决这个问题呢? 第一种解决办法:将ca ...

  8. 如何写RN样式 如何写RN组件 如何满屏 如何使用变量

    app.js 文本水平居中了哈 控制文本的大小 字体颜色等 只有在文本元素上去控制哈 import React from 'react'; import {View, Text, StyleSheet ...

  9. uni-app 实现下拉刷新功能

    我们在运用uni-app开发小程序或h5时,常常需要页面实现下拉刷新功能. 在 js 中定义 onPullDownRefresh 处理函数(和onLoad等生命周期函数同级),监听该页面用户下拉刷新事 ...

  10. C#使用Elasticsearch入门

    一.Elasticsearch 简介 Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例.作为 Elastic Stack 的核心,它集中 ...