ARMv7-M手册中没有“ beq”或“ bne”指令?

时间:2019-03-25 14:31:46

标签: arm armv7 cortex-m

我正在研究一个运行Cortex-M4处理器和ARM / Thumb指令集的STM32l475微控制器。我从objdump看到,在ARM程序的二进制文件中生成了beq.nbne.n指令(编译程序时,我添加了-mthumb标志)。但是,在最新的ARMv7-M手册中找不到这些分支说明。

有人可以告诉我原因吗?手册中有哪些等效于这两个分支说明的说明?

1 个答案:

答案 0 :(得分:4)

beqbne是条件分支;换句话说,它们是 unconditional 分支b的条件版本。 eqne是两个不同的条件代码。它们在A7.3节中描述。 beq表示分支,如果相等,而bne表示分支,如果不相等

b分支指令在Thumb模式下具有两种不同的编码。您看到的编码可能是编码A7.7.12中描述的T1:

  

B<c> <label>

15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 1  1  0  1 [-<cond>--] [--------imm8---------] 

在这种编码中,条件代码(如eqne)在位8-11中直接编码为指令。从objdump进行反汇编会显示条件代码,而不是上面的<c>。因此,使用A7.3节中的条件代码表,您可以将beq编码为11010000[imm8]