【问题标题】:Do 16 bit register pairs make a machine 16 bit?16 位寄存器对是否使机器成为 16 位?
【发布时间】:2012-12-05 01:38:49
【问题描述】:

自 1 月以来,我一直在为 xbox 开发一个虚构的复古虚拟机(我根本没有复制 0x10c,事实上我的项目比较旧。只是把它放在那里以防一些一流的粉丝读到这个),它有 6 个通用用途寄存器。这些是 8 位的,但都可以组合成 3 个 16 位寄存器,内存地址虽然是 16 位,程序计数器也是如此。我知道这是一个愚蠢的问题,但我无法弄清楚,是 16 位还是 8 位??? z80使用16位地址,是8位

【问题讨论】:

  • 您必须考虑旧处理器的地址总线和数据总线。地址总线提供了可以访问多少内存的信息(对于地址总线,这在任何情况下都不是真的,但在大多数情况下),数据总线定义了可以存储在累加器寄存器中的最大数量。处理器的位宽主要由其数据总线大小定义,而不是由其地址总线大小定义。
  • 通常是市场营销所描述的,它不一定意味着任何相关的东西。通常它与您的寄存器和/或操作的大小有关。你只能做8位alu运算吗? (称它为 8 位)您可以组合寄存器并进行 16 位操作吗? (称之为 16 位)。它可以解决多少是一个单独的主题,并不总是与寄存器大小有关。大多数 8 位处理器可以寻址超过 256 字节,许多 16 位处理器可以寻址超过 65536 字节。
  • 没有真正的答案——没有普遍接受的 N 位机器的定义。 Z80 不仅使用 16 位地址,而且还具有您所描述的寄存器对(BC、DE 和 HL)以及 IX 和 IY,以及一些 16 位指令来操作它们。

标签: assembly machine-instruction vm-implementation


【解决方案1】:

据我所知,处理器的通用寄存器的位宽决定了它,因为所有的计算都依赖于时钟速度,它只能处理通用寄存器的数量。

例如,在 32 位处理器中,它可以通过寄存器串联进行 64 位计算,但不能将其称为 64 位处理器。当然,在 32 位处理器中也有一些 64 位扩展指令,但它们消耗双时钟,两步。

我认为您的处理器的设计者只是想扩展内存地址空间以支持更大的内存。

所以,我的结论是 8 位处理器。

【讨论】:

    【解决方案2】:

    您的处理器可以一次处理 16 位数据,还是在后台使用两个独立的 8 位操作?如果是前者,则为 16 位。如果是后者,则为 8 位。

    根据您的描述,这听起来像是 16 位,因为它使用 16 位进行数据寻址。

    【讨论】:

      【解决方案3】:

      16 位处理器的最常见定义是处理器可以使用本机指令处理的最长整数类型的大小。如果您的虚拟机具有对 16 位寄存器进行运算并提供 16 位输入的算术指令,则它可以称为 16 位机器。

      另一个常见的定义是地址空间的大小。由于您的虚拟机具有 16 位地址,因此它也符合 16 位的条件。

      【讨论】:

      • 是的,这就是我的想法,但让我感到困惑并让我问这是 8 位但使用 16 位寻址的 z80
      • 6502 及其同类是具有 16 位地址 rdgisters 的 8 位处理器。它绝对是一个 8 位 CPU。
      • 编辑了,我写完后才想起8位CPU有16位地址。
      • 最初的 IBM PC 有一个 8088 处理器,一个 20 位地址总线和一个 8 位数据总线。仍被视为 16 位处理器。
      • @Bo Persson:是的,你是对的。据我所知,这是出于成本原因。最后通过多路复用 8 位数据总线实现 16 位数据总线。结果是一个非常慢的处理器,价格低廉,但操作码与真正的 16 位 8086 兼容。
      猜你喜欢
      • 2013-05-14
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      相关资源
      最近更新 更多