最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

MBR参考资料int 19h

IT圈 admin 13浏览 0评论

2024年11月2日发(作者:桑沈然)

MBR参考资料:从INT 19H开始……(zz)

System Boot Sequence

系统BIOS是机器被加电之后首先被运行的程序。我们下面看一看一个典型的Boot Sequence

所包含的步骤,当然,由于硬件BIOS厂商的不同,这些序列会有一些不同,但下面所列的,

是你的主机被加电之后,通常都会发生的序列。

当机器被打开时,等电源稳定之后,电源会发送一个“加电成功信号”给芯片,以启动时钟生

成器(8284);

然后,CPU重新自设定为初试状态,开始准备运行。

当CPU最初被启动的时候,系统RAM中是空的,没有任何内容可供执行。当然CPU设计

者也知道这一点,所以他们对CPU进行了预先编程,以让CPU在这个阶段总是去查找系统

BIOS ROM中的一个固定的位置,以启动BIOS Boot Program,这个位置为FFFF0h,这个位

置是UMA临近结尾的位置。

之所以选择这个位置是因为,这样就不会引起由于ROM的大小改变而造成的兼容性问题。

既然FFFF0h到UMA结束的位置之后16个字节,所以这里只放置着一个Jump指令,以进一

步跳转到真正的BIOS startup program的位置。(不同的BIOS厂商可以将其放在不同的位置,

只需要通过Jump指定就可以了)。

然后BIOS开始实施Power-On Self Test(POST),在这个过程中,如果遇到任何错误,Booting

处理就会结束,机器会被挂起。

然后BIOS开始查找显示卡。精确的说,是查找被内建在BIOS内部的显示卡程序,并执行它,

它通常被放在C0000h的内存位置,它的作用是初始化显示卡。绝大多数的现代显示卡都能

够在显示器上显示它的相关信息。这就是为什么当我们开机的时候,首先会在显示器的顶端

会出现关于显示卡的信息。

然后BIOS会查看其它设备的ROM,看一看这些设备之中哪些存在着BIOS,通常能够在

C8000h的位置找到IDE/ATA硬盘的BIOS,并执行它们。如果找到任何其它设备的BIOSes,

它们也会被执行。

然后BIOS显示它的启动屏幕。

然后BIOS开始做进一步的检测,包括我们可以看到的内存容量检测。在这个阶段,如果BIOS

遇到任何错误,BIOS将会在屏幕上显示它的错误信息。

然后BIOS会根据自己的"系统资源列表“,来对系统资源进行进一步的检测以确定究竟那些系

统资源(设备)被安装在机器上。有些计算机会逐步显示这些被检测到的设备。

如果BIOS支持Plug&Play标准,它将会检测和配置Plug&Play设备,并显示这些它找到的设

备。

等着一些检测结束之后,BIOS会在系统屏幕上列出一个检测总结。

然后BIOS开始寻找一个启动设备,你可以通过配置BIOS来决定其搜索的顺序,这些设备包

括Floppy Disk(A:),或者Hard Disk(C:),甚至还可以包括CD-ROM Driver或者其它设备。

当找到响应的启动设备之后,BIOS将会查找Boot信息以开始OS的启动过程。如果它找到

了一个Hard Disk,它将会查找一个位于Cylinder 0, Head 0, Sector 1的Master Boot Record(硬

盘的第一个扇区),如果它找到的是Floppy Disk,它也会读区软盘的第一个扇区。

如果找不到任何启动设备,系统将会显示一条错误信息,然后冻结系统。如果找到了响应的

启动设备,BIOS会将读到的扇区放在内存7C00h的位置,并跳转到那里执行它。从此以后,

就有硬件启动阶段进入了OS启动阶段。

总之,这个阶段有大量的事情要做,比如自检,初始化各种芯片,控制器,与端口;包括显

示器,内存,键盘,软驱,串口等等;在这个过程中BIOS将检测到的数据放置于1K到2K

的RAM,这个区域因此也被称为BIOS Data Area;同时还将中断向量以及BIOS程序运行所

