2021编译器课程设计:MIPS竞速排名与MARS仿真器指南

需积分: 0 2 下载量 57 浏览量 更新于2024-08-05 收藏 561KB PDF 举报
"该资源是2021年编译器课程设计的竞速排名规则以及MARS仿真器的使用指南。重点在于如何利用MARS进行指令统计,以计算MIPS代码的权重,从而确定排名。同时,规定了在编写MIPS代码时的限制和寄存器的使用规范。" 在MARS仿真器的使用中,首先从菜单栏选择"Tools",然后打开"Instruction Statistics"工具来监控和统计代码中的指令执行情况。在弹出的窗口中,需要点击"Connect to MIPS"按钮连接到MIPS处理器,以便在执行代码时收集指令统计数据。 竞速排名的规则主要包括: 1. MIPS代码必须能在课程组提供的修改版MARS4.5上正常运行。 2. 允许使用基础指令、扩展指令和伪指令,但禁止使用宏。 3. MARS的延迟槽需关闭,内存布局应设为默认设置。 4. 寄存器的使用有特定要求,例如: - $0 ($zero) 用于表示常量0。 - $1 ($at) 供汇编器内部使用。 - $2-$3 ($v0-$v1) 用于函数调用返回值。 - $4-$7 ($a0-$a3) 传递函数参数。 - $8-$15 ($t0-$t7) 作为临时寄存器。 - $16-$23 ($s0-$s7) 用作全局寄存器。 - $24-$25 ($t8-$t9) 也是临时寄存器。 - $26-$27 ($k0-$k1) 保留给中断和异常处理。 - $28 ($gp) 用于全局变量访问。 - $29 ($sp) 作为堆栈指针。 - $30 ($fp 或 $s8) 作为帧指针或全局寄存器。 - $31 ($ra) 存储返回地址。 排名的依据是基于指令的执行次数及其权重: - Jump/Branch 指令(如 jal, bne)权重为1.5。 - Mem 指令(如 lw, sh)权重为2.5。 - Mult 指令(如 mul, madd)权重为3。 - Div 指令(如 div, divu)权重为100。 - 其他所有未特别指定的指令(如 addu, ori, mflo)权重为1。 如果参赛者违反上述规则,将会被取消竞速排名资格。为了获取指令统计,需要在MARS中运行代码并观察Instruction Statistics窗口中的结果。