PA1实验报告:表达式求值与i386监视点实现

需积分: 0 16 下载量 94 浏览量 更新于2024-08-05 1 收藏 1.4MB PDF 举报
"PA1(下)-173071301781" 本次实验聚焦于表达式求值、监视点的管理以及对i386架构的理解和应用。实验的核心任务包括实现表达式的计算逻辑,监控点的设置、管理和检查,以及深入研究i386处理器的手册。 一、表达式求值 表达式求值是一个包含识别和计算两个阶段的过程。首先,词法分析是将输入的字符串分解成一个个的标记(tokens),这涉及到创建识别不同运算符和数值的规则。例如,定义枚举类型(enum)来表示不同类型的tokens,并设置规则(rule)来匹配这些token。词法分析器会根据规则识别出诸如加号、减号、乘号和除号等运算符,并将它们与相应的ASCII值对应起来。同时,规则还需要处理数值,包括十进制和十六进制。在这个阶段,多义的符号如星号(*)和减号(-)不会被立即处理,它们会在后续的词法分析阶段进行特殊处理,以区分它们作为指针操作符或负数的含义。 接下来是递归下降求值(recursive descent evaluation)。这个阶段涉及到了解运算符的优先级,并通过递归函数来计算表达式。例如,`check_parentheses()`函数用于处理括号,`dominant_op(p,q)`用于确定两个运算符之间的优先级,`eval(p,q)`则负责实际的计算。此外,还存在辅助函数如`oprank(op)`用于查找运算符的优先级。所有这些实现都位于`nemu/src/monitor/debug/expr.c`文件中。在实现过程中,遵循KISS(Keep It Simple, Stupid)原则,逐步增加功能,从基础的加减乘除开始,然后处理负数,最后实现更复杂的功能。在每个阶段完成后,都需要进行测试以确保没有引入错误。 二、监视点管理 实验中,监视点的管理包括五个关键操作: 1. 初始化监视点:设置初始状态,为后续添加、删除和检查操作做准备。 2. 添加监视点(wexpr):在特定位置设定监视点,用于捕获指定表达式的变化。 3. 删除监视点(dn):移除不再需要的监视点,释放相关的资源。 4. 显示监视点信息(infow):展示监视点的详细信息,包括其状态和相关表达式。 5. 检查监视点(cpu_exec):在CPU执行时检查监视点,如果满足条件则触发相应的动作。 三、i386手册的学习 实验要求参与者阅读并理解i386处理器的手册,这是为了更好地理解和操作基于x86架构的计算机系统。手册通常涵盖指令集、寄存器使用、内存管理等方面,是实现底层操作的基础。 总结来说,这个实验旨在培养学生的编程技能、理解复杂的计算机系统以及对底层硬件操作的掌握。通过实现表达式求值、监视点管理和i386处理器手册的学习,学生能够深化对计算机体系结构和操作系统原理的理解。
2021-03-29 上传