需要的Stack设置置于0到1K的RAM。

最终,POST执行INT 19h中断,找到可以启动的磁盘,并将boot程序装入内存7C00h,并将

控制权交给OS的boot程序。

当BIOS INT 19h被执行以后,系统进入OS Booting阶段。

几个术语:

Master Booter: 放置于Hard disk的第一个扇区(即MBR),用于装载boot block的程序,466

字节。

Boot Sector:放置与Floppy的第一个扇区,或者Hard disk的某一分区的第一个扇区的用于装

载Secondary boot,或其它程序的可运行程序,512字节。

Secondary Boot:放置于非Floppy/Hard disk的第一个扇区,以及Hard disk的任意分区的第一

个扇区之外的任意其它位置,用于装载OS,或其它程序的可运行程序。 无大小限制。

boot顺序:

当用硬盘启动OS的时候,以上调用顺序为 MB -> BS -> SB -> OS;

当用软盘启动OS的时候,以上调用顺序为 BS -> SB -> OS。

硬盘启动

硬盘的第一个扇区(sector)被称作MBR(Master Boot Record)。由于硬盘可以有多个分区,

所以在MBR上,不仅放置着用于启动的可执行代码master boot,还放着磁盘分区表(DPT),

占用66个字节,所以MBR中的可执行代码必须在512 - 66 = 446个字节以内。

MBR结构:

偏移 内容 大小(字节)

0h 主引导程序 最大466

01BEh 硬盘分区表(DPT) 64

01FEh 启动标志(0x55 0xAA) 2

硬盘分区表(DPT)结构:

偏移 内容 大小(字节)

01BEh 分区1的分区数据表 16

01CEh 分区2的分区数据表 16

01DEh 分区3的分区数据表 16

01FEh 分区4的分区数据表 16

分区数据表(Partition Data Table)结构:

偏移 内容 大小(字节)

00h 引导ID标记(Boot indicator) 1

01h 起始扇区头号 1

02h 起始扇区 (柱面号的最高2位) 1

03h 起始柱面号# (柱面号的低位) 1

04h 系统属性ID 标记 1

05h 结束扇区头号 1

06h 结束扇区(柱面号的最高2位) 1

07h 结束柱面号# (柱面号的低位) 1

08h 此分区前的扇区总数目 4

0Bh 此分区的扇区总数目 4

引导ID标记(Boot indicator):

00h:不可启动分区

80h:可启动分区(只能有一个分区为此ID)

系统属性ID 标记(System Indicator ):

00h:未知操作系统

01h:DOS FAT12(16位扇区数)

02h:XENIX

04h:DOS FAT16(16位扇区数)

05h:DOS 扩展分区(DOS 3.3+)

06h:DOS 4.0 (Compaq 3.31), 32位扇区数

51h:Ontrack扩展分区

64h:Novell

75h:PCIX

DBh:CP/M

FFh:BBT

注意:

十六进制标记55 AA,标志着一个有效的引导记录(boot sector)的结尾。每一个分区的引导

记录中都必须有这个标记。

INT 19H是怎么处理启动的?

INT 19会将MBR的512字节装载到内存0x7c00中,然后JUMP到0x7c00处,开始执行MBR

的可执行程序(master booter),Master booter最起码需要做这些事情:

检测MAGIC(Signature)是否为合法值(十六进制55 AA);

将自己移动到其它位置(一般是0x0600),将0x7C00到0x7c00+512K的空间让出来,以备其后

将boot sector程序装入这个位置,这样才能和直接从软盘直接装入boot sector程序相一致;

具体移动到什么位置,则根据设计而定,理论上,可以移动到任何非冲突位置(即没有被预

留为其它程序所用的位置);但一般情况下,都是在0X000800至0X0A0000之间寻找一端空间

存放。

查看分区表,将被设为活动的分区的第一个Sector装入0X7C00的位置,正常的情况下,此

Sector放置的就是boot sector程序;

最终,master booter跳转到0X7C00的位置,开始执行boot sector

