英特尔重置矢量和文档学究。位与字节

时间:2016-12-23 17:10:39

标签: assembly x86 firmware real-mode

摘自英特尔开发文档第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位,字节?

1 个答案:

答案 0 :(得分:7)

来自Intel® 64 and IA-32 architectures software developer's manual volume 1: Basic architecture,第30页第1.3.4节:

  

处理器使用字节寻址。这意味着存储器被组织并作为字节序列访问。无论是访问一个还是多个字节,都使用字节地址来定位字节或字节存储器。

基本上,字节是内存中最小的可寻址单元。要确定单个位的值,需要获取包含其值的整个字节。

0xFFFFFFFF0xFFFFFFF0之间的差异为0x0F或十进制为15。当我们在计算中包含0xFFFFFFF0处的字节时,它是16.存储器是字节可寻址的,因此它“比处理器的最高物理地址低16个字节。”

坦率地说,我不知道你是如何得到这16个的。 16位可以用四个十六进制数字表示(一个十六进制数字对应一个半字节,即4位),在你的引文中没有任何地方可以看到任何关系。