《计算机原理》?教科书上说主引导记录在启动时会存放在内存地址0x7C00处。这个奇怪的地址是怎么来的,课本上没有解释。我一直想不通为什么不是存放在内存的头尾等位置,而是存放在这个比32KB还小1024字节的地方?昨天看了一篇文章,终于解开了这个谜团。首先,如果你不知道Masterbootrecord(MBR)是什么,可以先看《计算机是如何启动的?》。简单的说,电脑启动就是这样一个过程。上电读取ROM中的BIOS检查硬件硬件检查通过BIOS,按照指定的顺序检查引导设备的第一个扇区(即主引导记录),加载到内存地址0x7C00。主引导记录将操作权交给操作系统所以,主引导记录是一个引导“操作系统”进入内存的小程序,大小不超过1个扇区(512字节)。地址0x7C00来自Intel第一代个人电脑芯片8088,以后的CPU为了保持兼容性一直在使用这个地址。1981年8月,IBM最早的个人电脑IBMPC5150面世,使用的就是这种芯片。当时配套的操作系统是86-DOS。此操作系统所需的最小内存为32KB。我们知道内存地址是从0x0000开始编号的,32KB内存是0x0000~0x7FFF。8088芯片本身需要占用0x0000~0x03FF,用于保存各种中断处理程序的存储位置。(主引导记录本身就是中断信号INT19h的处理程序。)因此,只能使用内存的0x0400~0x7FFF。为了给操作系统留下尽可能多的连续内存,主引导记录被放在内存地址的末尾。由于一个扇区是512字节,主引导记录本身也会产生数据,另外需要预留512字节用于存储。因此,它的保留位置就变成了:0x7FFF-512-512=0x7C000x7C00就是这么来的。电脑启动后,32KB内存的使用情况如下。+--------------------0x0|中断向量+--------------------0x400|BIOS数据区+-------------------0x5??|OSloadarea+--------------------0x7C00|引导扇区+-------------------0x7E00|Bootdata/stack+--------------------0x7FFF|(未使用)+--------------------(...)(完)
