硬碟的0柱面、0磁頭、1扇區稱為主開機磁區,FDISK程式寫到該扇區的內容稱為主引導記錄(MBR)。該記錄佔用512個位元組,它用於硬碟啟動時將系統控制權交給使用者指定的,並在分區表中登記了的某個作業系統區。
1.MBR的讀取
硬碟的引導記錄(MBR)是不屬於任何一個作業系統,也不能用作業系統提供的磁碟操作命令來讀取它。但我們可以用ROM-BIOS中提供的INT13H的2號功能來讀出該扇區的內容,也可用軟體工具Norton8.0中的DISKEDIT.EXE來讀取。
用INT13H的讀磁碟扇區功能的調用參數如下:
入口參數:AH=2 (指定功能號)
AL=要讀取的扇區數
DL=磁碟號(0、1-磁碟片;80、81-硬碟)
DH=磁頭號
CL高2位+CH=柱面號
CL低6位=扇區號
CS:BX=存放讀取資料的記憶體緩衝地址
出口參數:CS:BX=讀取資料存放地址
錯誤資訊:如果出錯CF=1 AH=錯誤碼
用DEBUG讀取位於硬碟0柱面、0磁頭、1扇區的操作如下:
A>DEBUG
-A 100
XXXX:XXXX MOV AX,0201 (用功能號2讀1個扇區)
XXXX:XXXX MOV BX,1000 (把讀出的資料放入緩衝區的地址為CS:1000)
XXXX:XXXX MOV CX,0001 (讀0柱面,1扇區)
XXXX:XXXX MOV DX,0080 (指定第一物理盤的0磁頭)
XXXX:XXXX INT 13
XXXX:XXXX INT 3
XXXX:XXXX (按斷行符號鍵)
-G=100 (執行以上程式段)
-D 1000 11FF (顯示512位元組的MBR內容)
2.MBR的組成
一個扇區的硬碟主引導記錄MBR由4個部分組成。
主引導程式(位移地址0000H--0088H),它負責從使用中的磁碟分割中裝載,並運行系統引導程式。
出錯資訊資料區,位移地址0089H--00E1H為出錯資訊,00E2H--01BDH全為0位元組。
分區表(DPT,Disk Partition Table)含4個分區項,位移地址01BEH--01FDH,每個分區表項長16個位元組,共64位元組為分區項1、分區項2、分區項3、分區項4。
結束標誌字,位移地址01FE--01FF的2個位元組值為結束標誌55AA,如果該標誌錯誤系統就不能啟動。
0000-0088 |
Master Boot Record 主引導程式 |
主引導 程式 |
0089-01BD |
出錯資訊資料區 |
資料區 |
01BE-01CD |
分區項1(16位元組) |
分區表 |
01CE-01DD |
分區項2(16位元組) |
01DE-01ED |
分區項3(16位元組) |
01EE-01FD |
分區項4(16位元組) |
01FE |
55 |
結束標誌 |
01FF |
AA |
3.MBR中的分區資訊結構
佔用512個位元組的MBR中,位移地址01BEH--01FDH的64個位元組,為4個分區項內容(分區資訊表)。它是由磁碟介質類型及使用者在使用 FDISK定義分區時確定的。在實際應用中,FDISK對一個磁碟劃分的主要磁碟分割可少於4個,但最多不超過4個。每個分區表的項目是16個位元組,其內容含義如下表所示。
存貯位元組位 |
內容及含義 |
第1位元組 |
引導標誌。若值為80H表示使用中的磁碟分割,若值為00H表示非使用中的磁碟分割。 |
第2、3、4位元組 |
本分區的起始磁頭號、扇區號、柱面號。其中: 磁頭號——第2位元組; 扇區號——第3位元組的低6位; 柱面號——為第3位元組高2位+第4位元組8位。 |
第5位元組 |
分區類型符。 00H——表示該分區未用(即沒有指定); 06H——FAT16基本分區; 0BH——FAT32基本分區; 05H——擴充分區; 07H——NTFS分區; 0FH——(LBA模式)擴充分區(83H為Linux分區等)。 |
第6、7、8位元組 |
本分區的結束磁頭號、扇區號、柱面號。其中: 磁頭號——第6位元組; 扇區號——第7位元組的低6位; 柱面號——第7位元組的高2位+第8位元組。 |
第9、10、11、12位元組 |
本分區已用的扇區數。 |
第13、14、15、16位元組 |
本分區的總扇區數。 |
4.MBR的主要功能及工作流程
在CPU上電之後,若由硬碟啟動,則BIOS將硬碟的主引導記錄(位於0柱面、0磁軌、1扇區)讀入7C00處,然後將控制權交給主引導代碼。主引導代碼的任務包括:
掃描分區表,找到一個啟用(可引導)分區;
找到啟用分區的起始扇區;
將啟用分區的開機磁區裝載到記憶體7C00處;
將控制權交給開機磁區代碼;
如果主引導代碼無法完成上述任務,它將顯示以下錯誤資訊之一:
No active partition.
Invalid partition table.
Error loading operating system.
Missing operating system.
機器加電或按reset鍵後都要進行系統複位,複位後CS=FFFFH,IP=0000H,那麼自然就從FFFF:0000H處開始執行指令,這個地方只有一條JMP指令跳轉到系統自檢程式處,系統自檢完成後把磁碟片的第一個扇區(如果由磁碟片啟動)或者硬碟的第一個扇區,即MBR扇區(如果由硬碟啟動)讀入到0:7C00H處,然後把控制權交出,從0:7C00H處繼續執行。
下面就是硬碟的MBR程式碼分析:
其中的開機磁區是指硬碟相應分區的第一個扇區,是和作業系統有關的。作業系統的引導是由它來完成的,而MBR並不負責,MBR和作業系統無關。開機磁區的任務是把控制權轉交給作業系統的引導程式。
程式流程:
1 將程式碼由0:7C00H移動到0:0600H(注,BIOS把MBR放在0:7C00H處)
2 搜尋可引導分區,即80H標誌
成功:goto 3
失敗:跳入ROM BASIC
無效分區表:goto 5
3 讀開機磁區
失敗:goto 5
成功:goto 4
4 驗證開機磁區最後是否為55AAH
失敗:goto 5
成功:goto 6
5 列印錯誤進入無窮迴圈
6 跳到0:7C00H進行下一步啟動工作
5、硬碟邏輯磁碟機的分區錶鏈結構
硬碟是由很多個512位元組的扇區組成,而這些扇區會被組織成一個個的“分區”。
硬碟的分區規則是:一個分區的所有扇區必須連續,硬碟可以有最多4個物理上的分區,這4個物理分區可以時個主要磁碟分割或者3個主要磁碟分割加一個擴充分區。在DOS/Windows管理下的擴充分區裡,可以而且必須再繼續劃分邏輯分區(邏輯盤)。
擴充分區的資訊位於硬碟分區表(DPT)中, 而邏輯磁碟機的資訊則位於擴充分區的起始扇區, 即該分區的起始地址(面/扇區/磁軌)所對應的扇區, 該扇區中的資訊與硬碟主開機磁區的區別是不包含MBR, 而16位元組的分區資訊則表示的是邏輯磁碟機的起始和結束位址等。
MBR( Master Boot Record )主引導記錄包含兩部分的內容,前446位元組為啟動代碼及資料,而從446(0x1BE)開始則是分區表,分區表由四個分區項組成,每個分區項資料為16位元組,記錄了啟動時需要的分區參數。