计算机组成原理实验--PA实验PA1.21.3
《计算机组成原理Ⅱ课程设计》报告
目录
文章目录
- 《计算机组成原理Ⅱ课程设计》报告
- 目录
- 思考题
- 1. 有什么办法?
- 2. 一些简单的正则表达式
- 3. 这是为什么?
- 4. 如何处理以上的问题
- 5. 递归求值的过程?
- 6. 体验监视点
- 7. 科学起名
- 8. 温故而知新
- 9. 一点也不能长?
- 10. “随心所欲”的断点
- 11. NEMU的前世今生
- 12. 尝试通过目录定位关注的问题
- 13. 理解基础设施
- 14. 查阅i386手册
- 15. shell 命令
- 16. 使用`man`
- 17. `git log`和远程git仓库提交截图
- 实验内容
- 1. 编写匹配规则(1)
- 2. 添加 p 命令
- 3. 识别并存储 token
- 4. 实现括号匹配
- 5. 实现子表达式拆分
- 6. 实现表达式求值
- 7. 实现指针解引用
- 8. 实现负数
- 9.实现x命令使用表达式求值
- 10. 监视点结构体
- 11. 监视点池的管理
- 12. 监视点加入调试器
- 13. 监视点主要功能
- 14. 实现软件断点
- 遇到问题及解决方法
- 实验心得
- 其他备注
- 实验心得
- 其他备注
思考题
由于md图片的显示问题,具体可以联系qq 邮箱1528882125@qq.com获取本实验全套的代码和报告
1. 有什么办法?
1.利用栈进行表达式求值,一个栈储存运算符,一个栈醋和农村操作数,首先将中缀表达式转化为后缀表达式,明确运算符的优先级和结合性之后进行计算,将后缀表达式压入栈中,运算符匹配时弹栈,重复此操作最后实现求值。
2. 一些简单的正则表达式
1.0x
开头十六进制
0x[0-9a-f]+
2.英文字母和数字的字符串
^[A-Za-z0-9]+$
3.当变量只包含数字,ASCII
字母,下划线且以字母,下划线开头
^[a-zA-Z_][0-9a-zA-Z_]*$
4.16开头的学号,2-4的汉字姓名,包含数字字母和点号的字符串
16\d{7} - ^[\u4e00-\u9fa5]{2,4}$ - ^[0-9a-zA-Z.]+.pdf$
3. 这是为什么?
首先字符串中的\\
被编译器解释为\
第一步,编译器将字符串转变为“正则表达式”
然后作为正则表达式, 第二步,才开始把第一步的结果当做是正则表达式,开始进行匹配
4. 如何处理以上的问题
使用make clean
清空工作树或许可以释放一部分缓存的区域。防止溢出缓存区。
5. 递归求值的过程?
在过程中调用自己就是递归求值。
6. 体验监视点
编写test.c
编译进入gdb
使用l
查看程序内容
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1nQqj2Y-1649584239871)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\监视点.jpg)]
b
设置断点,利用watch
设立监视点a、b
持续监视a、b
的值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n0oYrsq5-1649584239872)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\监视点1.jpg)]
利用c
继续运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZXVp5Trj-1649584239873)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\监视点1.jpg)]
7. 科学起名
使用free_
作为空闲监视点管理的头指针可以避免和其他的链表头指针撞车导致监视点链表被调用产生错误。
8. 温故而知新
此处的含义是静态全局变量,该变量只可以被本文件中的函数调用,并且由于是全局变量,所以不可以被统一程序的不同函数调用,此书使用static
是为了避免它被失误修改。
9. 一点也不能长?
不可以,因为当我们在调试器中对代码的某一行设置断点时,会把这里本来指令的第一个字节保存起来,然后写入一条INT 3指令,机器码为0xcc,仅有一个字节,设置和取消断点时也需要保存和恢复一个字节
10. “随心所欲”的断点
断点不在指令的首个字节就无法检测到断点。
11. NEMU的前世今生
模拟器emulator
和调试器debugger
的不同。我觉得debugger
是一个命令行调试工具,设置断点,调试程序,测试bug
,emulator
是一个载体,就是虚拟机,是一个独立的系统,不会对电脑本身的系统造成影响.
12. 尝试通过目录定位关注的问题
386intel
手册5.1.3
内容
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5gNiSda-1649584239875)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\lector.jpg)]
13. 理解基础设施
调试上花费75h
,建议调试器帮忙节省50h
14. 查阅i386手册
1.34
页CF
位是进位标志,在最高位发生进位或者错位时置为1
否则置为0
2.ModR/M由Mod,Reg/Opcode,R/M三部分组成。Mod是前两位,提供寄存器寻址和内存寻址,Reg/Opcode为345位,如果是Reg表示使用哪个寄存器,Opcode表示对group属性的Opcode进行补充;R/M为678位,与mod结合起来查图得8个寄存器和24个内存寻址
3.347
页格式:DEST<-SRC
15. shell 命令
在2021\pa1
中使用指令find . -name "*[.h|.cpp]" | xargs wc -l
,做差看出写了代码行数为529
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7M5tanrm-1649584239876)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\计数.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhV5nt94-1649584239877)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\计数2.jpg)]
指令find . –name “*[.cpp|.h]” | xargs grep “^.” | wc -l
查看不包括空格的行数为:501
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9hMpU9Ca-1649584239878)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\计数3.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MB3QwQmY-1649584239879)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\计数4.jpg)]
16. 使用man
Wall
使GCC产生尽可能多的警告信息,取消编译操作,打印出编译时所有错误或警告信息。
-Werror
要求GCC将所有的警告当成错误进行处理,取消编译操作。
使用-Wall
和-Werror
就是为了找出存在的错误,减少程序错误
17. git log
和远程git仓库提交截图
git log
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DFdo6WqT-1649584239880)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\gitlog.jpg)]
提交到仓库的截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2XdQfEu0-1649584239881)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\思考.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3QEns7b-1649584239882)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\git push.jpg)]
实验内容
1. 编写匹配规则(1)
首先需要在rules
数组中添加对应规则的相应正则表达式,另外需要在enum
中 添加相应的token
类型。
添加结果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Pv9ElML-1649584239884)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\1.JPG)]
2. 添加 p 命令
在ui.c
中完善指令使其可以调用expr
进行表达式求值的运算返回结果打印输出:
此外还要需要格外注意需要同时在help
数组中添加p
指令,一遍在界面显示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqqrVeZs-1649584239885)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\2.JPG)]
3. 识别并存储 token
这一步就是要完善make _token
函数的时候了,同时需要更新nr_token
的数值来记录读入的运算符和操作数的个数,储存之后如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S4ziztL9-1649584239886)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\3.JPG)]
4. 实现括号匹配
利用left
记录读入的左括号数量,利用flag
来记录表达式是否进行到最后的阶段,每读入一个左括号left+1
,i
来记录当前读入的第几个字符,如果到狮子读入完毕之后left
不等于零就表明括号不匹配,利用assert(0)
中断程序。实现如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChIpT7a2-1649584239887)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\4.JPG)]
5. 实现子表达式拆分
以4+3*(2-1)
为例,总表达式的中心操作符为+
,子表达式的中心操作符分别为*
和+
,函数find_dominated_op
利用p
和q
两个数值,一个指示表达式的前端一个只是表达式的后端,找到表达式判断优先级之后进行截断分为两个表达式,之后子表达式再次进入函数寻找运算符,直到p,q
相同,表达式结束。
以4+3*(2-1)
为例:首先+
为中心操作符之后是*
和-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dhz09Fc5-1649584239887)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\5.1.JPG)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z3AN2iDq-1649584239888)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\5.JPG)]
6. 实现表达式求值
测试结果成立如下图所示,满足结果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BiZJo3CC-1649584239889)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\6.JPG)]
7. 实现指针解引用
指针解引用就是判断是乘号还是地址号,通过判断其前一个符的token
类型即可判断,如果他前面的字符的token
类型如果不是十进制数或者十六进制数则大概率可能是指针,实现如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8zEYGPpX-1649584239890)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\7.JPG)]
8. 实现负数
在eval
函数中识别token
类型时调整返回值加负号 即可
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-STGbBu2C-1649584239891)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\8.JPG)]
9.实现x命令使用表达式求值
实现此功能需要修改cmd_x
指令 ,可以判断x
之后输入的的内容开头如果以0
开头则读入的是地址,如果是是其他开头
10. 监视点结构体
定义char
型数组expr[100]
,和两个int
型变量new_val和old_val
储存新值和旧值。结果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lGQluAkx-1649584239892)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\10.JPG)]
11. 监视点池的管理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sIhKp6BU-1649584239893)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\11.JPG)]
12. 监视点加入调试器
将w
和d
指令加入到ui.c
中,并且添加info w
指令
w
指令为设置监视点,d
指令监视点编号并且删除监视点
这两个指令调用后续编写的函数set_watchpoint
和delete_watchpoint
即可,实现如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHTONNJN-1649584239893)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\12.1.JPG)]
info w
指令需要仿照info r
指令并调用list_point
函数,最后实现如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQYyyMey-1649584239896)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\12.JPG)]
13. 监视点主要功能
函数主要用到的还是链表的操作实现如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sm20M00r-1649584239897)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\13.JPG)]
测试了设立监视点,显示监视点,删除监视点的功能,结果入下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cAdeK17I-1649584239898)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\13.1.JPG)]
14. 实现软件断点
(暂时没有实现)
遇到问题及解决方法
1.遇到问题:在写完第一次匹配规则并且完善p
指令之后运行1+1
出现如下问题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m23Z28yX-1649584239900)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\问题1.JPG)]
解决方法:经过了解后可知,因该是make_token
函数没有完善导致导致其中的token
无法识别所以报错,应先完善make_town
函数。
2.遇到问题:在编写完set_watchpoint list_watchpoint和delete_watchpoint
函数之后回到nemu
目录下make run
显示没有在ui.c
中定义函数,但是确实定义了。
解决方法:在ui.c
中存在watchpoint.h
的头文件,所有 watchpoint
相关的函数全都要声明,在watchpoint .h
中声明函数即可,解决如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-addQcwvk-1649584239901)(C:\Users\86178\Documents\计组\PA1.2 1.3\picture\问题2.jpg)]
实验心得
本次实验的难度比之前实验难度大很多,接触到的例如正则表达求值,正则达式的表示 ,都是引得只是,刚开始使用稍不注意就会报错,匹配方面还要慢慢 修改,监视点的内容运用了链表的知识,回去复习了一遍,软件的断点目前还没有思路和方法实现,还需要一些时日,总之,实验难度大了,思考内容多了起来,要慢慢跟上节奏。
其他备注
明天会更好
在watchpoint .h
中声明函数即可,解决如下:
[外链图片转存中…(img-addQcwvk-1649584239901)]
实验心得
本次实验的难度比之前实验难度大很多,接触到的例如正则表达求值,正则达式的表示 ,都是引得只是,刚开始使用稍不注意就会报错,匹配方面还要慢慢 修改,监视点的内容运用了链表的知识,回去复习了一遍,软件的断点目前还没有思路和方法实现,还需要一些时日,总之,实验难度大了,思考内容多了起来,要慢慢跟上节奏。
其他备注
明天会更好
计算机组成原理实验--PA实验PA1.21.3相关推荐
- 计算机组成原理整机实验报告,计算机组成原理加器实验报告.doc
计算机组成原理加器实验报告 课程设计任务书 学 院信息学院专 业计算机科学与技术学生姓名学 号设计题目研制一台多累加器结构的实验计算机 内容及要求: 利用EL-JY-II型计算机组成原理实验仪提供的硬 ...
- 计算机组成nzvc的含义,计算机组成原理学生用实验指导
<计算机组成原理学生用实验指导>由会员分享,可在线阅读,更多相关<计算机组成原理学生用实验指导(41页珍藏版)>请在人人文库网上搜索. 1.1.2TEC2机的指令系统与汇编语言 ...
- 计算机组成与系统结构输入输出控制实验,计算机组成原理与系统结构实验指导书...
计算机组成原理与系统结构实验指导书 (57页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 21.9 积分 计算机实验室实验预习报告专业名称(班级) 姓名 ...
- 计算机组成原理模型机设计实验总结,计算机组成原理课程设计实验报告-基本模型机设计与实现.docx...
计算机组成原理课程设计实验报告-基本模型机设计与实现 计 算 机 组 成 原 理 实 验 报 告 评 语: 成绩 教 师: 年 月 日 班 级: 1403011 学 号: 140301124 姓 名: ...
- 计算机组成原理与汇编语言实验与课设源码分享
0.环境 DOSBox0.74 + 8086 一.计算机组成原理和汇编程序设计实验 1. 编写一个累计加法,从 1 加到 5,将结果保存至 AX 中. 2. 编写一个累计减法,被减数是 10011 ...
- 基于java计算机组成原理虚拟仿真实验系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java计算机组成原理虚拟仿真实验系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java计算机组成原理虚拟仿真实验系统计算机毕业设计源码+系统+lw文档+mysql数据库 ...
- 计算机组成原理实验箱使能开关,计算机组成原理微程序计数器实验报告
计算机组成原理微程序计数器实验报告 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 洛阳理工学院实验报告系别计算机与信息工程学院班级学号 ...
- 计算机组成原理的实验课心得,计算机组成原理移位控制实验心得.docx
计算机组成原理移位控制实验心得 计算 机组成原理实验五 位运算实验............... 姓名:陈衍席学号:网工1202移 [实验环境] 1.WindowsXX或WindowsXP 2.sp2 ...
- 计算机组成原理实验箱D7,计算机组成原理与系统结构实验仪教学设备,上海求育...
原标题:计算机组成原理与系统结构实验仪教学设备,上海求育 上海求育QY-JXSY30计算机组成原理与系统结构实验箱 上海求育QY-JXSY30计算机组成原理与系统结构实验箱是一款八位,十六位兼容设计的 ...
- 计算机组成原理微控制设计实验总结,计算机组成原理微程序控制器实验报告.doc...
计算机组成原理微程序控制器实验报告.doc 计算机组成原理实验报告三:微程序控制器实验?? 2011-05-06 01:00:09|??分类: 实验报告 |??标签:实验??微程序??字段??微指令? ...
最新文章
- NSArray和NSDictionary的混合
- u-boot-2009.08在2440上的移植详解(三)
- SpringMVC自动将请求参数和入参对象的属性进行一一绑定;要求请求参数的名字和javaBean入参的对象里面的属性名是一样的||员工的增删改查案例
- nginx用户认证访问
- Linux分区和加密分区操作
- 网络电话坐享iOS10红利 iphone7免费通话
- 海思Hi3519AV100sensor移植之二-- imx586 sensor
- python数字猜大小游戏
- 36D杯CTF Re WP
- 计算机科学与技术保研好不好,2021年北京邮电大学计算机科学与技术专业保研成功上岸经验指导...
- 数据库及基本表的建立
- 深入探访支付宝双11十年路,技术凿穿焦虑与想象极限
- NetBeans ide操作流程及注意事项
- Error: EBUSY: resource busy or locked, lstat ‘D:\pagefile.sys‘
- 二本机械毕业2年,从外包ETL到大厂数据开发,月薪13K到年薪40W
- HTML网页设计:六、列表
- 电力负荷预测三篇综述总结
- 修复我的世界ice服务器的指令,我的世界 基岩版:服务器清理命令
- 小渔夫 | 一万多的椅子照样畅销全球,它是怎么做到的?
- mac 连接wifi 无法弹出账号登录界面