自己動(dòng)手寫(xiě)操作系統(tǒng)

ID:14439710

大小:51.00 KB

頁(yè)數(shù):22頁(yè)

時(shí)間:2018-07-28

自己動(dòng)手寫(xiě)操作系統(tǒng)_第1頁(yè)
自己動(dòng)手寫(xiě)操作系統(tǒng)_第2頁(yè)
自己動(dòng)手寫(xiě)操作系統(tǒng)_第3頁(yè)
自己動(dòng)手寫(xiě)操作系統(tǒng)_第4頁(yè)
自己動(dòng)手寫(xiě)操作系統(tǒng)_第5頁(yè)
資源描述:

《自己動(dòng)手寫(xiě)操作系統(tǒng)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)

1、自己動(dòng)手寫(xiě)操作系統(tǒng)自己動(dòng)手寫(xiě)操作系統(tǒng)(一)作者:伊梅自由軟件社區(qū)是一個(gè)充滿自由和夢(mèng)想的地方,在10余年的時(shí)間里它創(chuàng)造了一個(gè)又一個(gè)奇跡。然而,這些奇跡的創(chuàng)造者不只是Stallman,也不只是LinusTorvalds,而是活躍在世界各地的不計(jì)其數(shù)的開(kāi)發(fā)人員。在使用各種功能強(qiáng)大的自由軟件時(shí),我總會(huì)對(duì)其開(kāi)發(fā)者充滿崇敬之情,期盼有朝一日自己也能成為他們中的一員。很多對(duì)自由社區(qū)充滿向往之情的人,雖然也想努力融身于其中,但又不知該怎么做。那么,就請(qǐng)與我們一起從編寫(xiě)一個(gè)簡(jiǎn)單的操作系統(tǒng)開(kāi)始吧!我們要做的事情有人可能擔(dān)心自己既沒(méi)有學(xué)過(guò)計(jì)算機(jī)原理,也沒(méi)有學(xué)過(guò)操作系統(tǒng)原理,更不懂匯編語(yǔ)言,對(duì)C

2、語(yǔ)言也一知半解,能寫(xiě)操作系統(tǒng)嗎?答案是沒(méi)問(wèn)題。我將帶大家一步一步完成自己的操作系統(tǒng)。當(dāng)然如果學(xué)一學(xué)上述內(nèi)容再好不過(guò)。首先要明確處理器(也就是CPU)控制著計(jì)算機(jī)。對(duì)PC而言,啟動(dòng)的時(shí)候,CPU都處在實(shí)模式狀態(tài),相當(dāng)于只是一個(gè)Intel8086處理器。也就是說(shuō),即使你現(xiàn)在擁有一個(gè)奔騰處理器,它的功能也只能是8086級(jí)別。從這一點(diǎn)上來(lái)講,可以使用一些軟件把處理器轉(zhuǎn)換到著名的保護(hù)模式。只有這樣,我們才可以充分利用處理器的強(qiáng)大功能。編寫(xiě)操作系統(tǒng)開(kāi)始是對(duì)BIOS控制,取出存儲(chǔ)在ROM里的程序。BIOS是用來(lái)執(zhí)行POST(PowerOnSelfTest,自檢)的。自檢是檢查計(jì)算機(jī)的完

3、整性(比如外設(shè)是否工作正常、鍵盤(pán)是否連接等)。這一切完成以后,你就會(huì)聽(tīng)到PC喇叭發(fā)出一聲清脆的響聲。如果一切正常,BIOS就會(huì)選擇一個(gè)啟動(dòng)設(shè)備,并且讀取該設(shè)備的第一扇區(qū)(即啟動(dòng)扇區(qū)),然后控制過(guò)程就會(huì)轉(zhuǎn)移到指定位置。啟動(dòng)設(shè)備可能是一個(gè)軟盤(pán)、光盤(pán)、硬盤(pán),或者其它所選擇的設(shè)備。在此我們把軟盤(pán)作為啟動(dòng)設(shè)備。如果我們已經(jīng)在軟盤(pán)的啟動(dòng)扇區(qū)里寫(xiě)了一些代碼,這時(shí)它就被執(zhí)行。因此,我們的目的很明確,就是往軟盤(pán)的啟動(dòng)扇區(qū)寫(xiě)一些程序。首先使用8086匯編來(lái)寫(xiě)一個(gè)小程序,然后將其拷貝至軟盤(pán)的啟動(dòng)扇區(qū)。為了實(shí)現(xiàn)拷貝,要寫(xiě)一個(gè)C程序。最后,使用軟盤(pán)啟動(dòng)計(jì)算機(jī)。需要的工具●as86:這是一個(gè)匯編程序

