作業系統1——引導扇區的理解

鴨脖發表於2012-11-17

在作業系統這個方面,我記得自己經常聽到主開機記錄這個名詞,但是對於它的理解並不深,只知道它在系統載入的時候很重要。現在我想自己寫一個作業系統,但是想到第一步該怎麼做呢?書上說是用匯編寫載入程式。那麼這個載入程式是什麼呢?它正是我們經常所說的主開機記錄,或者說,它儲存在引導扇區上,即我們所說的boot sector。

我們知道,當計算機電源被開啟的時候,他會先進行加電自檢,然後尋找啟動盤,如果計算機選擇從軟盤啟動,計算機就會檢查軟盤的0面0磁軌1扇區,如果發現它是以0xaa55結束的話,那麼BIOS就認為它是一個引導扇區,當然引導扇區的結構我們會在下面介紹。一旦BIOS發現了引導扇區,那麼它就會將這512位元組的內容,裝載到記憶體的0000:7c00處,然後跳轉到該位置處將控制權徹底交給這段引導程式碼。到此為止,計算機不再由BIOS中固有的程式來控制,轉而由作業系統的一部分來控制。


那麼主開機記錄的定義是什麼呢?

主開機記錄(MBR,Master Boot Record)是位於磁碟最前邊的一段引導(Loader)程式碼。它負責磁碟作業系統(DOS)對磁碟進行讀寫時分割槽合法性的判別、分割槽引導資訊的定位,它由磁碟作業系統(DOS)在對硬碟進行初始化時產生的。


主引導扇區由三個部分組成(共佔用512個位元組):

  1.主載入程式即主開機記錄(MBR)(佔446個位元組)
  可在FDISK程式中找到,它用於硬碟啟動時將系統控制轉給使用者指定的並在分割槽表中登記了的某個作業系統。
  2.磁碟分割槽表項(DPT,Disk Partition Table)
  由四個分割槽表項構成(每個16個位元組)。
  負責說明磁碟上的分割槽情況,其內容由磁碟介質及使用者在使用FDISK定義分割槽時決定。(具體內容略)
  3.結束標誌(佔2個位元組)
  其值為AA55,儲存時低位在前,高位在後,即看上去是55AA(十六進位制)。

其中四個分割槽表項的結構是:

第1個位元組表示:是否是系統分割槽

第234位元組表示:該分割槽的開始磁頭,扇區以及柱面

第5位元組表示:分割槽型別

第678位元組表示:分割槽結束的開始磁頭,扇區以及柱面

後面的8個位元組,前四個用來表示:該分割槽之前的所有分割槽的所有扇區數

後四個位元組用來表示:該分割槽的扇區總數


下面貼一段載入程式:

%define _BOOT_DEBUG_
%ifdef _BOOT_DEBUG_
org 0100h
%else
org 07c00h
%endif
;org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello,OS World!"
times 510-($-$$) db 0


dw 0xaa55

相關文章