摘自英特尔开发文档第3卷第9节
硬件复位后获取并执行的第一条指令位于物理地址 FFFFFFF0H。
此地址比处理器的最高物理地址低16个字节 包含EPROM的EPROM 软件初始化代码必须位于此地址 在实地址模式下,地址FFFFFFF0H超出处理器的1 MB可寻址范围。在 处理器初始化为此起始地址如下 CS寄存器有两部分:可见段 选择器部分和隐藏的基地址部分 在实地址模式中,基地址通常由 将16位段选择器值向左移位4位以产生20位基址。然而,在一个 硬件复位时,CS寄存器中的段选择器加载F000H并加载基址 FFFF0000H。因此,通过将基址添加到EIP寄存器中的值来形成起始地址(即 是,FFFF0000 + FFF0H = FFFFFFF0H)。
我的问题是为什么它在这里使用单词bytes时,似乎只对位有意义。假设CPU的物理限制为0xFFFFFFFF
,则0xFFFFFFF0
距离该限制为16 bits
,而不是字节。现在如果英特尔闪存必须包含映射到顶部的每个地址的单字节值,那么我想我们可以调用16位,字节?
答案 0 :(得分:7)
来自Intel® 64 and IA-32 architectures software developer's manual volume 1: Basic architecture,第30页第1.3.4节:
处理器使用字节寻址。这意味着存储器被组织并作为字节序列访问。无论是访问一个还是多个字节,都使用字节地址来定位字节或字节存储器。
基本上,字节是内存中最小的可寻址单元。要确定单个位的值,需要获取包含其值的整个字节。
0xFFFFFFFF
和0xFFFFFFF0
之间的差异为0x0F
或十进制为15。当我们在计算中包含0xFFFFFFF0
处的字节时,它是16.存储器是字节可寻址的,因此它“比处理器的最高物理地址低16个字节。”
坦率地说,我不知道你是如何得到这16个位的。 16位可以用四个十六进制数字表示(一个十六进制数字对应一个半字节,即4位),在你的引文中没有任何地方可以看到任何关系。