刚刚用了一个小时看了一下这本书的第一章,其实挺多细节并不是很懂,我主要把操作过程写一下吧~
首先是些一个20行代码的最小操作系统
注意: $-$$可能会经常被用到,它表示本行距离程序开始处的相对距离。
times 510-($-$) db 0 的意思就是将0这个字节重复510-($-$)遍,知道程序有510B为止。这样,加上结束标志0XAA55占用2B,恰好是512B
把这段代码用NASM编译一下:
nasm boot.asm -o boot.bin
事实上我们写的并不是完整的操作系统,而是最简单的引导扇区(Boot Sector).然而不管我们完成的是什么我们都是在一个裸机上运行的,不依赖于任何软件,这就是跟我们编的其他软件区别最大的地方。
Boot Sector原理如下:当计算机被电源打开时,他先会进行加电自检(POST),然后寻找启动盘,如果选择是从软盘启动,计算机就会检查软盘的0面0刺刀1扇区,如果发现它是以0xAA55结束,则BIOS就会认为他是一个引导扇区,当然一个正确的引导扇区还应该包含一段至少512B的执行代码。
好了,一旦BIOS发现了引导扇区,就会将这512B的内容装载到内存0000:7c00处,这就是我们为什么代码的第一行要有“org 07c00”这样的代码了。
用软盘绝对扇区读写工具将这个文件写到一个空白软盘的第一个扇区。把它放到软驱中重启电脑,屏幕上应该出现我们的“Hello, OS world!”
而现实情况是我们大多数的电脑都已经没有了软驱,我也一样,所以我考虑把软盘镜像化,就是类似于我们的*.ISO文件一样,软盘有个*.IMG格式。我使用VM提供的一个创建IMG的方法
将创建的IMG命名为“Tinix”
然后使用【自己动手写操作系统】(以后简称【自】)提供的一个FloppyWriter软件(Floppy是软盘的意思)将之前编译好的boot.bin写到这个Tinix.IMG (按那本书上命名的)里面
然后运行VirtualBox(在此之前我已经我已经创建了一个虚拟机,类型Others),在运行之前先添加一个软驱介质
然后运行Tinix就能看到
总结一下过程:
1.编写好boot.asm
2.将boot.asm通过NASM编译
3.创建Tinix.IMG
4.用虚拟机运行