首页 > 其他分享 >NEMU PA 2-1 实验报告

NEMU PA 2-1 实验报告

时间:2023-02-24 22:47:36浏览次数:53  
标签:PA 程序执行 装载 NEMU 测试用例 指令 实验报告 cpu

课程地址: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。

标签:PA,程序执行,装载,NEMU,测试用例,指令,实验报告,cpu
From: https://www.cnblogs.com/grapefruit-cat/p/17153408.html

相关文章

  • NEMU PA 2-3 实验报告
    课程地址:https://www.bilibili.com/video/BV1yC4y1s74C一、实验目的了解ELF符号表的解析进一步完善调试器的功能,理解编译器的设计原理二、实验步骤在PA2-1中实现......
  • jQuery插件-fullpage全屏幻灯片展示效果
    fullpage全屏插件全屏滚动效果,原生js也很好实现,主要是用mousewheel鼠标滚轮滚动事件,来判断上滚动还是下滚动,之后设置每次滚动的高度为屏幕的高度即可。但是,虽然效果简......
  • k8s-部署Nginx+Keepalived高可用负载均衡器
    本文章是 k8s二进制高可用集群部署 的分支。详细步骤请参考目录。Kubernetes集群高可用性包含以下两个层面的考虑:Etcd数据库的高可用性KubernetesMaster组件......
  • PAT Basic 1004. 成绩排名
    PATBasic1004.成绩排名1.题目描述:读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。2.输入格式:每个测试输入包含1个测试用例,格......
  • PAT Basic 1003. 我要通过!
    PATBasic1003.我要通过!1.题目描述:“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统......
  • pandas 常用方法使用示例
    #生成DataFrame,保存至文件frompandasimportDataFrameimportnumpyasnpimportpandasaspdt={"称呼":["爸爸","妈妈","宝宝"],"年龄":[18,30,np.......
  • 417. Pacific Atlantic Water Flow[Medium]
    417.PacificAtlanticWaterFlowThereisanmxnrectangularislandthatbordersboththePacificOceanandAtlanticOcean.ThePacificOceantouchestheisl......
  • java代码上传文件,接口consumes = "multipart/*",headers = "content-type=multipart/f
    publicstaticStringdoPost(Stringurl,StringfileName,Filefile){CloseableHttpClienthttpClient=null;CloseableHttpResponseresponse=null;Str......
  • 【笔记】springboot使用Spring-data-jpa
    Spring-data-jpaSpring-data-jpa依赖于Hibernate。通过整合Hibernate之后,我们以操作Java实体的⽅式最终将数据改变映射到数据库表中。添加依赖:<dependency<groupId......
  • PageOffice在线打开编辑Word文件获取指定区域的数据并且保存整篇文件
    一、首先在word文件中给需要在后台获取数据的区域设置以PO_开头的书签。二、通过pageoffice在线打开文件并编辑保存。有两种打开文件的模式1、普通编辑模式(docNormalEdi......