MBR(Master Boot Record),中文意为主引导记录。
硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。
他是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用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内容)

MBR组成

一个扇区的硬盘主引导记录MBR由如图6-15所示的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,如果该标志错误系统就不能启动。

系统启动过程主要由一下几步组成(以硬盘启动为例):  

  1.   开机   🙂  
  2.   BIOS   加电自检   (   Power   On   Self   Test   —   POST   )  
      内存地址为   0ffff:0000  
  3.   将硬盘第一个扇区   (0头0道1扇区,   也就是Boot   Sector)  
      读入内存地址   0000:7c00   处.  
  4.   检查   (WORD)   0000:7dfe   是否等于   0xaa55,   若不等于  
      则转去尝试其他启动介质,   如果没有其他启动介质则显示  
      "No   ROM   BASIC"   然后死机.  
  5.   跳转到   0000:7c00   处执行   MBR   中的程序.  
  6.   MBR   首先将自己复制到   0000:0600   处,   然后继续执行.  
  7.   在主分区表中搜索标志为活动的分区.   如果发现没有活动  
      分区或有不止一个活动分区,   则转停止.  
  8.   将活动分区的第一个扇区读入内存地址   0000:7c00   处.  
  9.   检查   (WORD)   0000:7dfe   是否等于   0xaa55,   若不等于则  
      显示   "Missing   Operating   System"   然后停止,   或尝试  
      软盘启动.  
  10.   跳转到   0000:7c00   处继续执行特定系统的启动程序.  
  11.   启动系统   …  

  以上步骤中   2,3,4,5   步是由   BIOS   的引导程序完成.   6,7,8,9,10  
步由MBR中的引导程序完成.  

至于为什么计算机启动时为什么将MBR加载到的内存地址是0x7c00,这个没有必要去深究了,好多的东西都是约定好的,正如楼上的兄弟所说,IBM在当初制定好多规范,一直沿用下来,足见他的强大。

发表评论

电子邮件地址不会被公开。 必填项已用*标注