Lab A
勘误
src/assembler.h
中,对 BR 的注释:
cpp
"BR", // 02: "0000000" + pcoffset(line[1],9)
改为:
cpp
"BR", // 02: "0000111" + pcoffset(line[1],9)
实验文档 pdf 最后一面的测试指令改为:
bash
# 创建存放输出的文件夹,若已经创建可忽略
mkdir ./test/actual
# 运行汇编器,对测试样例汇编
./assembler -f ./test/testcases/test1.asm -o ./test/actual/test1.bin
# 比较实际输出和预期输出,如果一致,应该什么都不显示
diff ./test/actual/test1.bin ./test/expected/test1.bin
handout
- 要求得到能正确执行的汇编器,不严格要求使用框架代码/框架提供的构建方式,但要求使用 C/C++ 语言完成。
提交说明
- 实验完成后腾讯会议线上提问检查,时间为每天上午 9:30 到 10:30
- 每天检查前会在群内公布腾讯会议号
- BB 上需要提交 report (5% 分数)
- 没有格式要求,简略说明即可
DDL
检查实验时间最晚 2023 年 1 月 7 日上午 10:30,之后不接受检查 or 提交。
为什么你应该开始学习 Linux
回顾一下我们常用的 Windows 系统:
- 图形化操作为主
- 没有方便的自带的「包管理」
包管理是什么?我们都知道,不同软件间,很多基础的代码是可以被复用的:例如,我写一个压缩软件,和我写一个通信软件,可能都需要加密模块。所以,我们希望有一个方便的办法来获取「加密模块」的代码,这样我直接 #include 就可以继续使用了。这样的代码被称为库代码。我们常说的「调库」,就是指使用别的库提供的接口,来实现丰富的自定义功能。
当然,实际分发的不一定是加密模块的代码,还可能是已经被编译为可链接文件的静态/动态二进制库等,但功能是类似的,都是为了实现「复用」。
所以,我们需要一个类似「软件市场」的程序来上传,下载这些常用的库(当然也可以直接上传,下载应用程序)。
这样的类似「软件市场」的程序就称为包管理器。Linux 系统一般都自带包管理器,所以软件开发经常会需要使用 Linux 系统(Windows 配置起来可能会更加麻烦)。
如何使用/学习 Linux
可以在自己的实体机上安装 Linux(采用双系统等),也可以采用虚拟机(模拟一个 Linux 系统)。
「虚拟机」能让我们方便的用上 Linux 系统:
- Windows 下安装虚拟机,有 WSL2 等选择
- 采用在线虚拟机,Vlab
具体学习上,可以参考 我校 lug 社团编篡的入门教程。
Makefile
为什么需要使用 Makefile?可以参考这篇文章。可以在阅读时思考以下问题:
- C/CPP 代码是如何编译到程序的?
- 一个 C/CPP 工程可能会包含很多源代码文件,如果每次都完全编译,会耗费大量的时间,Make 是如何解决这一问题的?
代码编辑
以下都是能够完成附加实验的代码编辑方案:
如果使用 Vlab:
- 采用 Vlab 图形界面的 VSCode
- 采用 Vlab 提供的网页 VSCode
- 采用 SSH 远程连接(见习题课演示)
如果使用本地:
- 可以使用 IDE,比如 CLion
- 可以使用本地 VSCode