实验1 汇编语言与监控程序
实验1:熟悉RISC-V汇编与监控程序
实验目的
本实验是一系列实验的第一个实验。计算机组成原理的一系列实验最终的目的是做出一个兼容RISCV32I指令的五级流水线处理器,并可以执行一个监控程序。监控程序使用了RISCV32I中的19条指令,实验只要实现这19条指令即可(参看监控程序源代码下的README.md文件给出的19条指令的描述)。为了完成所有的实验,熟悉RISC-V的汇编语言编程,机器语言格式是非常必要的。本实验是所有实验的基础,帮助同学们熟悉RISC-V的汇编语言。
实验环境
各个操作系统平台上的RISC-V的交叉编译环境,模拟器环境。本实验对于操作系统环境没有特殊的要求,Windows,Linux或者Mac下面均可。但是,由于之后的实验需要编写Verilog代码,并且只能使用Vivado编程环境,因此建议使用Windows环境或者Linux环境。
实验内容
阅读监控程序源代码,使用模拟器运行监控程序,通过终端连接监控程序,使用RISC-V汇编编写代码,并且在监控程序中运行。
1. 在模拟器中运行 RISC-V监控程序,掌握 Term 中几个命令的使用方法。
2. 编写汇编程序,求前 10 个 Fibonacci 数,将结果保存到起始地址为 0x80400000 的 10 个字中,并用 D 命令检查结果正确性。
3. 编写汇编程序,将 ASCII 可见字符(0x21\~0x7E)从终端输出。
4. 编写汇编程序,求第 60 个 Fibonacci 数,将结果保存到起始地址为 0x80400000 的 8 个字节中,并用 D 命令检查结果正确性。提示:计算过程中可以用两个 32 位寄存器保存 64 位整数。
实验原理
监控程序使用的是标准的RISC-V程序编写而成,可以在任意的兼容RISC-V的模拟器中执行。终端程序通过串口程序与监控程序打交道。终端程序还具有汇编和反汇编的功能,将程序汇编之后输入到监控程序中,或者配合监控程序输出做反汇编。具体的功能建议阅读监控程序和终端程序的代码。
主要实验步骤
① 安装和配置实验环境,过程参考前述的模拟器安装,监控程序执行的流程。
② 按照实验内容的要求完成具体的汇编程序代码,并在监控程序中执行。
③ 阅读监控程序和终端程序,了解其工作原理。
实验结果记录
1. 撰写实验报告,记录上述的实验过程及汇编代码。留存实验过程的截图,或者是通过录屏记录实验过程。
2. 撰写监控程序以及终端程序的代码分析报告,包括程序的结构以及程序与外部交互的流程。
实验思考题(实验报告需要提交实验思考题)
-
比较RISC-V指令寻址方法与x86指令寻址方法的异同。
-
阅读监控程序,列出监控程序的19条指令,请根据自己的理解对用到的指令进行分类,并说明分类原因。(参考README.md)
-
结合term源代码和kernel源代码说明,term是如何实现用户程序计时的。
-
说明kernel是如何使用串口的(在源代码中,这部分有针对FPGA与QEMU两个版本的代码,任选其一进行分析即可)。
-
请问term如何检查kernel已经正确连入,并分别指出检查代码在term与kernel源码中的位置。
实验1的实验报告不需要涉及到非基础版本的监控程序。之后,如果计划设计的处理器需要支持扩展版本的监控程序,还是需要阅读扩展版本的监控程序。
实验1的代码可以使用19条指令之外的RISCV的指令,这样就需要在实验6中实现对应的指令。