【问题标题】:Intel Reset Vector英特尔重置向量
【发布时间】:2014-04-07 01:20:22
【问题描述】:

可能重复:Software initialization code at 0xFFFFFFF0H

当系统启动时(英特尔),复位向量位于地址0xFFFFFFF0(比 4G 少 16 个字节)(如上述链接所述)。该地址包含 FAR JUMP 到 BIOS 所在的位置。我看了答案、cmets 和引用的链接,也做了一些搜索,但仍然无法理解如何将 32 位地址映射到 16 位(实模式)?

我的困惑是,在这个链接中:http://www.starman.vertcomp.com/asm/bios/index.html,作者提到地址F000:FFF0(16 个字节小于 1MB)包含跳转到 BIOS 所在的位置。

  1. 0xFFFFFFF0 如何映射到F000:FFF0?它甚至被映射了吗?
  2. 如果计算机没有物理4G内存,假设它只有1G,0xFFFFFFF0地址在哪里?

提前感谢您的帮助。

【问题讨论】:

    标签: operating-system x86 x86-64 computer-architecture bios


    【解决方案1】:

    当我有机会时,我会用参考文献编辑它。

    386 手册指出地址线 31-20 在复位时为高电平,直到遇到 JMP,然后它们再次为低电平。映射并不是真的存在,它更像是一个 hack。

    如果没有 RAM 的地址空间的顶部(在具有 1GB RAM 的系统中),芯片组会将 ROM 代码而不是 RAM 映射到该地址。在那里有 RAM 是没有意义的,因为在第一次上电时那里没有代码可以执行,所以它必须是非易失性的。

    【讨论】:

    • 如果有帮助,是主板逻辑或“芯片组”确保复位向量 (0xFFFFFFF0h) 处的指令远跳转到映射到系统 BIOS 入口点 (0x0000) 的内存位置: 0x000F0000h)。总之,每个“主板”都实施了这种“跳跃黑客”。 [感谢 Gustavo Duarte 的解释。查看他的智能博客:duartes.org/gustavo/blog/post/how-computers-boot-up/]
    • 因此,如果您在 32 位系统中安装了 4 GB,“芯片组”逻辑将与“跳转 0x0000:0x000F0000h”指令代码重叠安装 RAM 的最后 16 个字节。
    • @fante 所以 0xffffff0h 可能会跳转到 spi flash 吗?和 0x000F0000h 会在闪存中吗?你能链接一些与闪存设备相关的东西吗?
    猜你喜欢
    • 2017-05-09
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多