寫一個PC機(jī)的引導(dǎo)程序比我們想象的容易很多,事實(shí)上所需要了解的只是知道PC機(jī)是怎樣啟動的。在網(wǎng)上看到不少類似的文章,說的很多,有的很麻煩,筆者覺得僅僅是寫一個引導(dǎo)程序完全沒有必要牽涉太多東西,知道足夠的知識用于去實(shí)際地寫一個出來看看是很多人最初的目的,那這篇文章就剛好適合你了。這篇文章的立足點(diǎn)就是短、簡單、一看就懂,而又不會看完了什么都不知道就寫出一個連自己都看不懂的代碼。
另外,機(jī)器人天空重新改版,筆者興奮的看到了一個真正的機(jī)器人網(wǎng)站,囊括了機(jī)器人科學(xué)與技術(shù)這樣龐大的系統(tǒng)工程的各個方面,在此獻(xiàn)上這篇文章給機(jī)器人天空的操作系統(tǒng)專欄,祝愿機(jī)器人天空越辦越好,并能夠?yàn)橹袊臋C(jī)器人愛好者們帶來更多更豐富的信息與資源,做更多的實(shí)事!同時,也希望廣大的機(jī)器人愛好者和有識之士都能出一份力,為祖國更美好的明天共同努力!筆者與您共勉。
現(xiàn)在,讓我們開始引導(dǎo)程序初探!
[什么?]
很多文章中把寫一個引導(dǎo)程序稱作是開發(fā)一個最簡單的操作系統(tǒng),其實(shí)這是非常片面的,引導(dǎo)程序算不上操作系統(tǒng),雖然此程序可以運(yùn)行在裸機(jī)上。所謂引導(dǎo)程序,直觀的說就是在系統(tǒng)加電啟動時BIOS第一個執(zhí)行的程序。
引導(dǎo)程序要想發(fā)揮作用,讓機(jī)器識別,就必須安置在一個特別的位置,這個位置就是磁盤的第一個扇區(qū)(0面0磁道1扇區(qū),備注:沒有0扇區(qū)),而一個包含引導(dǎo)程序的扇區(qū)叫作引導(dǎo)扇區(qū)。
一個合法的引導(dǎo)扇區(qū)(1)通常包含512個字節(jié)(當(dāng)然嘍,一個扇區(qū)通常本來就是512個字節(jié)),(2)并且以0xAA55這樣一個占用兩個字節(jié)的數(shù)據(jù)結(jié)尾作為標(biāo)志符。(備注:0x前綴說明這是一個十六進(jìn)制數(shù))。
也就是如果把引導(dǎo)扇區(qū)看成一個字符數(shù)組的BootSector[]話(因?yàn)橐粋€字符,即char,剛好為一個字節(jié)),那么這個數(shù)組就擁有512個元素,如果用C語言申明的話即為
char BootSector[512];
接著,一個合法的引導(dǎo)扇區(qū)必須以0xAA55結(jié)束,即
BootSector[510] = 0x55;
BootSector[511] = 0xAA;
除了結(jié)束標(biāo)志必須符合上面的要求之外,中間雖然還有510字節(jié)的空間,但執(zhí)行代碼可以少于510字節(jié),用無意義字符(通常用0x0)填充剩余空間即可。
[過程]
PC是通過BIOS來啟動機(jī)器的,當(dāng)PC機(jī)加電之后BIOS啟動相應(yīng)的程序完成機(jī)器的自檢,然后就尋找可以引導(dǎo)的驅(qū)動器,即大家通常所說的啟動盤。在 BIOS中可以設(shè)置從哪個盤啟動,但通常總要檢查硬盤,所以當(dāng)BIOS檢查完前面的啟動設(shè)備之后,如果沒有發(fā)現(xiàn)任何引導(dǎo)程序,那么就會開始檢查主硬盤,即 C盤。如果此時在C盤上找到了合法的引導(dǎo)扇區(qū),那么就會將引導(dǎo)扇區(qū)的內(nèi)容(共512字節(jié))裝載到內(nèi)存0x0000:07C00處。此時BIOS把控制權(quán)限交給這段引導(dǎo)程序。
新聞熱點(diǎn)
疑難解答
圖片精選