在
本系列学习以已有的编程基础为佳,若未具备相关背景知识也非问题所在,本系列将主要基于《[自制操作系统教程]》(作者:川合秀实)、《自己动手写操作系统》两本书籍。
一、准备工作
- 环境搭建:bochsvirtalbox,Windows虚拟机,nasm。
- 操作流程回顾:在前述的编程学习过程中,我们的引导程序已成功加载软盘的第一个柱面数据至内存的x8处;引导区本身的51字节也被BIOS加载至x8处。
二、具体操作
本节课的目标是从这些数据中检索出软盘上的程序,并执行它。以下是实现这一过程的关键步骤:
- 首先定位文件名所在磁盘的x6位置。
- 确定文件内容在磁盘中的x4位置。
- 将x4处的磁盘内容加载至内存的x8+x4=xc处。
具体操作如下所示:
%define_BOOT_DEBUG_
%ifdef_BOOT_DEBUG_org1h %else org7ch %endif
; 每读取一个柱面,共1柱面*面*18扇区*51字节=184byte=18K
start: JMP init
; 空节,用于调试时注释此行并使用nasmBoot.asm生成.com文件进行调试
%ifdef_BOOT_DEBUG_
org 7ch
%else org 1h %endif
CYLSEQU1
; 以上代码省略...
三、启动镜像
本节将介绍如何制作启动镜像:
- 将NotOneOs.sys程序拷贝至虚拟磁盘。
- 格式化虚拟磁盘中,载入镜像文件。
- 在Bochs中加载并运行Boot.img文件。
具体操作如下所示:
# 这里的步骤省略...
四、调试
使用Bochs虚拟机的调试功能,通过反汇编代码查找重点关注的位置,设置断点等手段进行调试。以下是调试过程的具体步骤:
- 进入调试状态。
- 设置断点位置。
- 控制程序执行过程。
具体操作如下所示:
# 这里的步骤省略...
五、总结
通过本系列学习,我们可以逐步掌握自制的软件制作流程。在此过程中,我们将不断巩固已有的编程知识,同时也要关注新的知识点与技能。相信只要我们坚持不懈,一定能够成为优秀的软件工程师!