写一个PC机的引导程序比我们想象的容易很多,事实上所需要了解的只是知道PC机是怎样启动的。在网上看到不少类似的文章,说的很多,有的很麻烦,笔者觉得仅仅是写一个引导程序完全没有必要牵涉太多东西,知道足够的知识用于去实际地写一个出来看看是很多人最初的目的,那这篇文章就刚好适合你了。这篇文章的立足点就是短、简单、一看就懂,而又不会看完了什么都不知道就写出一个连自己都看不懂的代码。
另外,机器人天空重新改版,笔者兴奋的看到了一个真正的机器人网站,囊括了机器人科学与技术这样庞大的系统工程的各个方面,在此献上这篇文章给机器人天空的操作系统专栏,祝愿机器人天空越办越好,并能够为中国的机器人爱好者们带来更多更丰富的信息与资源,做更多的实事!同时,也希望广大的机器人爱好者和有识之士都能出一份力,为祖国更美好的明天共同努力!笔者与您共勉。
现在,让我们开始引导程序初探!
[什么?]
很多文章中把写一个引导程序称作是开发一个最简单的操作系统,其实这是非常片面的,引导程序算不上操作系统,虽然此程序可以运行在裸机上。所谓引导程序,直观的说就是在系统加电启动时BIOS第一个执行的程序。
引导程序要想发挥作用,让机器识别,就必须安置在一个特别的位置,这个位置就是磁盘的第一个扇区(0面0磁道1扇区,备注:没有0扇区),而一个包含引导程序的扇区叫作引导扇区。
一个合法的引导扇区(1)通常包含512个字节(当然喽,一个扇区通常本来就是512个字节),(2)并且以0xAA55这样一个占用两个字节的数据结尾作为标志符。(备注:0x前缀说明这是一个十六进制数)。
也就是如果把引导扇区看成一个字符数组的BootSector[]话(因为一个字符,即char,刚好为一个字节),那么这个数组就拥有512个元素,如果用C语言申明的话即为
char BootSector[512];
接着,一个合法的引导扇区必须以0xAA55结束,即
BootSector[510] = 0x55;
BootSector[511] = 0xAA;
除了结束标志必须符合上面的要求之外,中间虽然还有510字节的空间,但执行代码可以少于510字节,用无意义字符(通常用0x0)填充剩余空间即可。
[过程]
PC是通过BIOS来启动机器的,当PC机加电之后BIOS启动相应的程序完成机器的自检,然后就寻找可以引导的驱动器,即大家通常所说的启动盘。在 BIOS中可以设置从哪个盘启动,但通常总要检查硬盘,所以当BIOS检查完前面的启动设备之后,如果没有发现任何引导程序,那么就会开始检查主硬盘,即 C盘。如果此时在C盘上找到了合法的引导扇区,那么就会将引导扇区的内容(共512字节)装载到内存0x0000:07C00处。此时BIOS把控制权限交给这段引导程序。
新闻热点
疑难解答
图片精选