x86实模式如何在内存<640K的机器上运行?

mgi*_*uca 3 x86 osdev x86-16

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

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

  1. 如果访问的内存不存在,CPU的行为如何?英特尔手册[1]指出,对于实模式,某些指令会触发#GP(一般保护故障)"如果内存操作数有效地址超出CS,DS,ES,FS或GS段限制",并且对于其他人,"如果操作数的任何部分位于从0到FFFFH的有效地址空间之外." 这似乎并不表明您可以获得#GP来访问不存在的良好寻址的内存.那么在这种情况下CPU会做什么?
  2. 根据存储器映射[2],BIOS通常将MBR加载到0x7c00,该存储器空间位于仅具有16KiB RAM的原始"廉价"IBM PC的存储器空间之外.它是如何应对这一点的?(BIOS设计最初是不是将代码加载到0x7c00?)

[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

Han*_*ant 8

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

拥有16 KB RAM的原始IBM PC在没有任何磁盘驱动器的情况下销售.所以引导地址无效并不重要.预计用户只能使用ROM Basic.它不是很受欢迎.如果您使用软盘购买它,即"业务使用"配置,那么您自动也包含64 KB RAM.所以地址是有效的.这个配置今天的价格是7,795美元:)

此网页上还注明了这一点.