【问题标题】:Why 24 bits registers?为什么是 24 位寄存器?
【发布时间】:2011-01-20 01:40:26
【问题描述】:

在我的工作中,我处理不同的微控制器、微处理器和 DSP 处理器。其中许多具有 24 位寄存器和计数器。

我知道如何使用它们,这不是我的问题。

我的问题是为什么他们有 24 位寄存器!为什么不让它成为 32 位? 据我所知,这不是大小问题,因为寄存器已经是 32 位,但最大为 0xFFFFFF。

这是否提供了更简单的硬件实现?更快的计算? 还是只是“嗯,让我们放 24 位寄存器让程序员的工作更难”?

【问题讨论】:

  • 我遗漏了一些东西——如果最大值是 0xFFFFFF,你怎么能声称寄存器是“真正的 32 位”?
  • 他们这样做的原因与天空是蓝色的相同。
  • FF = 16x16 = 256 = 8 位存储,FFFFFF = 24 位,所以这也是大小问题...
  • @Nick Craver,FF 不是 == 256,它是 255。
  • @kenny - 256 个组合,不是数字,0 到 255 = 256

标签: microcontroller microprocessors 24-bit


【解决方案1】:

我的猜测是大多数 DSP 应用程序根本不需要 32 位。数字音频最常使用 24 位保真度。实现 32 位需要更多的晶体管,因此会导致更高的成本。

为什么 32 位对程序员来说更容易?

此外,您声明寄存器的最大值为 0xFFFFFF,这使得它们根据定义是 24 位,而不是您建议的 32 位。

【讨论】:

  • 我认为您可能是对的(尽管听到明确的答案会很有趣)。查看 Wikipedia 表明 24 位是更自然的大小,这取决于处理速度和/或与输入信号频率的关系,这足以用于高端音频采样。
  • 好点。我有点忘了它也可能很有趣为什么数字音频最多使用 24 位:)
  • 手册说它是 32 位,最多 8 位总是为零。使用 32 位更容易,因为通用寄存器是 32 位的。例如,当您将 24 位寄存器中的值读取到变量中时。对此变量执行的操作将在 32 位中发生。这意味着需要额外的代码来处理溢出。
【解决方案2】:

8/16/32/64 位没有特别的原因。有 24 位 DSP、18 位 PIC、36 位 PDP……每个位都需要时间、金钱和功率,因此拥有足够的位就足够了。没必要做太多。看看原来有 20 条地址线的 PC,尽管内存指针可能高达 32 位。

【讨论】:

  • 18 位 PIC(或 12、14 ..)仅仅是因为内存(所有片上)更小(寄存器大小不匹配)。 PDP 仅使用 6(字符大小)和 3(使用八进制时的数字大小)的倍数。现在 8 的倍数更常见,这正是 24 位方便的原因。 8086 上的地址实际上是 20 位的;但由于这不适合任何寄存器,他们使用段寄存器 - 将它们与 PIC 上的页面选择寄存器进行比较。 32 位处理器往往具有足够宽的寄存器,因此不需要此类地址空间扩展。
【解决方案3】:

根据 Tomas 的回答,一些 DSP 具有寄存器模式,其中溢出将值锁定在最高状态。如果数据是 24 位并且它翻转到第 25 位,它应该锁定在那里,而不是在 32 位翻转。

【讨论】:

    【解决方案4】:

    对于音频,您通常需要 16 位输出。由于您在处理过程中失去了一些精度,因此他们选择了一个比 16 位大一些的合理尺寸,而恰好是 24 位。

    不使用全 32 位的原因是这需要更多的硬件,尤其是乘法。

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多