十分鐘完成的作業系統

2021-05-22 08:36:43 字數 1963 閱讀 9036

買了一本于淵的《orange's: 乙個作業系統的實現》,很是感謝作者的分享,正如作者所說的:os  from scratch

於是想把學習過程中碰到的問題和心得記錄下來...

好吧,直接進入主題,引導扇區,**如下:

作者已經把扇區的引導說的很清楚了,我就不再贅述了,我們重點看看這段**要幹什麼(其實就是在顯示器上列印字串「hello os world!」):

第1行      :  主要是告訴編譯器,將來我們這段程式要被載入到記憶體偏移位址0x7c00h處

第2~4行:   很簡單,將ds,es都指向cs段,這裡,我們並沒有將**段和資料段明顯的分開,所以都指向相同的位址

第5行      :  呼叫了函式dispstr,也就是顯示字串,我們後面會重點分析這個函式

我們重點分析函式dispstr:

首先我們看到14行,呼叫了bios的10h 中斷,那bios的10h 中斷是幹什麼的呢?我們先來了解一下:

我們在組合語言程式中可使用軟中斷指令「int n」呼叫bios程式,其中n是中斷型別碼。常用的bios程式的功能與其中斷型別碼對應關係如下:

中斷型別碼   bios中斷呼叫功能 

10h            顯示器i/o中斷呼叫(即顯示器驅動程式) 

16h            鍵盤驅動程式 

17h            印表機驅動程式 

13h            磁碟驅動程式 

14h            通訊驅動程式

因為我們這裡要顯示字串,所以我們呼叫了顯示器驅動程式(10h),但是顯示器驅動程式也有很多功能,主要有暫存器ah來確定,我們注意到13行,將ax的值賦為:01301h,所以ah的值為:13,那麼我們重點看看13號功能:

功能號:13h

功能:在teletype模式下顯示字串 

入口引數:ah=13h

bh=頁碼

bl=屬性(若al=00h或01h)

cx=顯示字串長度

(dh、dl)=座標(行、列)

es:bp=顯示字串的位址 al= 顯示輸出方式 

0—字串中只含顯示字元,其顯示屬性在bl中。顯示後,游標位置不變 

1—字串中只含顯示字元,其顯示屬性在bl中。顯示後,游標位置改變 

2—字串中含顯示字元和顯示屬性。顯示後,游標位置不變 

3—字串中含顯示字元和顯示屬性。顯示後,游標位置改變 

其他功能可以參考:http://www.programfan.com/blog/article.asp?id=16290

就像我們平時函式呼叫時要傳引數一樣,呼叫中斷的驅動程式時,也要傳遞相應的引數,這些引數就儲存在相應的暫存器裡,跟據上面入口引數的描述,我們很容易理解8~13行所做的事情:

2)cx=顯示字串長度        : "hello os world!" 的長度為16,則:cx = 16

3)al= 顯示輸出方式          :我們選擇的輸出方式為01h:字串中只含顯示字元,其顯示屬性在bl中。顯示後,游標位置改變,同時   19:15:58ah=13h,故:ax = 01301h19:10:2719:10:38

4) bh=頁碼

5) bl=屬性(若al=00h或01h) : bh=0:頁碼為0, bl=0ch:黑底紅字,字串中的字母都會以黑底紅字的方式顯示

6)(dh、dl)=座標(行、列)  : 我們 mov dx,00000h :就表示從第1行第1列開始顯示,你要是mov dx, 00404h  就從第5行第5列始顯示字串

所以這個函式執行結束,就是在從顯示器第1行第1列開始以黑底紅字的方式顯示字串"hello os world!"

然後我們來到17行,作者已經解釋了:$-$$ 表示本行距離程式開始處的相對位置,17行做的事就是,將剩下的到510位元組為止的空間裡填充0,最後在511,512個位元組處填充aa55,表示扇區的結束。

其實我們可以做更多的事情,因為我們填充了 510-($-$$) 個0,故事的序幕也就是從這些荒蕪的地方拉開了

乙個作業系統的實現 十分鐘完成的作業系統

步驟 1.編輯器 例如記事本 寫入作業系統啟動 儲存為字尾名為.asm的檔案格式 2.安裝一款虛擬機器軟體以wm為例,新建乙個虛擬機器,注意作業系統與版本都選擇其他,建立的最後一步選擇 自定義硬體 進入後選擇 新增 選擇 軟盤驅動器 接著 建立空軟盤映像 在虛擬機器根目錄下任意建立乙個字尾名為.im...

課間十分鐘

時間限制 1000 ms 記憶體限制 128 mb 兩人都是數學愛好者,便發明了乙個遊戲。在遊戲開始前,他們先約定乙個正整數n,同時令m 1。遊戲過程中,每個人都可以將m的值擴大2到9中的任意倍數。第乙個使m n的人就是最後的贏家。181818181818和zbt都十分聰明,並且遊戲過程中都使用最佳...

十分鐘的代價

2008年9月15日上午10 00,擁有158年歷史的美國第四大投資銀行 雷曼兄弟公司向法院申請破產保護,訊息轉瞬間通過電視 廣播和網路傳遍地球的各個角落。令人匪夷所思的是,在如此重大的情況下,德國國家發展銀行在十分鐘後,居然按照外匯掉期協議的交易,通過計算機自動付款系統,向雷曼兄弟公司即將凍結的銀...