一、介绍
- 系统开机或者重启
- BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
- 读取主引导记录(MBR)。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
- 检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
- 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处, 然后继续执行。
- 根据MBR中的引导代码启动引导程序。
![引导程序](http://computer.uoh.edu.cn/uploads/allimg/150717/1_150717103322_1.jpg)
二、几个问题
- 为什么需要磁盘引导程序
为什么需要磁盘引导程序而不是直接载入操作系统?或许是因为历史原因,BIOS最初是为最原始的8位PC所创,8位的PC磁盘很小,所以BIOS只能先载入磁盘引导程序然后通过磁盘引导程序导入操作系统。
- 磁盘引导程序为什么要从1扇区,0磁头,0磁道加载到7c00H处
“引导程序加载器--int19”。由于BIOS加载磁盘引导程序时需要调用系统中断int19来加载引导程序,而这个中断指定了将磁盘1扇区,0磁头,0磁道加载到7c00H处。
- 磁盘引导程序为什么最大只能是512字节
“A bootstrap must be exactly512 bytes long because of the two byte check and the one sector limitation.”
“一个引导程序必须为512字节,因为他的大小有一个扇区的限制,最后两个字节需要设置为'0xAA55'。”
- 磁盘引导程序为什么是16位
因为DOS系统是16位,X86系统都向后兼容引导时的16位模式。