1

目前我试图研究指令空间或ARMv7处理器的重新分区,参见。在此处找到的文档。目前有一个细节让我感到困惑,那就是处理器如何消除一些指令对之间的歧义。

例如,让我们考虑以下两个 THUMB 指令:

  • A8.8.18 B:编码 T3

    +-+-+-+-+-+-+-------+-----------+-+-+--+-+--+---------------------+
    |1|1|1|1|0|S| cond  |   imm6    |1|0|J1|0|J2|        imm11        |
    +-+-+-+-+-+-+-------+-----------+-+-+--+-+--+---------------------+
    
  • A8.8.32 CLREX:编码 T1

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+--+-+-+-+-+-+-+-+-+-+-+-+
    |1|1|1|1|0|0|1|1|1|0|1|1|1|1|1|1|1|0|0 |0|1 |1|1|1|0|0|1|0|1|1|1|1|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+--+-+-+-+-+-+-+-+-+-+-+-+
    

需要注意的两件事是,两条指令的所有固定位都相等,其次,第二条指令的 cond = 1110,这是一个有效的条件代码 (AL)。根据指令语义,S 是符号位,J2:J1:imm6:imm11 是相对跳转目标,所以它们可以有任何值。

这个解码看起来模棱两可,但我肯定是错的。我在这里想念什么?对此的任何说明将不胜感激。

4

1 回答 1

1

在 B 指令的 T3 编码下,有一个伪代码:

if cond<3:1> == '111' then SEE "Related encodings";

你可以看到它确实CLREX1110(AL)的“cond”字段。

这是有道理的,因为对于无条件分支,编码更短,因此“总是/从不分支”位模式可以重复用于其他指令。完整列表见表格A6.3.4 Branches and miscellaneous control

于 2013-11-04T17:14:10.477 回答