Lab1: DataLab
实验简介
CSAPP 第一章配套实验。
本实验是 CSAPP 第一章配套实验,目的是加深同学们对整数和浮点数二进制表示的认识。同学们需要解出若干程序谜题,编写代码并通过正确性测试,最后提交代码和报告。希望同学们多加思考,在解题过程中能学到的远不止二进制本身,还能加深对位运算的理解,以及学到一些算法知识。
本实验的满分为 110 分。每迟交一天(迟交 1ms 到 24h 均视作一天)会在你的得分上扣除 5 分,扣完为止,报告另外算分。例如:如果你迟交一天,但是完成了 107 分的作业,则你的实验得分为 100 分,多余的 2 分可以加到报告的分数上。
部署实验环境
领取作业并克隆仓库到本地
点击 链接 接受作业。
WARNING
上一次作业还没选择名字的同学点进链接会提示你选择,请尽快完成这一步!
从 GitHub Classroom 拉取 lab1-datalab-xxx 仓库,其中的内容就是本次实验用到的文件了,拉取指令如下:
git clone git@github.com:ICS-25Fall-FDU/lab1-datalab-xxx.git # 将 xxx 替换为你的 GitHub 用户名
cd lab1-datalab-xxx安装必要软件
确保已安装了 gcc
在终端中检查是否安装了 gcc:
gcc -v如果已安装,终端将会反馈版本信息,否则会反馈 command not found 。
如未安装,尝试执行以下命令进行安装:
sudo apt-get install gcc确保已安装了 make
检查是否安装 make,在终端输入:
make -v同理,如未安装,尝试以此执行以下命令:
sudo apt-get update
sudo apt-get install make本实验需要用到以下 C 运行库和编译包:
sudo apt-get install libc6 libc6-dev libc6-dev-i386确保实验文件能正常 make 并运行测试
键入 ls 查看内容,你应当看到如下文件:
Driverhdrs.pm Driverlib.pm Makefile README bits.c bits.h btest btest.c
btest.h decl.c dlc driver.pl fshow fshow.c ishow ishow.c test.sh tests.c在终端中依次执行如下命令,以生成可执行文件并执行:
make clean
make all
./btest如果过程顺利,最后会输出测试结果,最后一行为 Total points: 0/110 。
如果过程中出现如下报错:
/usr/bin/ld: cannot found -lgcc那么尝试执行:
sudo apt install gcc-multilib确保 dlc(data lab compiler)能正常执行
执行:
./dlc bits.c如果遇到 ./dlc: Permission denied,说明没有当前文件的执行权限,执行:
chmod +x dlc增加执行权限。
如果执行立即结束并且没有任何反馈,则没有问题。
TIP
./dlc -e bits.c 可以打印每个函数的操作数。
实验提示与说明
如何入手
推荐阅读顺序:本文档 > README > bits.c 的注释部分。
README 文档中对实验文件做了较为详细的介绍。bits.c 是同学们唯一需要编辑的文件,其中包含了谜题规则介绍,18 个谜题以及谜题内容、难度、分数等。上面的两个文件请务必仔细阅读。
注意到,每一个谜题包含了如下信息:
- 能使用的运算符。
- 能使用的运算符总数量。
- 能使用的常数的值域范围。
- 变量类型。
- 能否使用控制语句(如
if)等。
测试
除了
bits.c,你不应该编辑任何其余文件。完成谜题后,需要检验自己的代码是否正确:
首先,执行下述指令,检查每个函数使用的运算符类型、数目是否符合要求:
shell./dlc -e bits.c如没有任何报错,按顺序执行下述指令,测试每个函数的正确性:
shellmake clean make all ./btestbtest执行时会给出每个谜题(函数)是否通过测试(未通过时会给出测试数据),并且会计算你的最终得分。
你可以利用上
./ishow和./fshow来帮助你调试(用法见README)。
提交
截止时间:10 月 14 日 23:59。逾期将扣除部分分数。
内容要求
你需要提交至少两份文件,包含你的 bits.c 和一份实验报告。
实验报告应该包含以下内容:
- 实验标题,你的姓名,学号。
- 你在终端中执行
./dlc -e bits.c后的截图。 - 你在终端中执行
./btest后的截图。 - 描述你实现每个函数的思路。
bits.c中不要求给自己的代码写注释(写了也无妨) - 如果有,请务必在报告中列出引用的内容以及参考的资料。
- 对本实验的感受(可选)。
- 对助教们的建议(可选)。
格式要求
可提交 .md 文件或者 .pdf 文件。请勿提交 .doc 或 .docx 文件。
(如果提交 .md 文件,请确保助教能同时看到你报告中的截图!)
TIP
在你的 Markdown 报告中插入图片时,请将图片文件放在仓库的 images/ 或 assets/ 文件夹下,并使用 相对路径(如 images/screenshot.png)插入图片。常见支持的图片格式有 PNG、JPG 和 GIF。插入图片的 Markdown 语法示例:。上传报告时,请确保图片文件已一并上传到 GitHub。如果你不确定这一步是否正确,请进入你的远程仓库预览你的报告。
上传
打开终端,在 lab1-datalab-xxx 路径下 执行以下指令:
# 提交当前文件夹下的所有更改到暂存区
git add -A
# 将暂存区的所有更改提交到本地仓库
git commit -m "xxx(可以是你的提交注释)"
# 将本地仓库推送到远程
git push评分规则
- 实验报告要求简洁清晰,不必追求字数,描述清楚思路即可。
- 对每道谜题请先做思考,不要立即使用搜索引擎,如果使用了 AI,请在提交的报告中注明。
- 严禁抄袭其它人的代码,一旦发现,零分处理。
参考资料
- CMU 原版 Lab
- 本文档编写时参考了 24 年的实验文档 。
本 Lab 负责助教
特别鸣谢:24 年秋学期 ICS 助教李增昊
同时感谢 @徐厚泽 助教往本实验中加入了 bitReverse 题目,感谢 @朱程炀 助教往本实验中加入了 float_inv 题目。
Copilot