操作系統(tǒng)開(kāi)發(fā)教程#02

在上一篇文章中,我們已經(jīng)基本了解了什么是操作系統(tǒng)以及操作系統(tǒng)需要擁有什么。那么今天就讓我們正式切入正題——操作系統(tǒng)的開(kāi)發(fā)。
大家有沒(méi)有想過(guò),被安裝在軟盤(pán)(為了教學(xué)方便,前期示例以軟盤(pán)為載體,這里也可以是其他什么介質(zhì))上的操作系統(tǒng)在電腦上電后是如何開(kāi)始運(yùn)行的呢?
大體步驟是這樣的:
1.??????? 電腦上電后開(kāi)始執(zhí)行ROM里的BIOS(Basic Input/Output System,基本輸入/輸出系統(tǒng))程序,對(duì)你的電腦進(jìn)行初始化。
2.??????? BIOS將裝有操作系統(tǒng)的磁盤(pán)的第一個(gè)扇區(qū)裝入0x7c00【1】的位置
3.??????? CPU跳轉(zhuǎn)到0x7c00的位置開(kāi)始執(zhí)行IPL【2】
4.??????? 然后你的操作系統(tǒng)就跑起來(lái)了
那么,我們現(xiàn)在知道我們需要做什么了——寫(xiě)一個(gè)IPL程序并放在磁盤(pán)鏡像的第一個(gè)扇區(qū)里:
樣例代碼如下【3】:

【1】:關(guān)于為什么是這個(gè)位置。我們知道0x8000-0x0400=0x7c00,即32KB-1KB的位置。由于最初的DOS設(shè)計(jì)內(nèi)存為32KB,而這里為高端未使用的1KB,故而就將這里的1KB分成兩個(gè)512B,一個(gè)(0x7c00的位置)用來(lái)存放引導(dǎo)扇區(qū)(這里一個(gè)扇區(qū)512B),另一個(gè)(0x7e00的位置)用來(lái)存放執(zhí)行IPL程序所產(chǎn)生的數(shù)據(jù)(變量等)。
【2】:Initial Program Loader的縮寫(xiě),即“初始程序裝入程序”。
【3】:本欄目匯編語(yǔ)言編譯器使用NASM version 2.15.05,C語(yǔ)言編譯器采用gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04),make使用GNU Make 4.3,ld使用GNU ld (GNU Binutils for Ubuntu) 2.38,編譯環(huán)境使用Ubuntu22.04LTS