mgi*_*uca
3
x86
osdev
x86-16
这个问题主要是出于历史兴趣,但我一直无法找到任何有关它的文档.我在x86实模式下可以找到的所有文档(包括英特尔手册[1]和在线存储器映射[2])都假定系统内存为640KiB.然而,最初的IBM PC只有16KiB或64KiB的RAM [3].
这是怎么回事?两个具体问题:
- 如果访问的内存不存在,CPU的行为如何?英特尔手册[1]指出,对于实模式,某些指令会触发#GP(一般保护故障)"如果内存操作数有效地址超出CS,DS,ES,FS或GS段限制",并且对于其他人,"如果操作数的任何部分位于从0到FFFFH的有效地址空间之外." 这似乎并不表明您可以获得#GP来访问不存在的良好寻址的内存.那么在这种情况下CPU会做什么?
- 根据存储器映射[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