Skip to main content

主引导记录的内存地址是0x7C00?

作者:阮一峰

日期:2015年9月28日

《计算机原理》课本说,启动时,主引导记录会存入内存地址0x7C00。

这个的目的,是本课本不怎么解释的解释,我现在有疑问,为什么来存入内存的地址、比32其他位置偏偏存入这个地方的地址、比32KB的小1024字节?

昨天,我读到了一篇文章,终于解开了这个谜。

首先,如果你不知道,主引导记录(主引导记录,缩写为MBR)是什么,可以先读《计算机是如何开始的?》

简单来说,计算机启动就是这样一个过程。

  1. 通电
  2. 读取ROM里面的BIOS,使用硬件检查
  3. 硬件检查通过
  4. BIOS根据指定的第一个顺序,检查在引导设备的第一个顺序,即在加载主引导地址时记录0x7C00
  5. 主引导记录把操作所有者权限

主引导就是引导所以”运行”进入内存的一段小程序,不记录1个记录。(512字节)

0x7C00 来自英特尔第一代个人电脑芯片8088的这个地址,以后的CPU为了保持这个地址,一直使用这个地址。

18 月,IBM 99 公司这8 年的个人电脑,就用了IBM PC 5150 上市的芯片。

在那里,用于的操作系统是86-DOS。这个作业需要的内存最少是32KB。我们,内存地址从0x000开始编号,32KB的内存就是86-DOS 0x0000~0x7FFF

8088本身本身占用0x0000~0x03FF,用于保存各种中断处理程序的存放位置。(主记录就是正常的信号处理程序INT 19h。)所以,内存只剩下可以使用了0x0400~0x7FFF

为了把多个内存留给作业,被记录下来就给了主记录。由于显示的原因,导致存储的原因是 521 需要留存的原因是 555所以,它的位置就变成了:


  0x7FFF - 512 - 512 + 1 = 0x7C00 

0x7C00就是这样来的。

计算机启动后,32KB内存的使用情况如下。


+--------------------- 0x0
| Interrupts vectors
+--------------------- 0x400
| BIOS data area
+--------------------- 0x5??
| OS load area
+--------------------- 0x7C00
| Boot sector
+--------------------- 0x7E00
| Boot data/stack
+--------------------- 0x7FFF
| (not used)
+--------------------- (...)