阮一峰:为什么主引导记录的内存地址是0x7C00

移动开发
《计算机原理》课本说,启动时,主引导记录会存入内存地址0x7C00。这个奇怪的地址,是怎么来的,课本就不解释了。我一直有疑问,为什么不存入内存的头部、尾部、或者其他位置,而偏偏存入这个比 32KB 小1024字节的地方?昨天,我读到一篇文章,终于解开了这个谜。

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

这个奇怪的地址,是怎么来的,课本就不解释了。我一直有疑问,为什么不存入内存的头部、尾部、或者其他位置,而偏偏存入这个比 32KB 小1024字节的地方?

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

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

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

  1. 通电
  2. 读取ROM里面的BIOS,用来检查硬件
  3. 硬件检查通过
  4. BIOS根据指定的顺序,检查引导设备的***个扇区(即主引导记录),加载在内存地址 0x7C00
  5. 主引导记录把操作权交给操作系统

所以,主引导记录就是引导"操作系统"进入内存的一段小程序,大小不超过1个扇区(512字节)。

0x7C00这个地址来自Intel的***代个人电脑芯片8088,以后的CPU为了保持兼容,一直使用这个地址。

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

当时,搭配的操作系统是86-DOS。这个操作系统需要的内存最少是32KB。我们知道,内存地址从0x0000开始编号,32KB的内存就是0x0000~0x7FFF。

8088芯片本身需要占用0x0000~0x03FF,用来保存各种中断处理程序的储存位置。(主引导记录本身就是中断信号INT 19h的处理程序。)所以,内存只剩下0x0400~0x7FFF可以使用。

为了把尽量多的连续内存留给操作系统,主引导记录就被放到了内存地址的尾部。由于一个扇区是512字节,主引导记录本身也会产生数据,需要另外留出512字节保存。所以,它的预留位置就变成了:

  1. 0x7FFF - 512 - 512 = 0x7C00  

0x7C00就是这样来的。

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

  1. +--------------------- 0x0 
  2. | Interrupts vectors 
  3. +--------------------- 0x400 
  4. | BIOS data area 
  5. +--------------------- 0x5?? 
  6. | OS load area 
  7. +--------------------- 0x7C00 
  8. | Boot sector 
  9. +--------------------- 0x7E00 
  10. | Boot data/stack 
  11. +--------------------- 0x7FFF 
  12. | (not used) 
  13. +--------------------- (...) 

(完)

责任编辑:倪明 来源: 阮一峰的博客
相关推荐

2013-08-05 15:44:36

C语言基础

2015-09-24 09:43:08

阮一峰持续集成

2011-12-05 10:44:38

inodeLinux文件系统

2012-11-15 09:43:08

开发算法高斯模糊

2021-08-26 05:01:40

0x3f 数组算法

2017-07-25 15:09:48

Linux地址转化

2015-11-13 11:33:39

阮一峰ecmascript

2015-10-08 08:44:23

阮一峰Github清点对象

2015-11-02 19:11:27

阮一峰javascript循环加载

2015-09-17 15:23:56

阮一峰网页性能

2015-09-06 10:34:54

蒙特卡洛阮一峰

2015-09-18 15:21:33

求职就业创业阮一峰

2021-01-28 10:19:57

Windows 10硬盘软件

2021-02-11 09:14:36

内存虚拟机数据

2021-11-17 08:26:22

空类EBO技术

2015-09-07 09:53:02

Objective-CRuntime

2021-07-09 06:48:29

数组存储内存

2022-09-19 08:12:47

编译器程序函数

2020-05-07 10:09:30

MAC地址网络协议网络

2013-09-27 11:31:18

IP地址MAC地址
点赞
收藏

51CTO技术栈公众号