英特尔重置向量和文档迂腐。位与字节

intel reset vector and documentation pedantics. Bits vs bytes

英特尔开发文档第 3 卷第 9 节摘录

The first instruction that is fetched and executed following a hardware reset is located at physical address FFFFFFF0H.
This address is 16 bytes below the processor’s uppermost physical address.
The EPROM containing the software-initialization code must be located at this address.
The address FFFFFFF0H is beyond the 1-MByte addressable range of the processor while in real-address mode.

The processor is initialized to this starting address as follows.
The CS register has two parts: the visible segment selector part and the hidden base address part.
In real-address mode, the base address is normally formed by shifting the 16-bit segment selector value 4 bits to the left to produce a 20-bit base address. However, during a hardware reset, the segment selector in the CS register is loaded with F000H and the base address is loaded with FFFF0000H. The starting address is thus formed by adding the base address to the value in the EIP register (that is, FFFF0000 + FFF0H = FFFFFFF0H).

我的问题是为什么它在这里使用字节这个词,而它似乎只对位有意义。假设 CPU 的物理限制是 0xFFFFFFFF,那么 0xFFFFFFF0 距离该限制 16 bits,而不是字节。现在,如果英特尔闪存必须包含映射到顶部的每个地址的单字节值,那么我想我们可以调用 16 位,字节?

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

The processor uses byte addressing. This means memory is organized and accessed as a sequence of bytes. Whether one or more bytes are being accessed, a byte address is used to locate the byte or bytes memory.

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

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


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