30天自制操作系统
上QQ阅读APP看书,第一时间看更新

5 着手开发操作系统

总算写到这个题目了,这代表我们终于完成了启动区的制作。

下面,我们先来编写一个非常短小的程序,就只让它HLT。

最简单的操作系统?

fin:
    HLT
    JMP fin

将以上内容保存为haribote.nas,用nask编译,输出成haribote.sys。到这里没什么难的。

接下来,将这个文件保存到磁盘映像haribote.img里。可能有人不明白什么叫保存到映像里,其实就是像下面这样操作:

❏ 使用make install指令,将磁盘映像文件写入磁盘。

❏ 在Windows里打开那个磁盘,把haribote.sys保存到磁盘上。

❏ 使用工具将磁盘备份为磁盘映像。

大家仔细看,以上操作以磁盘映像文件开始,最终也是以磁盘映像文件结束。我们再来想像一下,如果不用借助磁盘和Windows就可以得到磁盘映像和文件,那多方便啊。这就是“保存到磁盘映像里”的意思。

能够完成这些工作的工具其实有很多,我们曾经使用过的edimg.exe就是其中之一。所以,这次还用这个工具。

那做这个工作究竟有什么意义呢?我们先做做看,然后再说明。……笔者对程序作了修改,得到了projects/03_day下的harib00e。当然对Makefile也相应做了改动。

■■■■■

接下来用“make img”指令来做个映像文件。执行完命令,映像文件也就做成了。然后我们用二进制编辑器打开刚做成的映像文件“haribote.img”,看一看“haribote.sys”文件在磁盘中是什么样的。

最先注意到的地方是0x002600附近,磁盘的这个位置好像保存着文件名。

0x002600附近的样子

再往下看,找到0x004200那里,可以看到“F4 EB FD”。

0x004200附近的样子

这是什么呢?这就是haribote.sys的内容。因为我们用二进制编辑器看haribote.sys,它恰好也就是这三个字节。好久没用的二进制编辑器这次又大显身手了。

以上内容可以总结为:一般向一个空软盘保存文件时,

(1) 文件名会写在0x002600以后的地方;

(2) 文件的内容会写在0x004200以后的地方。

这就是我们一直想知道的东西。

了解了这一点,下面要做的事就简单了。我们将操作系统本身的内容写到名为haribote.sys文件中,再把它保存到磁盘映像里,然后我们从启动区执行这个haribote.sys就行了。接下来我们就来做这件事。