Skip to content

Commit f5b1ff0

Browse files
authored
Merge pull request #16 from ICS-25Fall-FDU/lab1
lab1
2 parents 4d7a328 + 63d1970 commit f5b1ff0

File tree

2 files changed

+214
-0
lines changed

2 files changed

+214
-0
lines changed

docs/.vitepress/config/zh.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ function sidebarGuide(): DefaultTheme.Sidebar {
5858
items: [
5959
{ text: 'ICS 实验入门手册', link: '/lab/manual' },
6060
{ text: 'Lab0', link: '/lab/lab0' },
61+
{ text: 'Lab1', link: '/lab/lab1' }
6162
]
6263
},
6364
{

docs/lab/lab1.md

Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
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

Comments
 (0)