2024年11月2日发(作者:桑沈然)

MBR参考资料:从INT 19H开始……(zz)

System Boot Sequence

系统BIOS是机器被加电之后首先被运行的程序。我们下面看一看一个典型的Boot Sequence

所包含的步骤,当然,由于硬件BIOS厂商的不同,这些序列会有一些不同,但下面所列的,

是你的主机被加电之后,通常都会发生的序列。

当机器被打开时,等电源稳定之后,电源会发送一个“加电成功信号”给芯片,以启动时钟生

成器(8284);

然后,CPU重新自设定为初试状态,开始准备运行。

当CPU最初被启动的时候,系统RAM中是空的,没有任何内容可供执行。当然CPU设计

者也知道这一点,所以他们对CPU进行了预先编程,以让CPU在这个阶段总是去查找系统

BIOS ROM中的一个固定的位置,以启动BIOS Boot Program,这个位置为FFFF0h,这个位

置是UMA临近结尾的位置。

之所以选择这个位置是因为,这样就不会引起由于ROM的大小改变而造成的兼容性问题。

既然FFFF0h到UMA结束的位置之后16个字节,所以这里只放置着一个Jump指令,以进一

步跳转到真正的BIOS startup program的位置。(不同的BIOS厂商可以将其放在不同的位置,

只需要通过Jump指定就可以了)。

然后BIOS开始实施Power-On Self Test(POST),在这个过程中,如果遇到任何错误,Booting

处理就会结束,机器会被挂起。

然后BIOS开始查找显示卡。精确的说,是查找被内建在BIOS内部的显示卡程序,并执行它,

它通常被放在C0000h的内存位置,它的作用是初始化显示卡。绝大多数的现代显示卡都能

够在显示器上显示它的相关信息。这就是为什么当我们开机的时候,首先会在显示器的顶端

会出现关于显示卡的信息。

然后BIOS会查看其它设备的ROM,看一看这些设备之中哪些存在着BIOS,通常能够在

C8000h的位置找到IDE/ATA硬盘的BIOS,并执行它们。如果找到任何其它设备的BIOSes,

它们也会被执行。

然后BIOS显示它的启动屏幕。

然后BIOS开始做进一步的检测,包括我们可以看到的内存容量检测。在这个阶段,如果BIOS

遇到任何错误,BIOS将会在屏幕上显示它的错误信息。

然后BIOS会根据自己的"系统资源列表“,来对系统资源进行进一步的检测以确定究竟那些系

统资源(设备)被安装在机器上。有些计算机会逐步显示这些被检测到的设备。

如果BIOS支持Plug&Play标准,它将会检测和配置Plug&Play设备,并显示这些它找到的设

备。

等着一些检测结束之后,BIOS会在系统屏幕上列出一个检测总结。

然后BIOS开始寻找一个启动设备,你可以通过配置BIOS来决定其搜索的顺序,这些设备包

括Floppy Disk(A:),或者Hard Disk(C:),甚至还可以包括CD-ROM Driver或者其它设备。

当找到响应的启动设备之后,BIOS将会查找Boot信息以开始OS的启动过程。如果它找到

了一个Hard Disk,它将会查找一个位于Cylinder 0, Head 0, Sector 1的Master Boot Record(硬

盘的第一个扇区),如果它找到的是Floppy Disk,它也会读区软盘的第一个扇区。

如果找不到任何启动设备,系统将会显示一条错误信息,然后冻结系统。如果找到了响应的

启动设备,BIOS会将读到的扇区放在内存7C00h的位置,并跳转到那里执行它。从此以后,

就有硬件启动阶段进入了OS启动阶段。

总之,这个阶段有大量的事情要做,比如自检,初始化各种芯片,控制器,与端口;包括显

示器,内存,键盘,软驱,串口等等;在这个过程中BIOS将检测到的数据放置于1K到2K

的RAM,这个区域因此也被称为BIOS Data Area;同时还将中断向量以及BIOS程序运行所

需要的Stack设置置于0到1K的RAM。

