明确地解码ARM指令

时间:2013-11-04 16:49:36

标签: assembly arm processor armv7 thumb

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

让我们举例说明以下两条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是相对跳转目标,因此它们可以有任何值。

这种解码看起来很模糊,但我肯定是错的。我在这里错过了什么?任何关于此的亮点都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

在B指令的T3编码下,有伪代码,表示:

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

你可以看到CLREX确实有1110(AL)的“cond”字段。

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