導入了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=柱面号 &0xff;
CL=扇區号(0-5位)|(柱面号&0x300)>>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。