【发布时间】:2017-05-09 09:22:19
【问题描述】:
摘自英特尔开发文档第 3 卷第 9 节
硬件复位后获取并执行的第一条指令位于物理地址 FFFFFFF0H。
此地址比处理器最高物理地址低 16 个字节。
EPROM 包含 软件初始化代码必须位于此地址。
在实地址模式下,地址 FFFFFFF0H 超出了处理器的 1 MB 可寻址范围。处理器被初始化到这个起始地址如下。
CS寄存器有两部分:可见段 选择器部分和隐藏基地址部分。
在实地址模式下,基地址通常由 将 16 位段选择器值向左移动 4 位以产生 20 位基地址。然而,在一个 硬件复位,CS寄存器中的段选择器加载F000H,基地址加载 FFFF0000H。因此,起始地址是通过将基地址添加到 EIP 寄存器中的值(即 即,FFFF0000 + FFF0H = FFFFFFF0H)。
我的问题是为什么它在这里使用单词字节,而它似乎只对位有意义。假设 CPU 的物理限制是 0xFFFFFFFF,那么 0xFFFFFFF0 距离该限制 16 bits,而不是字节。现在如果英特尔闪存必须包含映射到顶部的每个地址的单字节值,那么我想我们可以调用 16 位字节?
【问题讨论】:
-
CPU 没有 bit 寻址,地址是字节地址,因此是 16 bytes 而不是 Intel 文档所说的位。
-
@WeatherVane 有。也许你的十六进制算术需要复习一下。包括
0xFFFFFFF0,有16个十六进制值小于等于0xFFFFFFFF。每个值对应 1 个字节。因此,16 个字节... -
@Gene 可能他已经按照你的编辑了他的评论,但是你说的和 WeatherVane 说的有什么矛盾?毕竟,你们都同意 16 字节在这里是正确的。
-
@Downvoter 我一点也不反对他。我说“风向标有它”作为我的前三个字。我只是推测 OP 的问题是十六进制算术而不是位与字节。
-
@Gene 那么对不起,我以为您针对的是 WeatherVane,质疑 CPU 具有字节寻址,如“CPU 没有位寻址,有吗? "你只是放错了一个点而不是一个问号。我以为你的全部评论都是针对 WeatherVane 的。解释会有什么不同。
标签: assembly x86 firmware real-mode