我正在研究STM32l475微控制器,它运行Cortex-M4处理器和ARM / Thumb指令集。我看到(来自objdump
)在ARM程序的二进制文件中生成了beq.n
和bne.n
指令(我在编译程序时添加了-mthumb
标志)。但是,我在最新的ARMv7-M手册中找不到这些分支说明。
谁能告诉我原因?手册中提供的指令与这两个分支指令相同?
beq
和bne
是有条件的分支;换句话说,它们是无条件分支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]
。