|
| 1 | +# Lab1: DataLab |
| 2 | + |
| 3 | +## 实验简介 |
| 4 | + |
| 5 | +CSAPP 第一章配套实验。 |
| 6 | + |
| 7 | +本实验的目的是加深同学们对整数和浮点数二进制表示的认识。同学们需要解出若干程序谜题,编写代码并通过正确性测试,最后提交代码和报告。希望同学们多加思考,在解题过程中能学到的远不止二进制本身,还能加深对位运算的理解,以及学到一些算法知识。 |
| 8 | + |
| 9 | +本实验分为常规部和荣誉部分。荣誉部分的难度较高,是本课程比较有挑战性的部分。 |
| 10 | + |
| 11 | +荣誉部分虽然占分,但是占分并不高,大家可以自己决定要不要做荣誉部分。生活就像海洋,只有意志坚强的人才能到达彼岸! |
| 12 | + |
| 13 | +## 部署实验环境 |
| 14 | + |
| 15 | +### (1)下载 |
| 16 | + |
| 17 | +从 `github classroom` 拉取`lab1-datalab-xxx` 文件夹,其中的内容就是本次实验用到的的文件了,拉取指令如下: |
| 18 | + |
| 19 | +```shell |
| 20 | +git clone git@github.com:ICS-25Fall-FDU/lab1-datalab-xxx.git # 将 xxx 替换为你的 GitHub 用户名 |
| 21 | +cd lab1-datalab-xxx |
| 22 | +``` |
| 23 | + |
| 24 | +### (2)准备工作 |
| 25 | + |
| 26 | +#### 确保已安装了 gcc |
| 27 | + |
| 28 | +在终端中检查是否安装了 gcc: |
| 29 | + |
| 30 | +```shell |
| 31 | +gcc -v |
| 32 | +``` |
| 33 | + |
| 34 | +如果已安装,终端将会反馈版本信息,否则会反馈 `command not found` 。 |
| 35 | + |
| 36 | +如未安装,尝试执行以下命令进行安装: |
| 37 | + |
| 38 | +```shell |
| 39 | +sudo apt-get install gcc |
| 40 | +``` |
| 41 | + |
| 42 | +#### 确保已安装了 make |
| 43 | + |
| 44 | +检查是否安装 make,在终端输入: |
| 45 | + |
| 46 | +```shell |
| 47 | +make -v |
| 48 | +``` |
| 49 | + |
| 50 | +同理,如未安装,尝试以此执行以下命令: |
| 51 | + |
| 52 | +```shell |
| 53 | +sudo apt-get update |
| 54 | +sudo apt-get install make |
| 55 | +``` |
| 56 | + |
| 57 | +本实验需要用到以下 C 标准库: |
| 58 | + |
| 59 | +```shell |
| 60 | +sudo apt-get install libc6 libc6-dev libc6-dev-i386 |
| 61 | +``` |
| 62 | + |
| 63 | +#### 确保实验文件能正常 make 并运行测试 |
| 64 | + |
| 65 | +键入 `ls` 查看内容,你应当看到如下文件: |
| 66 | + |
| 67 | +```shell |
| 68 | +Driverhdrs.pm Driverlib.pm Makefile README bits.c bits.h btest btest.c |
| 69 | +btest.h decl.c dlc driver.pl fshow fshow.c ishow ishow.c test.sh tests.c |
| 70 | +``` |
| 71 | + |
| 72 | +在终端中依次执行如下命令,以生成可执行文件并执行: |
| 73 | + |
| 74 | +```shell |
| 75 | +make clean |
| 76 | +make all |
| 77 | +./btest |
| 78 | +``` |
| 79 | + |
| 80 | +如果过程顺利,最后会输出测试结果,最后一行为 `Total points: 0/69` 。 |
| 81 | + |
| 82 | +如果过程中出现如下报错: |
| 83 | + |
| 84 | +```shell |
| 85 | +/usr/bin/ld: cannot found -lgcc |
| 86 | +``` |
| 87 | + |
| 88 | +那么尝试执行: |
| 89 | + |
| 90 | +```shell |
| 91 | +sudo apt install gcc-multilib |
| 92 | +``` |
| 93 | + |
| 94 | +#### 确保 dlc(data lab compiler)能正常执行 |
| 95 | + |
| 96 | +执行: |
| 97 | + |
| 98 | +```shell |
| 99 | +./dlc bits.c |
| 100 | +``` |
| 101 | + |
| 102 | +如果遇到 `./dlc: Permission denied`,说明没有当前文件的执行权限,执行: |
| 103 | + |
| 104 | +```shell |
| 105 | +chmod +x dlc |
| 106 | +``` |
| 107 | + |
| 108 | +增加执行权限。 |
| 109 | + |
| 110 | +如果执行立即结束并且没有任何反馈,则没有问题。 |
| 111 | + |
| 112 | +## 实验提示与说明 |
| 113 | + |
| 114 | +### (1)如何入手 |
| 115 | + |
| 116 | +推荐阅读顺序:本文档 > `README` > `bits.c` 的注释部分。 |
| 117 | + |
| 118 | +`README` 文档中对实验文件做了较为详细的介绍。 |
| 119 | + |
| 120 | +`bits.c` 是同学们唯一需要编辑的文件,其中包含了谜题规则介绍, 18 个谜题以及谜题内容、难度、分数等。 |
| 121 | + |
| 122 | +上面的两个文件请务必仔细阅读。 |
| 123 | + |
| 124 | +注意到,每一个谜题包含了如下信息: |
| 125 | + |
| 126 | +* 能使用的运算符。 |
| 127 | +* 能使用的运算符总数量。 |
| 128 | +* 能使用的常数的值域范围。 |
| 129 | +* 变量类型。 |
| 130 | +* 能否使用控制语句(如 `if` )等。 |
| 131 | + |
| 132 | +### (2)测试 |
| 133 | + |
| 134 | +* 除了 `bits.c` ,你不应该编辑任何其余文件。 |
| 135 | + |
| 136 | +* 完成谜题后,需要检验自己的代码是否正确: |
| 137 | + |
| 138 | + * 首先,执行下述指令,检查每个函数使用的运算符类型、数目是否符合要求: |
| 139 | + |
| 140 | + * ```shell |
| 141 | + ./dlc -e bits.c |
| 142 | + ``` |
| 143 | + |
| 144 | + * 如没有任何报错,按顺序执行下述指令,测试每个函数的正确性: |
| 145 | + |
| 146 | + * ```shell |
| 147 | + make clean |
| 148 | + make all |
| 149 | + ./btest |
| 150 | + ``` |
| 151 | + |
| 152 | + * `btest` 执行时会给出每个谜题(函数)是否通过测试(未通过时会给出测试数据),并且会计算你的最终得分。 |
| 153 | + |
| 154 | +* 你可以利用上 `./ishow` 和 `./fshow` 来帮助你调试(用法见 `README`)。 |
| 155 | + |
| 156 | +## 提交实验 |
| 157 | + |
| 158 | +### (1)内容要求 |
| 159 | + |
| 160 | +你需要提交至少两份文件,包含你的 `bits.c` 和一份实验报告。 |
| 161 | + |
| 162 | +实验报告应该包含以下内容: |
| 163 | + |
| 164 | +* 实验标题,你的姓名,学号。 |
| 165 | + |
| 166 | +* 你在终端中执行 `./dlc -e bits.c` 后的截图。 |
| 167 | +* 你在终端中执行 `./btest` 后的截图。 |
| 168 | +* 描述你实现每个函数的思路。`bits.c` 中不要求给自己的代码写注释(写了也无妨) |
| 169 | +* 如果有,请务必在报告中列出引用的内容以及参考的资料。 |
| 170 | +* 对本实验的感受(可选)。 |
| 171 | +* 对助教们的建议(可选)。 |
| 172 | + |
| 173 | +### (2)格式要求 |
| 174 | + |
| 175 | +可提交 `.md` 文件或者 `.pdf` 文件。请勿提交 `.doc` 或 `.docx` 文件。 |
| 176 | +(如果提交 `.md` 文件,请确保助教能同时看到你报告中的截图!) |
| 177 | + |
| 178 | +> [!tip] |
| 179 | +> |
| 180 | +> 在你的 Markdown 报告中插入图片时,使用 **相对路径** 而不是绝对路径。如果你不确定这一步是否正确,请进入你的远程仓库预览你的报告。 |
| 181 | + |
| 182 | +### (3)上传 |
| 183 | + |
| 184 | +打开终端,**在 `lab1-datalab-xxx` 路径下** 执行以下指令: |
| 185 | + |
| 186 | +```shell |
| 187 | +# 提交当前文件夹下的所有更改到暂存区 |
| 188 | +git add -A |
| 189 | +
|
| 190 | +# 将暂存区的所有更改提交到本地仓库 |
| 191 | +git commit -m "xxx(可以是你的提交注释)" |
| 192 | +
|
| 193 | +# 将本地仓库推送到远程 |
| 194 | +git push |
| 195 | +``` |
| 196 | + |
| 197 | +### (4)评分规则 |
| 198 | + |
| 199 | +* 实验报告要求简洁清晰,不必追求字数,描述清楚思路即可 |
| 200 | +* 对每道谜题请先做思考,不要立即使用搜索引擎。 |
| 201 | +* 不允许抄袭其它人的代码,一旦发现,零分处理。 |
| 202 | + |
| 203 | +## 参考资料 |
| 204 | + |
| 205 | +* [CMU 原版 Lab](http://csapp.cs.cmu.edu/3e/labs.html) |
| 206 | +* 本文档编写时参考了24年的实验文档 。 |
| 207 | + |
| 208 | +> [!info] 本 Lab 负责助教 |
| 209 | +> |
| 210 | +> * [蔡亦扬](mailto:caiyy23@m.fudan.edu.cn) |
| 211 | +> * [项正豪](mailto:zhxiang23@m.fudan.edu.cn) |
| 212 | +> |
| 213 | +> **特别鸣谢**:24 年秋学期 ICS 助教李增昊 |
0 commit comments