【第二次实验记录1】主要涉及的是FAT12文件系统的理解和应用,以及使用C/C++和nasm汇编语言编写程序来操作FAT12镜像文件。实验目标旨在深化对FAT12文件系统的理解,熟悉gcc+nasm联合编译,并了解实模式与保护模式的基础知识。 1. **FAT12文件系统**: FAT12是文件分配表(File Allocation Table)的一种版本,主要用在早期的MS-DOS和Windows系统中,用于管理磁盘上的文件和目录。它包含一个或多个FAT表,每个FAT表记录了磁盘上的簇(簇是文件系统分配的最小存储单元)分配情况。FAT12的特点是对12位的数字进行编码,能管理的簇数量有限,适合于小容量存储设备。 2. **项目结构**: 项目由多个文件组成,包括: - `main.cpp`:主程序,负责读取FAT12镜像,提示用户输入指令,处理不同类型的命令如ls、ls -l、cat。 - `structure.h`:声明了4种数据结构:Sector(扇区)、FAT(文件分配表)、Entry(文件/目录项)、Directory(目录)。 - `structure.cpp`:实现这些数据结构的方法。 - `constants.h`:包含一些常量定义,如FAT12相关的配置参数。 - `my_print.asm`:使用nasm编写的输出函数,用于替代标准输出库函数。 3. **制作FAT12镜像**: 在虚拟机中创建FAT12镜像文件`a.img`,并通过C/C++和nasm编写的程序读取和操作这个镜像。需要注意,由于硬编码的原因,镜像文件的名字不能随意更改,否则程序可能无法正确读取。 4. **挂载和img文件**: - **img文件**:是磁盘镜像文件,通常用于创建软盘、光盘等的映像。在这个实验中,`a.img`是软盘的镜像,包含了FAT12文件系统的结构。 - **挂载**:挂载是指将一个存储设备(如软盘镜像)与文件系统连接,使得我们可以通过文件系统来访问存储设备的内容。在Linux中,通过挂载点将img文件映射到一个目录,用户就可以如同操作真实磁盘一样操作这个镜像文件。 5. **项目实施**: 实验要求包括: - 使用C/C++和nasm编写程序,main.cpp作为主程序,my_print.asm提供输出功能。 - main.cpp需能读取FAT12镜像,接收用户输入,根据输入执行ls、ls -l、cat等命令,并调用my_print.asm的输出函数。 - 在nasm的输出函数中,复用之前编写的IO汇编代码。 - 编译时需注意C++和nasm的联合编译,例如使用`g++-multilib`,`nasm`生成中间文件,然后用`gcc`进行链接。 6. **编译与测试**: 在编译过程中,可能会遇到问题,需要确保正确引用nasm生成的函数,并且在C++中使用`extern "C"`来避免名称修饰。在解决编译错误时,可以参考相关博客或其他资源。 通过这个实验,学生不仅能够深入理解FAT12文件系统的工作原理,还能提升在实模式和保护模式下的编程能力,同时熟悉Linux环境下的文件挂载操作。这是一个理论与实践相结合的综合性实验,对于提升IT专业学生的技能有很大帮助。
剩余16页未读,继续阅读
- 粉丝: 30
- 资源: 319
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0