主引导记录的内存地址是0x7C00?
日期:2015年9月28日
《计算机原理》课本说,启动时,主引导记录会存入内存地址0x7C00。
这个的目的,是本课本不怎么解释的解释,我现在有疑问,为什么来存入内存的地址、比32其他位置偏偏存入这个地方的地址、比32KB的小1024字节?
昨天,我读到了一篇文章,终于解开了这个谜。
首先,如果你不知道,主引导记录(主引导记录,缩写为MBR)是什么,可以先读《计算机是如何开始的?》。
简单来说,计算机启动就是这样一个过程。
- 通电
- 读取ROM里面的BIOS,使用硬件检查
- 硬件检查通过
- BIOS根据指定的第一个顺序,检查在引导设备的第一个顺序,即在加载主引导地址时记录0x7C00
- 主引导记录把操作所有者权限
主引导就是引导所以”运行”进入内存的一段小程序,不记录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) +--------------------- (...)