我正在研究一个运行Cortex-M4处理器和ARM / Thumb指令集的STM32l475微控制器。我从objdump
看到,在ARM程序的二进制文件中生成了beq.n
和bne.n
指令(编译程序时,我添加了-mthumb
标志)。但是,在最新的ARMv7-M手册中找不到这些分支说明。
有人可以告诉我原因吗?手册中有哪些等效于这两个分支说明的说明?
答案 0 :(得分:4)
beq
和bne
是条件分支;换句话说,它们是 unconditional 分支b
的条件版本。 eq
和ne
是两个不同的条件代码。它们在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---------]
在这种编码中,条件代码(如eq
或ne
)在位8-11中直接编码为指令。从objdump进行反汇编会显示条件代码,而不是上面的<c>
。因此,使用A7.3节中的条件代码表,您可以将beq
编码为11010000[imm8]
。