PA1报告

发布时间 2024-01-06 20:34:08作者: HiDark

PA1 报告


1.从状态机视角理解程序运行

前两次循环
(0, x, x) -> (1, 0, x) -> (2, 0, 0) -> (3, 0, 1) -> (4, 1, 1) -> (2, 1, 1) -> (3, 1, 2) -> (4, 3, 2) -> (2, 3, 2) -> ...
最后两次循环
(2, 4851, 98) -> (3, 4851, 99) -> (4, 4950, 99) -> (2, 4950, 99) -> (3, 4950, 100)  -> (4, 5050, 100) -> (5, 5050, 100)-> (5, 5050, 100)

2.理解基础设施

500*90%*30*20=270000,换算成小时为75小时!

3.RTFM,科学查阅手册

  • riscv32有哪几种指令格式?

    6种,I、S、R、B、U、J

    image-20231020102455013

  • LUI指令的行为是什么?

    LUI(Load upper Immediate)用来构建一个32bit常数,属于U型,该指令将U型立即数置于目的寄存器的高20位,低12位补零

image-20231020102623482

  • mstatus寄存器的结构是怎么样的?

​ mstatus(Machine Status Registers),是一个机器模式下的MXLEN bit的可读可写状态控制寄存器。格式如下,图3.6为RV32格式,图3.7为RV64格式。

image-20231020103334530

4 shell 统计源代码个数及总行数

# 统计nemu目录下所有文件数
find . -name "*.[ch]" | xargs wc -l
# 使用git checkout pa0 回到pa0分支执行上条命令即可得到框架代码量
# 共新增519行

# 统计特定文件数
find . -name "*.[ch]" | grep -E "^\./(src|include)" | grep -E -v "^\./include/config" | grep -E -v "mips32|riscv64|loongarch32r" | wc

5 RTFM -Wall -Werror

  • -Wall

    启用所有可能出现问题的警告,可与特定警告种类配合

  • -Werror

    把所有警告都看成错误。-Werror=可指定某一种警告看成错误

    两个选项都是为了在编译时刻把潜在的fault直接转变成failure,减少BUG的发生