4、,它負(fù)責(zé)把寫(xiě)的代碼轉(zhuǎn)換成目標(biāo)文件?!駆d86:這是一個(gè)連接器,as86產(chǎn)生的目標(biāo)代碼由它來(lái)轉(zhuǎn)換成真正的機(jī)器語(yǔ)言。機(jī)器語(yǔ)言是8086能夠解讀的形式?!馟CC:著名的C編程器。因?yàn)槲覀冃枰獙?xiě)一個(gè)C程序?qū)⒆约旱腛S轉(zhuǎn)移到軟盤(pán)中?!褚粡埧哲洷P(pán):它用于存儲(chǔ)編寫(xiě)的操作系統(tǒng),也是啟動(dòng)設(shè)備?!褚慌_(tái)裝有Linux的計(jì)算機(jī):這臺(tái)機(jī)器可以很舊,386、486都可以。在大部分標(biāo)準(zhǔn)Linux發(fā)行版中都會(huì)帶有as86和ld86。在我使用的RedHat7.3中就包含有這兩個(gè)工具,并且在默認(rèn)的情況下,它已經(jīng)安裝在機(jī)器里。如果使用的Linux沒(méi)有這兩個(gè)工具,可以從網(wǎng)上下載(http://www.cix.c

5、o.uk/~mayday/),這兩個(gè)工具都包含在一個(gè)名為bin86的軟件包中。此外,有關(guān)的文檔也可以在網(wǎng)上獲得(www.linux.org/docs/ldp/howto/Assembly-HOWTO/as86.html)。開(kāi)始工作使用一個(gè)你喜歡的編輯器輸入以下內(nèi)容:entrystartstart:movax,#0xb800moves,axsegesmov[0],#0x41segesmov[1],#0x1floop1:jmploop1這是as86可以讀懂的一段匯編程序。第一個(gè)句子指明了程序的入口點(diǎn),聲明整個(gè)過(guò)程從start處開(kāi)始。第二行指明了start的位置,說(shuō)明整個(gè)程序要

6、從start處開(kāi)始執(zhí)行。0xb800是顯存的開(kāi)始地址。#表明其后是一個(gè)立即數(shù)。執(zhí)行語(yǔ)句:movax,#oxb800ax寄存器的值就變?yōu)?xb800,這就是顯存的地址。下面再將這個(gè)值移至es寄存器,es是附加段寄存器。請(qǐng)記住8086有一個(gè)分段的體系結(jié)構(gòu)。它的各段寄存器為代碼段、數(shù)據(jù)段、堆棧段和附加段,對(duì)應(yīng)的寄存器名稱分別為cs、ds、ss和es。事實(shí)上,我們把顯存地址送入了附加段,因此,任何送入附加段的東西都會(huì)被送到顯存中。要在屏幕上顯示字符,就需要向顯存中寫(xiě)兩個(gè)字節(jié)。前一個(gè)是所要顯示字符的ASCⅡ值,第二個(gè)字節(jié)表示該字符的屬性。屬性包括字符的前景色、背景色及是否閃爍等等。

7、seges指明下一個(gè)將要執(zhí)行的指令是指向es段的。所以,我們把值0x41(在ASCⅡ中表示的字符是A)送到顯存的第一個(gè)字節(jié)中。接下來(lái)要把字符的屬性送到下一個(gè)字節(jié)當(dāng)中。在此輸入的是0x1f,該屬性指的是在藍(lán)色背景下顯示白色的字符。因此,如果執(zhí)行這個(gè)程序,就可以在屏幕上得到顯示在藍(lán)底上的一個(gè)白色的A。接著是一個(gè)循環(huán)。因?yàn)樵趫?zhí)行完顯示字符的任務(wù)后,要么讓程序結(jié)束,要么使用一個(gè)循環(huán)使其永遠(yuǎn)運(yùn)行下去。把該文件命名為boot.s,然后存盤(pán)。此處顯存的概念說(shuō)得不是很清楚,有必要進(jìn)一步解釋一下。假設(shè)屏幕由80列×25行組成,那么第一行就需要1

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。
关闭