x86实模式如何在具有<640K RAM的机器上运行?

时间:2015-03-29 06:10:55

标签: x86 osdev x86-16

这个问题主要是出于历史兴趣,但我一直无法找到任何有关它的文档。我在x86实模式下可以找到的所有文档(包括英特尔手册[1]和在线内存映射[2])都假定系统内​​存为640KiB。然而,最初的IBM PC只有16KiB或64KiB的RAM [3]。

这是怎么回事?两个具体问题:

  1. 如果访问的内存不存在,CPU的行为如何?英特尔手册[1]指出,对于实模式,某些指令会触发#GP(一般保护故障)&#34;如果内存操作数有效地址超出CS,DS,ES,FS或GS段限制& #34;,和其他人,&#34;如果操作数的任何部分位于从0到FFFFH的有效地址空间之外。&#34;这似乎并没有暗示你可以获得#GP来访问不存在的良好寻址的内存。那么在这种情况下CPU会做什么?
  2. 根据内存映射[2],BIOS通常将MBR加载到0x7c00,这是在原始&#34;廉价&#34;的内存空间之外。 IBM PC只有16KiB的RAM。它是如何应对这一点的? (BIOS设计最初是不是将代码加载到0x7c00?)
  3. [1] http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

    [2] http://wiki.osdev.org/Memory_Map_(x86)

    [3] http://en.wikipedia.org/wiki/IBM_Personal_Computer#PC

1 个答案:

答案 0 :(得分:8)

8088处理器直接寻址RAM,没有MMU或任何告诉处理器它正在访问无效地址的电路。所以程序只读取垃圾,通常是0xff。在那之后不久可能持续很长时间:)

原装IBM PC,内存为16 KB,没有任何磁盘驱动器。因此,引导地址无效并不重要。预计用户只能使用ROM Basic。它不是很受欢迎。如果您是用软盘购买的,那么&#34;商业用途&#34;配置,然后你自动也包括64 KB RAM。所以地址是有效的。这种配置在今天的价格为7,795美元:)

还在this web page上注明。