1. 程式人生 > 其它 >30天自制作業系統-第03天-進入32位模式並匯入C語言

30天自制作業系統-第03天-進入32位模式並匯入C語言

1.製作真正的IPL

    IPL(Initial Program Loader):啟動程式裝載器,軟盤的第一個扇區,前面製作的IPL就顯示一個Hello,world外什麼事都沒做,因此本節要在IPL里加入新的功能,讀取下一個扇區(第二扇區)的內容

2.軟盤的結構(1.44M)

    80個柱面(磁軌),每個柱面毎·刺頭18個扇區,2個磁頭,總容量=80 X 18 X 2 X 512 = 1440 X 1024 =1.44M

    IPL位於C0-H0-S1(柱面-磁頭-扇區), 因此下一個扇區就是C0-H0-S2

    本節前半部分講述如何讀取軟盤,熟悉瞭解讀取磁碟的呼叫即可

;讀取軟盤程式碼片段
MOV AX,0x0820

MOV ES,AX

MOV BX,0 ;資料返回地址 ES:BX,此時0820:0000
MOV CH,0 ; 柱面0,也即磁軌 ,CX中的6~15位代表柱面號,(其中,CL的6~7為柱面數的高兩位,CH存低8位)

MOV CL,2 ; 2號扇區,CX中的0~5位代表扇區號,扇區編號從1開始
MOV DH,0 ; 磁頭0

MOV DL,0x00 ; A驅動器,如果是硬碟,則7為置1,假如有A、B兩軟碟機,C為硬碟,則C盤為0x80

MOV AH,0x02 ; AH=0x02 : 表示讀取磁碟操作
MOV AL,1 ; 讀取的扇區數量,此時1個 扇區
INT 0x13 ;呼叫磁碟BIOS
JC error ;jump if carry 如果進位值為1,說明出現了錯誤跳轉到error輸出錯誤資訊
3.初版作業系統檔案:\03_day\harib00e\hanbote.nas:

      fin:

         HLT

         JMP fin

      編譯成hanbote.sys

      執行Make install 發現 imgtol.com在win64下不能執行,因此進入Win2000虛擬機器執行,執行成功

4.初版實驗總結:

   一般向一個空軟盤中儲存檔案時,檔名會寫在0x002600以後的地方,檔案的內容會寫在0x004200以後的地方。當我們將作業系統本身的內容寫到名為haribote.sys的檔案中,再將其儲存到磁碟映像裡,確定好磁碟映像0x4200在記憶體中對應的地址位置,即可從啟動區執行作業系統

   原以為會採用讀取FAT表的讀取檔案,看來作者採用了取巧的方式