NEMU PA 2-1 实验报告
一、实验目的
通过PA2-0了解了汇编基础知识和如何去阅读i386手册后,在这个阶段我们就需要:
- 了解程序执行的宏观过程,以及在NEMU中是怎么去模拟的
- 实现庞大的指令体系,实现每条指令的解码和具体执行过程
二、实验步骤
首先我们了解了程序执行的过程:

即首先需要装载可执行文件到内存,然后不断读取文件中的内容进cpu中,由cpu来实现解码,完成对一条条指令的执行。
在了解程序装载的这一步中,我们知道了:
- 程序装载在NEMU中内存的部位,其中ELF装载在RAMdisk区域(暂时这样划分内存),镜像文件装载到物理内存区域;装载方式为直接拷贝;
- NEMU初始化cpu,将EIP和ESP分别初始化到镜像文件起点和内存尾部;
在了解程序执行的这一步中,我们需要做:
了解程序执行这个循环往复的过程,代码位于:
nemu/src/cpu/cpu.c
了解指令是如何解码的,包括指令的汇编表示形式(AT&T和Intel),单独一条指令需要遵从的机器格式,并通过i386手册把指令“翻译”过来
在这一阶段我们的直接目标是通过所有这个阶段的测试样例,最终目标是把所有需要实现的指令都给它实现完成。
基本的步骤为:
修改
Makefile中run目标规则中的<testcase_name>,指定要执行的测试用例。或使用make test_pa-2-1自动执行各个测试用例;若遇到
invalide opcode错误,则使用./scripts/objdump4nemu-i386 -d testcase/bin/<testcase_name>查看测试用例反汇编结果,看看到底是缺了哪条指令,查阅i386手册详细了解这条指令。实现这条指令,完成指令对应的
instr_func,过程中可以借用已经给出的宏,可以在结构相同的操作中省心省力。将指令其加入
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 实验报告的更多相关文章
- ucoreOS_lab3 实验报告
所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...
- ucoreOS_lab2 实验报告
所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...
- JAVA实验报告及第七周总结
JAVA第六周作业 实验报告五 第一题 1.设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法. 继承该抽象类定义三角型.矩形.圆. 分别创建一个三角形.矩形.圆存对象,将各类图 ...
- 第五次java实验报告
Java实验报告 班级 计科二班 学号 20188437 姓名 何磊 完成时间2019/10/10 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实 ...
- 第七周总结&第五次实验报告
学习总结 这周我们加深了对抽象类与接口的学习,获得的知识点也比上周多了许多,抽象类与接口很相似,就比如别人还没有做完的是交给你来做,而他那些样式都做好了,你只需要完善即可 但也有不同点. 区别点 抽象 ...
- 第七周课程总结 & 实验报告(五)
第七周课程总结 一.抽象类与接口的应用 1.实例化 2.实际应用 ---模板设计(抽象类) ---制定标准(接口) 3.设计模式 ---工厂设计 ---代理设计 ---适配器设计 二.抽象类与接口之间 ...
- 第七周&实验报告五
实验四 类的继承 •实验目的 •理解抽象类与接口的使用: •了解包的作用,掌握包的设计方法. •实验要求 •掌握使用抽象类的方法. •掌握使用系统接口的技术和创建自定义接口的方法. •了解 Java ...
- 2019JAVA第五次实验报告
Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间2019/10/11 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. ...
- 实验报告5&第七周课程总结
实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...
- 北京电子科技学院(BESTI)实验报告5
北京电子科技学院(BESTI)实验报告5 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名) 郑凯杰.周恩德 学号:(按贡献大小排名) 20145314.20145217 ...
随机推荐
- Win10 高效语音输入方案:听写功能 win + H
win + H 打开听写功能,即可打开语音输入,帮你快速糊完文档 (队友亲测好用)
- Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作
本文为博主原创,转载请注明出处: 1. 使用 ThreadPoolTaskExecutor 封装自定义配置的线程池Bean ThreadPoolTaskExecutor 是Spring 中封装的一个 ...
- MySQL高可用搭建方案之(MHA)
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 原文地址 MHA架构介绍 MHA是Master High Av ...
- [转帖]k8s ipv4/ipv6双栈实践
https://www.iceyao.com.cn/post/2020-11-28-k8s_dual_stack/ Posted by 爱折腾的工程师 on Saturday, November 28 ...
- [转帖]《Linux性能优化实战》笔记(22)—— 网络丢包问题分析
所谓丢包,是指在网络数据的收发过程中,由于种种原因,数据包还没传输到应用程序中,就被丢弃了.这些被丢弃包的数量,除以总的传输包数,也就是我们常说的丢包率.丢包率是网络性能中最核心的指标之一.丢包通常会 ...
- Mysql 安装文件下载
今天上了mysql的官方网站想下载mysql数据库 https://www.mysql.com 注册之后发现 出口许可证的问题 这里fxxk 一下川建国的老婆和女儿 感觉比较抑郁 然后就去百度了下 发 ...
- SingleNode HDFS 搭建过程
背景 1. 纯粹测试 2. 未考虑安全和授权以及数据处理. 3. 单节点最简单的部署, 验证功能连接的可能性 资料获取以及环境变量的设置 获取最新的安装文件 https://downloads.apa ...
- 京东云开发者|提高IT运维效率,深度解读京东云AIOps落地实践
基于深度学习对运维时序指标进行异常检测,快速发现线上业务问题 时间序列的异常检测是实际应用中的一个关键问题,尤其是在 IT 行业.我们没有采用传统的基于阈值的方法来实现异常检测,而是通过深度学习提出了 ...
- vue和uni-app不同的类型绑定不同的类名
vue不同的类型绑定不同的类名 第一种 <div v-for="(item, index) in list" :key="index" > < ...
- 根据TxID获取上链数据
根据TxID获取上链信息 前段时间应甲方爸爸的要求,需要在现有的业务系统中新增一个根据TxID来查询上链信息的接口.搜了一圈发现相关的信息很少,最后只能祭出终极大招:Read Source Code. ...