软件初始化代码位于0xFFFFFFF0H [英] Software initialization code at 0xFFFFFFF0H

查看:114
本文介绍了软件初始化代码位于0xFFFFFFF0H的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

英特尔表示,重置后,处理器将置于实模式,并且软件初始化代码从0xFFFFFFF0H开始.我的问题:

Intel says after reset the processor is placed in real mode and the software initialization code starts at 0xFFFFFFF0H. My questions:

  • 如果处理器处于实模式,则如何访问内存> 1MB(0xFFFFFFF0H)

  • If processor is in real-mode how can it acess the memory > 1MB (0xFFFFFFF0H)

这是怎么发生的? 4GB(例如2GB)

How this happens or what happens when RAM in < 4GB ( say 2GB)

如果BIOS映射为0x000FFFFFH,为什么处理器开始以0xFFFFFFF0H执行

If the BIOS is mapped at 0x000FFFFFH why processor starts executing at 0xFFFFFFF0H

请帮助我解决这些问题. 谢谢.

Please help me with these questions. Thanks.

推荐答案

我终于在 Coreboot文档中找到了答案:

x86 CPU每次在复位后唤醒时,都会在实模式下执行此操作.此模式仅限于1MiB地址空间和64k偏移,原始8086/88的复位向量位于0xFFFF0.

Whenever an x86 CPU wakes up after reset, it does it in Real Mode. This mode is limited to 1MiB address space and 64k offsets and the reset vector of the original 8086/88 was located at 0xFFFF0.

由于即使运行当前的处理器(如P3)也没有变化,所以这些较新的CPU感觉就像它们在复位后从0xF000:0xFFF0开始.但是他们没有.复位后,代码段寄存器的基址为0xFFFF0000,因此CPU会为芯片组生成一个物理地址0xFFFFFFF0.芯片组负责将该区域转发到引导ROM.其令人困惑:CPU认为"它在0xF000:0xFFF0处运行代码,但它在0xFFFFFFF0处使用代码.当开发人员意识到将这种设计移植到硅片上时,一定会感到很沮丧.

As there was no change even if we run current processors like P3, these newer CPUs also feels like they where start at 0xF000:0xFFF0 after a reset. But they do not. The base of the code segment register is 0xFFFF0000 after reset, so the CPU generates a physical address of 0xFFFFFFF0 to the chipset. And the chipset is responsible to forward this area to the boot ROM. Its confusing: The CPU "thinks" it runs code at 0xF000:0xFFF0 but instead it uses code at 0xFFFFFFF0. The developers must have been tanked up when they realised this design into silicon.

因此,似乎英特尔文档讨论了在线"使用的物理地址,即访问实总线时的物理地址.而且这与CPU模式无关(总线不知道或不关心CPU模式,CPU负责翻译这些内容).

So it seems the Intel documentation talks about the physical address as used "on the wire", i.e. when accessing the real bus. And this is independent of the CPU mode (the bus doesn't know or care about a CPU mode, it's the CPUs duty to translate these things).

这篇关于软件初始化代码位于0xFFFFFFF0H的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