目前我试图研究指令空间或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 是相对跳转目标,所以它们可以有任何值。
这个解码看起来模棱两可,但我肯定是错的。我在这里想念什么?对此的任何说明将不胜感激。