有一种工具软件名为“二进制编辑器”,是一种能够直接对二进制数进行编辑的软件。
https://www.vcraft.jp/soft/bz.html
下面跟着这个机器码输入:
从000090开始后面全是0,一直输入到168000这个地址。中间只需要改动两个地方:
下面,我们把输入的内容保存下来就完成了软盘映像文件的制作,这是查看一下文件属性,应该能看到文件大小正好是1474560字节。
保存一下
在github找到tolset文件夹,https://github.com/yourtion/30dayMakeOS
把这个文件夹复制到硬盘任意一个位置上。现在里面的东西还不多,只有3MB左右,不过以后我们自己开发的软件也都要放到这个文件夹里,所以往后他会越来越大,硬盘上最好留出100MB左右的空间。
接下来打开刚才复制的tolset文件夹,在里面新建一个文件夹,命名为helloos0。将helloos.img复制进来。
将tolset文件夹下z_new_w子文件夹中的!cons_9x.bat和!cons_nt.bat这两个文件也复制到helloos0文件夹里。
在helloos0新建txt文件,填上下面内容,重命名为run.bat。
同样步骤,创建install.bat,并将下列内容输入进去。
这里我们不选择用软盘制作启动盘,因为重启电脑真是太麻烦了。这里使用模拟器就行了,只需要在!cons_nt.bat打开的命令行窗口输入“run”指令就可以了,然后一个名叫QEMU的非常优秀的免费PC模拟器就会自动运行
为什么用这种方法就能开发出操作系统来呢?电脑的处理中心是CPU,翻译成中文就是“中央处理单元”。不过这个CPU除了与别的电路进行电信号交换以外什么都不会,而且对于电信号,它也只能理解开(ON)和关(OFF)两种状态。CPU就是个集成电路板,它只是忠实地执行电信号给它的指令,输出相应的电信号。
其实我们编写的程序最终都要转换成所谓的机器语言,这些机器语言就是以电信号的形式发送给CPU的。这些机器语言不过就是一连串的指令代码,实际上也就是一串0和1的组合而已。软盘的原理也有异曲同工之妙,简单说来,就是把二进制的0和1转换为磁极的N极和S极而已,所以我们只用0和1就可以写出映像文件来。不仅是映像文件,计算机所能处理的各种文件最终都是用0和1写成的。
而二进制编辑器就是用来编辑二进制数的,我们可以很方便地用它输入二进制数,并保存成文件。也就是说只要有了二进制编辑器,随便什么文件我们都能做出来。但是由于全写二进制太浪费纸张了,所以计算机界普遍使用十六进制数。将二进制数转换为十六进制数,只要从二进制数的最后一位开始,4位4位地替换过来就行了。
现在我们来写一个汇编程序,用它生成一个跟刚才完全一样地helloos.img。这里我直接拷贝了github里的源文件helloos.nas、asm.bat。有了这个批处理文件,我们只需要在!cons_nt.bat打开的窗口里输入asm,就可以生成helloos.img文件。再输入run命令,就可以得到和刚才一样的结果。
汇编文件的源代码如下,有兴趣可以自己编写:
DB指令是“define byte”的缩写,也就是往文件里直接写入1个字节的指令。这个指令是程序员的杀手锏,也就是说只要有了DB指令,我们就可以用它做出任何数据(甚至是程序)。
RESB指令是“reserve byte”的缩写,如果想要从现在的地址开始空出10个字节来,就可以写成RESB 10,意思是我们预约了这10个字节。
可以改写一下源文件,让别人也能看懂。
首先是“;”命令,这是一个注释命令,相当于C语言中的“//”。
其次是DB指令的新用法,我们居然可以直接用它写字符串。在写字符串的时候,汇编语言会自动地查找字符串中的每一个字符所对应的编码,然后把它们一个字节一个字节地排列起来。
DW和DD指令分别是“define word”和“define double-word”的缩写,word指的是2个字节,double-word指4个字节。
RESB 0X1FE-$
。这个美元符号是一 个变量,它可以告诉我们这一行现在的字节数。在这个程序里,我们已经在前面输出了132字节,所以这里$就是132。因此我们先用0x1fe减去132,得到378这个结果,然后连续输出378个字节的0x00。之所以用变量是为了改变我们想要输出的字符串,我们必须保证软盘的第510字节(即第0x1fe字节)开始的地方是55 AA。如果使用变量,汇编语言会自动计算需要输出多少个00,我们也就很轻松地改写输出信息了。