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
-
LUI指令的行为是什么?
LUI(Load upper Immediate)用来构建一个32bit常数,属于U型,该指令将U型立即数置于目的寄存器的高20位,低12位补零
- mstatus寄存器的结构是怎么样的?
mstatus(Machine Status Registers),是一个机器模式下的MXLEN bit的可读可写状态控制寄存器。格式如下,图3.6为RV32格式,图3.7为RV64格式。
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的发生