【问题标题】:How is 16 bit data stored in 20 bit address in Intel 8086 CPU?Intel 8086 CPU 的 20 位地址中如何存储 16 位数据?
【发布时间】:2018-09-22 07:21:34
【问题描述】:

Intel 8086 中,我们有 20 位 地址总线,因此我们有 2^(20) 个位置。
我对这个 16 位 数据如何存储在 20 位 地址感到困惑。

示例:

如果我想将2 存储在第一个 内存位置,那么我的地址将是
00000000000000000001(20 位) 并且其中的数据将是:
00000000000000010(16 位)。

是这样还是我错过了什么?

谢谢。

【问题讨论】:

标签: intel x86-16 16-bit microprocessors


【解决方案1】:

每个 20 位物理地址槽包含一个 8 位字节。一个 16 位字占用 2 个连续的地址槽。

物理地址(在原始 8086 中)是 20 位宽,数据是(最多)16 位宽。

8086 实际上有一个 16 位数据总线,而 8088 有一个 8 位数据总线,需要 2 个周期来传输一个字,但芯片的大部分其余部分与 8086 相同,直到晶体管布局.

地址宽度和数据宽度不必以任何特定方式相关。


您不会将 20 位线性地址作为数据存储在内存中。存储在内存中的指针通常是 32 位 segment:offset 对。

您可以将指针压缩到 3 个字节,方法是标准化段值以便只需要 4 位偏移量,或者使用任何其他技术来消除由seg<<4 + offset 实模式地址计算引起的一些冗余。

【讨论】:

  • 逻辑上是 16 位,但物理上是 20 位?
  • 我的疑惑是,只有地址位置的名字是20bit,实际数据是16bit?
  • @VijayachandranChettiar:不,逻辑上的线性地址是 20 位。从segment_reg << 4 + offset 计算,其中偏移量为 16 位。地址和数据是不同的东西。您不会在内存中存储 20 位地址。
  • @VijayachandranChettiar:您的第二条评论是正确的:地址是 20 位,数据是 8 位的倍数。
  • "while 8080 had ..." 查看 8086 的 20addressbus 时,关于不同的数据宽度没有太多可说的和 8080 的 16addressbus。我认为您应该与 8088 进行比较,而不是只有 databus 的宽度 是区分因素。
猜你喜欢
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 2011-02-10
  • 1970-01-01
  • 2019-08-15
  • 2012-01-11
相关资源
最近更新 更多