Alb*_*ert 6 x86 operating-system bios computer-architecture
英特尔表示,复位后处理器处于实模式,软件初始化代码从0xFFFFFFF0H开始.我的问题:
如果处理器处于实模式,它如何访问内存> 1MB(0xFFFFFFF0H)
如何发生这种情况或当RAM <4GB(比如2GB)时会发生什么
如果BIOS映射到0x000FFFFFH,为什么处理器开始在0xFFFFFFF0H执行
请帮我解决这些问题.谢谢.
我终于在Coreboot文档中找到了答案:
每当x86 CPU在复位后唤醒时,它都会在实模式下执行.此模式仅限于1MiB地址空间和64k偏移量,原始8086/88的复位向量位于0xFFFF0.
由于即使我们运行像P3这样的当前处理器也没有变化,这些较新的CPU也感觉它们在复位后从0xF0000:0xFFF0开始.但他们没有.复位后代码段寄存器的基址为0xFFFF0000,因此CPU为芯片组生成物理地址0xFFFFFFF0.芯片组负责将此区域转发到引导ROM.令人困惑的是:CPU"认为"它运行代码为0xF000:0xFFF0,但它使用的代码为0xFFFFFFF0.当他们将这种设计实现为芯片时,开发人员必须陷入困境.
因此,英特尔文档似乎谈到了"在线上"使用的物理地址,即访问真正的总线时.这与CPU模式无关(总线不知道或不关心CPU模式,转换这些东西是CPU的责任).
要查看您的问题的实际情况,您将需要一个硬件调试器。正确的文档来自英特尔,引用:http://download.intel.com/design/processor/manuals/253668.pdf,第 9.1.4 节:
\n\n\n\n\n硬件复位后获取并执行的第一条指令位于物理地址 FFFFFFF0H。该地址位于处理器 xe2x80x99 最高物理地址下方 16 个字节。包含软件初始化代码的EPROM 必须位于该地址。
\n
这意味着 BIOS ROM(仅供参考),而不是普通 RAM,即内容是硬连线的。请记住,在这个阶段,RAM 内存甚至还没有设置,VGA 内存(与 RAM 不同)甚至不可用和初始化。
\n\n\n\n\n在实地址模式下,地址 FFFFFFF0H 超出了处理器的 1 MB 可寻址范围。处理器按如下方式初始化为此起始地址。CS 寄存器有两部分:可见段选择器部分和隐藏基址部分。在实地址模式下,基地址通常是通过将 16 位段选择器值向左移动 4 位来生成 20 位基地址。然而,在硬件复位期间,CS寄存器中的段选择器被加载为F000H\n,并且基地址被加载为FFFF0000H。因此,起始地址\n是通过将基地址\n与EIP\n寄存器中的值相加而形成的(即FFFF0000 + FFF0H = FFFFFFF0H)。硬件复位后,\n CS 寄存器第一次加载新值时,\n 处理器将遵循实地址模式下\n 地址转换的正常规则(即,[CS 基地址 = CS 段选择器] *\n 16])。为了确保 CS 寄存器中的基地址保持不变,直到基于 EPROM 的软件初始化代码完成为止,该代码不得包含远跳转或远调用或允许发生中断(这将导致要更改的 CS 选择器值\n)
\n
在此期间,BIOS 本质上是在初始化硬件和内存本身,同时仍以实模式执行。然后最后执行 VGA BIOS(存在于您的 VGA 卡中,可寻址于 0xc700)等等。但这超出了当前的问题。但上面引用的言论基本上回答了你的问题。
\n 归档时间: |
|
查看次数: |
2201 次 |
最近记录: |