買了一本于淵的《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年歷史的美國第四大投資銀行 雷曼兄弟公司向法院申請破產保護,訊息轉瞬間通過電視 廣播和網路傳遍地球的各個角落。令人匪夷所思的是,在如此重大的情況下,德國國家發展銀行在十分鐘後,居然按照外匯掉期協議的交易,通過計算機自動付款系統,向雷曼兄弟公司即將凍結的銀...