最终,POST执行INT 19h中断,找到可以启动的磁盘,并将boot程序装入内存7C00h,并将

控制权交给OS的boot程序。

当BIOS INT 19h被执行以后,系统进入OS Booting阶段。

几个术语:

Master Booter: 放置于Hard disk的第一个扇区(即MBR),用于装载boot block的程序,466

字节。

Boot Sector:放置与Floppy的第一个扇区,或者Hard disk的某一分区的第一个扇区的用于装

载Secondary boot,或其它程序的可运行程序,512字节。

Secondary Boot:放置于非Floppy/Hard disk的第一个扇区,以及Hard disk的任意分区的第一

个扇区之外的任意其它位置,用于装载OS,或其它程序的可运行程序。 无大小限制。

boot顺序:

当用硬盘启动OS的时候,以上调用顺序为 MB -> BS -> SB -> OS;

当用软盘启动OS的时候,以上调用顺序为 BS -> SB -> OS。

硬盘启动

硬盘的第一个扇区(sector)被称作MBR(Master Boot Record)。由于硬盘可以有多个分区,

所以在MBR上,不仅放置着用于启动的可执行代码master boot,还放着磁盘分区表(DPT),

占用66个字节,所以MBR中的可执行代码必须在512 - 66 = 446个字节以内。

MBR结构:

偏移 内容 大小(字节)

0h 主引导程序 最大466

01BEh 硬盘分区表(DPT) 64

01FEh 启动标志(0x55 0xAA) 2

硬盘分区表(DPT)结构:

偏移 内容 大小(字节)

01BEh 分区1的分区数据表 16

01CEh 分区2的分区数据表 16

01DEh 分区3的分区数据表 16

01FEh 分区4的分区数据表 16

分区数据表(Partition Data Table)结构:

偏移 内容 大小(字节)

00h 引导ID标记(Boot indicator) 1

01h 起始扇区头号 1

02h 起始扇区 (柱面号的最高2位) 1

03h 起始柱面号# (柱面号的低位) 1

04h 系统属性ID 标记 1

05h 结束扇区头号 1

06h 结束扇区(柱面号的最高2位) 1

07h 结束柱面号# (柱面号的低位) 1

08h 此分区前的扇区总数目 4

0Bh 此分区的扇区总数目 4

引导ID标记(Boot indicator):

00h:不可启动分区

80h:可启动分区(只能有一个分区为此ID)

系统属性ID 标记(System Indicator ):

00h:未知操作系统

01h:DOS FAT12(16位扇区数)

02h:XENIX

04h:DOS FAT16(16位扇区数)

05h:DOS 扩展分区(DOS 3.3+)

06h:DOS 4.0 (Compaq 3.31), 32位扇区数

51h:Ontrack扩展分区

64h:Novell

75h:PCIX

DBh:CP/M

FFh:BBT

注意:

十六进制标记55 AA,标志着一个有效的引导记录(boot sector)的结尾。每一个分区的引导

记录中都必须有这个标记。

INT 19H是怎么处理启动的?

INT 19会将MBR的512字节装载到内存0x7c00中,然后JUMP到0x7c00处,开始执行MBR

的可执行程序(master booter),Master booter最起码需要做这些事情:

检测MAGIC(Signature)是否为合法值(十六进制55 AA);

将自己移动到其它位置(一般是0x0600),将0x7C00到0x7c00+512K的空间让出来,以备其后

将boot sector程序装入这个位置,这样才能和直接从软盘直接装入boot sector程序相一致;

具体移动到什么位置,则根据设计而定,理论上,可以移动到任何非冲突位置(即没有被预

留为其它程序所用的位置);但一般情况下,都是在0X000800至0X0A0000之间寻找一端空间

存放。

查看分区表,将被设为活动的分区的第一个Sector装入0X7C00的位置,正常的情况下,此

Sector放置的就是boot sector程序;

最终,master booter跳转到0X7C00的位置,开始执行boot sector

发布评论

评论列表 (0)

  1. 暂无评论