DataLab
Deadline: 2024.10.10 8:00AM
一、实验简介
CSAPP 第一章配套实验。
本实验的目的是加深同学们对整数和浮点数二进制表示的认识。同学们需要解出若干程序谜题,编写代码并通过正确性测试,最后提交代码和报告。希望同学们多加思考,在解题过程中能学到的远不止二进制本身,还能加深对位运算的理解,以及学到一些算法知识。
本实验分为常规部和荣誉部分。荣誉部分的难度较高,是本课程比较有挑战性的部分。
荣誉部分虽然占分,但是占分并不高,大家可以自己决定要不要做荣誉部分。Use your discretion!
二、部署实验环境
(1)下载
从 github
classroom 拉取ICS2024_datalab
文件夹,其中的内容就是本次实验用到的的文件了,拉取指令如下:
1 | git clone xxx # 将 xxx 替换为对应链接 |
(2)准备工作
- 确保已安装了 gcc
在终端中检查是否安装了 gcc:
1 | gcc -v |
如果已安装,终端将会反馈版本信息,否则会反馈
command not found
。
如未安装,尝试执行以下命令进行安装:
1 | sudo apt-get install gcc |
- 确保已安装了 make
检查是否安装 make,在终端输入:
1 | make -v |
同理,如未安装,尝试以此执行以下命令:
1 | sudo apt-get update |
- 确保实验文件能正常 make 并运行测试
在终端中进入 datalab/
文件夹目录。
键入 ls
查看内容,你应当看到如下文件:
1 | Driverhdrs.pm Makefile bits.c btest.c decl.c driver.pl ishow.c |
在终端中依次执行如下命令,以生成可执行文件并执行:
1 | make clean |
如果过程顺利,最后会输出测试结果,最后一行为
Total points: 0/69
。
如果过程中出现如下报错:
1 | /usr/bin/ld: cannot found -lgcc |
那么尝试执行:
1 | sudo apt install gcc-multilib |
- 确保 dlc(data lab compiler)能正常执行
依然在 datalab/
目录下,
执行:
1 | ./dlc bits.c |
如果遇到
./dlc: Permission denied
,说明没有当前文件的执行权限,执行:
1
chmod +x dlc
如果执行立即结束并且没有任何反馈,则没有问题。
三、实验提示与说明
(1)如何入手
推荐阅读顺序:本文档 > README
>
bits.c
的注释部分。
README
文档中对实验文件做了较为详细的介绍。
bits.c
是同学们唯一需要编辑的文件,其中包含了谜题规则介绍, 18
个谜题以及谜题内容、难度、分数等。
上面的两个文件请务必仔细阅读。
注意到,每一个谜题包含了如下信息:
- 能使用的运算符。
- 能使用的运算符总数量。
- 能使用的常数的值域范围。
- 变量类型。
- 能否使用控制语句(如
if
)等。
(2)测试
除了
bits.c
,你不应该编辑任何其余文件。完成谜题后,需要检验自己的代码是否正确:
首先,执行下述指令,检查每个函数使用的运算符类型、数目是否符合要求:
```shell ./dlc -e bits.c
1
2
3
4
5
6
7
* 如没有任何报错,按顺序执行下述指令,测试每个函数的正确性:
* ```shell
make clean
make all
./btestbtest
执行时会给出每个谜题(函数)是否通过测试(未通过时会给出测试数据),并且会计算你的最终得分。
你可以利用上
./ishow
和./fshow
来帮助你调试(用法见README
)。
四、提交实验
(1)内容要求
你需要提交至少两份文件,包含你的 bits.c
和一份实验报告。
实验报告应该包含以下内容:
实验标题,你的姓名,学号。
你在终端中执行
./dlc -e bits.c
后的截图。你在终端中执行
./btest
后的截图。描述你实现每个函数的思路。bits.c中不要求给自己的代码写注释(写了也无妨)
如果有,请务必在报告中列出引用的内容以及参考的资料。
对本实验的感受(可选)。
对助教们的建议(可选)。
(2)格式要求
可提交 .md
文件或者 .pdf
文件。不要提交
.doc
或 .docx
文件。
(如果提交 .md
文件,请确保助教能同时看到你报告中的截图!)
(3)上传
在终端运行以下指令:
1 | git add -A |
(4)打分规则
- 实验报告要求简洁清晰,不必追求字数,描述清楚思路即可
- 对每道谜题请先做思考,不要立即使用搜索引擎。
- 不允许抄袭其它人的代码,一旦发现,零分处理。
五、参考资料
http://csapp.cs.cmu.edu/3e/labs.html (lab 来源,本实验相较原文件有改动)
本文档编写时参考了22, 23年的实验文档。
负责助教:
- 伊凡 21307130047@m.fudan.edu.cn
- 李增昊 22307130108@m.fudan.edu.cn