【问题标题】:Decoding ARM instructions unambiguously明确解码 ARM 指令
【发布时间】:2013-11-04 16:49:35
【问题描述】:

目前我尝试研究指令空间或 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为相对跳转目标,可以取任意值。

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

【问题讨论】:

    标签: assembly arm processor armv7 thumb


    【解决方案1】:

    在B指令的T3编码下,有一段伪代码写着:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2019-04-26
      • 1970-01-01
      • 2019-04-30
      相关资源
      最近更新 更多