【问题标题】:What do these two bit values mean in this register transfer notation instruction: ACC <-- [[CIR(15:0)]]?这两个位值在此寄存器传输表示法指令中意味着什么:ACC <-- [[CIR(15:0)]]?
【发布时间】:2022-01-18 07:07:47
【问题描述】:

这本书说:

第 6.01 节介绍了寄存器传输符号的扩展。我们可以用它来描述 指令的执行。例如,LDD指令是这样描述的:

ACC ← [[CIR(15:0)]]

指令在 CIR 中,只需要检查 16 位地址即可确定指令的位置 内存中的数据。该位置的内容被转移到累加器中

例如,我认为如果它是我们要读取的前 16 位,它会是 (0:15),而如果它们是例如第 16 到 32 位,可以是 (16:31) 或 (16:16 (即从第 16 位开始并读取 16 位))

不过,我对 15:0 的顺序感到困惑。有谁知道这些数字具体指的是什么?

谢谢

【问题讨论】:

  • 表示从第 15 位到第 0 位的 16 位。如果你写 0:15,那么第 0 位是最高有效位,几乎为零意义
  • 谢谢...但是说明是从左到右阅读的,对吧?还是从右到左?
  • 从价值上讲,你总是先在纸上写最高有效位,所以显然最左边的位是最高有效位
  • @phuclv 这取决于 CPU 架构:在 PowerPC CPU 上,大多数其他 CPU 上编号为 n 的位传统上编号为 63-n。即使在没有 64 位寄存器的设备上!这意味着8位Example寄存器的上半部分写成Example(56:59)
  • @MartinRosenau 是的,当我在 Raymond Chen 的博客上关注 PowerPC 系列时,我知道那个奇怪的编号。很容易让人头晕目眩。几乎没有人这样做

标签: assembly cpu-registers microprocessors


【解决方案1】:

在过去,通常从 top/msb 到 bottom/lsb 对位进行编号,因此 0 是指令中的第一位或有符号数据中的符号位。

从这里:https://80character.wordpress.com/2018/12/10/pdp-8-instruction-set/

 0  1  2  3  4  5  6  7  8  9 10 11
+-------+---+---+------------------+
| Op    | I | Z |   Offset         |
+-------+---+---+------------------+

例如,一些 PDP-8 指令字段的描述。

HP 的 PA-RISC 以及许多其他指令集在这个方向上描述了位,从 0 的 MSB 到字长的 LSB。

但是,以另一种方式对位进行编号不仅可能而且非常合理。

在大多数情况下,编号只影响人类可读的文本和此类图片。但是,某些指令集具有位测试或字段提取指令,这些指令使用位编号,然后就很重要了。

LSB 为 0 的位编号在逻辑上是有意义的。这样,无论数据大小如何,无论是字节、字还是更长,LSB 始终为 0。从数学上讲,在数据中,LSB 代表 20,因此将 LSB 命名为 bit 0 也是有意义的。

不过,我对 15:0 的顺序感到困惑。有谁知道这些数字具体指的是什么?

此表示法使用更现代的位编号,其中 LSB 为位 0。

【讨论】:

  • 有道理。谢谢。我假设位是从左到右排序的,但实际上它们是从右到左排序的(LSB 到 MSB)
  • PowerPC 仍然向后编号,MSB=0。 IBM 的另一个主要 ISA,zSeries,显然也这样做了。查看 ISA 的 32 位和 64 位版本时会变得混乱!例如移位指令sle 表示移位计数在 GPR RB 的第 27-31 位中指定 ibm.com/docs/en/aix/… 所以这显然听起来很奇怪,必须更改为 64 位。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多