天天看點

30天自制作業系統-merk11的第三天

導入了32位模式,終于可以開始使用c語言了

先上參考代碼haribote-ipl

目的:讀入10個柱面

EQU:相當于c語言中的<code>#define</code>

JC:是“jump if carry”的縮寫,意思 是如果進位标志(carry flag)是1的話,就跳轉。

JB:是“jump if below”的縮寫。翻譯過 來就是:“如果小于的話,就跳轉。”

在BIOS中:

AH=0x02;(讀盤) AH=0x03;(寫盤)

AH=0x04;(校驗) AH=0x0c;(尋道)

AL=處理對象的扇區數;(隻能同時處理連續的扇區)

CH=柱面号 &amp;0xff;

CL=扇區号(0-5位)|(柱面号&amp;0x300)&gt;&gt;2;

DH=磁頭号;

DL=驅動器号;

ES:BX=緩沖位址;(校驗及尋道時不使用)

傳回值: (這邊的傳回值配合了JC的使用)

FLACS.CF == 0:沒有錯誤,AH==0

FLAGS.CF == 1:有錯誤,錯誤号碼存入AH内(與重置(reset)功能一樣)

設定顯示卡模式:

AH=0x00;

AL=模式:(省略了一些不重要的畫面模式)

0x03:16色字元模式,80 × 25

0x12:VGA 圖形模式,640 × 480 × 4位彩色模式,獨特的4面存儲模式

0x13:VGA 圖形模式,320 × 200 × 8位彩色模式,調色闆模式

0x6a:擴充VGA 圖形模式,800 × 600 × 4位彩色模式,獨特的4面存儲模式 (有的顯示卡不支援這個模式)

傳回值:無

沿半徑方向分割成18個扇區

按同心圓方式分割成80個柱面

由于磁盤正反兩面都能記錄資料,是以有兩個磁頭

一般向一個空軟碟儲存檔案時

(1) 檔案名會寫在0x002600以後的地方;

(2) 檔案的内容會寫在0x004200以後的地方。

自己的了解:

.c檔案首先gcc編譯器的處理下,生成.gas檔案,

.gas檔案接着生成.obj目标檔案

.obj目标檔案在通過link後生成.bim檔案

.bim雖然是二進制映像檔案但是缺少一下必要的檔案頭和壓縮

是以還需加工成.hrb真正的完整的機器語言檔案

筆者對編譯過程解釋見原著:

首先,使用cc1.exe從bootpack.c生成bootpack.gas。

第二步,使用gas2nask.exe從bootpack.gas生成bootpack.nas。

第三步,使用nask.exe從bootpack.nas生成bootpack.obj。

第四步,使用obi2bim.exe從bootpack.obj生成bootpack.bim。

最後,使用bim2hrb.exe從bootpack.bim生成bootpack.hrb。

這樣就做成了機器語言,再使用copy指令将asmhead.bin與bootpack.hrb單純結合到起來, 就成了haribote.sys。

繼續閱讀