### 30天操作系统实验报告知识点汇总 #### 实验主要内容概览 本实验报告主要记录了一个为期30天的操作系统开发过程中的关键知识点和技术细节。报告涵盖了从制作启动扇区到开发基本操作系统功能的全过程。 #### 内容1:制作真正的IPL(初始程序加载) - **启动区与IPL**:实验初期制作了一个简单的启动扇区(IPL),即`ipl.nas`文件。但最初的版本并不包含实际的操作系统代码,而是作为引导加载程序。 - **IPL的功能**:真正的IPL应能正确地加载操作系统的核心部分。 - **BIOS函数调用**: - `JC error`:如果BIOS函数调用失败(即有错误发生),进位标志CF为1,则跳转到`error`标号处执行错误处理代码。 - `MOVAH,0x02`:准备调用BIOS的硬盘读取函数。 - `MOVAL,1`:指定读取1个扇区。 - `INT 0x13`:实际调用BIOS的0x13号中断,实现硬盘读取功能。 - 使用`CH`, `CL`, `DH`, `DL`寄存器分别表示柱面号、扇区号、磁头号和驱动器号。 - 启动区装载位置为`C0-H0-S1`,即柱面0,磁头0,扇区1。 - **缓冲区地址**:软盘数据装载到内存地址0x8200到0x83ff之间,其中段地址为`0x0820`,偏移地址为`0x0000`。 #### 内容2:试错机制 - **条件转移指令**:`JAE`(如果大于或等于则跳转)和`JNC`(如果不进位则跳转)。 - **试错次数限制**:通过设置一个计数器(例如`SI`寄存器),当其值超过预设的阈值(比如5次)时,跳转到`error`标号进行错误处理。 - **重新读取**:如果没有达到预设的错误次数,则尝试重新读取扇区,直到成功为止。 #### 内容3:读取18个扇区 - **动态地址计算**:为了读取连续的18个扇区,通过调整`ES`段寄存器来实现内存地址的动态移动。每读取一个扇区,`ES`增加0x200个字节,以确保每个新读取的扇区数据被正确放置在内存中。 - **处理多个扇区**:可以一次性设置`AL`寄存器为17(表示读取18个扇区,从第2个扇区开始),简化重复读取的过程。 - **运行结果**:从`C0-H0-S2`到`C0-H0-S18`的8704字节内容被装载到内存0x8200到0xa3ff之间。 #### 内容4:读取10个柱面 - **读取多个柱面**:利用循环结构,逐步读取10个柱面的内容到内存中。 - **条件转移指令**:`JB`(如果小于则跳转)用于控制循环的退出条件。 - **定义常量**:使用`EQU`指令定义常量`CYLSEQU10`,表示要读取10个柱面。这使得在后续的开发过程中可以轻松调整读取的柱面数量。 - **运行结果**:将10个柱面的数据加载到内存0x08200到0x34fff之间。 #### 内容5:着手开发操作系统 - **编写源代码**:使用`.nas`文件编写汇编语言源代码。 - **编译与链接**:使用`nask`工具编译源代码为`.sys`文件。 - **安装到磁盘映像**:通过`makeinstall`命令将编译后的操作系统安装到磁盘映像文件`haribote.img`中。 - **模拟机测试**:在模拟机环境中测试安装后的操作系统。 ### 总结 本实验报告详细记录了从创建简单的IPL到逐步完善操作系统的整个过程。通过学习和实践这些基础知识和技术,可以深入理解操作系统的基本原理以及如何构建一个简易的操作系统。此外,通过对条件转移指令、BIOS函数调用等关键技术的掌握,有助于加深对计算机硬件与软件交互的理解。
剩余13页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助