2019编译课程设计:MARS仿真器4.5版使用与竞速规则详解

需积分: 0 2 下载量 177 浏览量 更新于2024-08-04 收藏 794KB DOCX 举报
本篇文档是关于2019年北京航空航天大学编译课程设计竞赛的指南,主要介绍了MARS仿真器的使用方法以及竞速排名规则。MARS仿真器是针对MIPS架构的教育工具,用于教学和实践中的程序设计与优化。 首先,MARS使用的是4.5版本,课程组对其进行了修改,并提供了相应的Java实现(Mars-jdk7-Re),学生可以通过教学平台judge.buaa.edu.cn的"课件下载"获取。在编译过程中,特别强调了只能选择基础指令和伪指令,而不能选择宏指令,以确保学习的基础性和安全性。此外,延迟槽的关闭也是一个关键设置,可能涉及到处理器性能的影响。 对于寄存器的使用,文档详细列出了每个寄存器的功能和用途。例如,$0($zero)作为常量0存储,$at保留给汇编器,而$v0-$v1主要用于函数调用的返回值,$a0-$a3则用于传递函数调用参数。临时寄存器$t0-$t7和$s0-$s7具有不同的作用,前者主要用于循环和函数内部,后者则涉及全局变量。特别提到的$t8-$t9是额外的临时寄存器,$gp代表全局指针,$sp是堆栈指针,$fp是帧指针,$ra则是返回地址,这些都是理解程序执行过程中的关键寄存器。 在实际操作中,学生需要通过MARS仿真器的菜单——>Tools打开InstructionStatistics功能,连接到MIPS环境,然后编译并运行汇编代码。为了查看指令统计,用户需点击EnableRefresh按钮,这样可以实时监控程序的执行情况,包括各类型的指令计数,有助于优化代码性能。 竞速排名部分,比赛的成绩根据程序运行后的统计信息进行计算。总分Total由ALU(算术逻辑单元)操作、Jump和Branch(跳转和分支)指令、Memory(内存访问)和其他指令四部分组成,每个部分都有不同的权重。ALU操作权重最高为1,Jump/Branch为2,Memory也为2,其他为1。最终排名依据FinalCycle值,该值是根据上述权重计算得出的,FinalCycle越小,排名越靠前。如果程序违反了规则,将取消竞速资格。 这篇文档不仅指导学生如何使用MARS仿真器进行汇编语言编程,还提供了比赛规则和性能优化策略,对参与课程设计的学生来说具有很高的实用价值。