为什么BIOS要将主引导扇区(MBR)加载到0x7c00这个地址?

0x7c00是BIOS将主引导扇区加载到内存的地址。0x7c = 32KB - 1KB,为什么是这个数?

从头开始讲:

计算机是这样启动的:

  1. 上电
  2. 读取ROM里面的BIOS,用来检查硬件(Power On Self Test)
  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字节保存。所以,它的预留位置就变成了:

0x7FFF - 512 - 512 + 1 = 0x7c00,也即 32KB - 1KB。

所以0x7c00 就是这样来的。

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


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

参考来源:Why BIOS loads MBR into 0x7C00 in x86 ?

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值