[邓特曼的书第 3 版]。 16 位 8086 怎么能寻址 16 倍于 8080 的内存?

[Duntemann's Book 3rd Edition]. How could 16-bit 8086 address 16 times as much memory as 8080?

Duntemann 说 8086 可以寻址的内存是 8080 的 16 倍,并继续详细说明 16 * 64K = 1MB.所以我假设一次 16 位(16 位处理器)* 64K,因为有 16 条地址线 (2^16)。但是,按照这个计算逻辑,8080(8位处理器)也有16条地址线不应该能够解决8 * 64K = 0.5MB吗?

难道 8086 的寻址能力不是 8080 的两倍吗?

来自 Intel 8080' 维基百科页面:

Address width   16-bit

来自 8086 页:

Address width   20 bits

4 行多了 16 倍的地址 space。

为了寻址 1Mb 的内存(20 位)8086 使用了 memory segmentation (real mode),为了获得完整的内存地址,它使用了 2 字节的段寄存器和 2 字节的偏移量作为:

segment * 16 + offset

16x 是 2^202^16 之间的差异。

8080 有 16 位地址 space,这意味着它可以访问 2^16 (65,536) 个不同的地址。因此它可以访问的内存量是 65,536 * (每个地址的内存量)。在我们的例子中,每个地址的内存量为 1 字节,因此可寻址内存量为 65,536 * 1 字节 = 64KB。

8086 有 20 位地址 space,这意味着它可以访问 2^20 个不同的地址 (1MB)

当然 1MB/64KB 是 16。

请注意,处理器的 "bit-ness" 并不总是反映其地址总线的大小。它经常发生,但在这些情况下不会发生。

8080是8位处理器,但它的地址总线是16位宽。同样,8086 是 16 位处理器,但其地址总线是 20 位。