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

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

请问有人能告诉我原因吗?还有哪些指令在手册中可用且等效于这两个分支指令?
1个回答

9
beqbne是有条件的跳转指令,换句话说,它们是无条件跳转指令b的有条件版本。eqne是两种不同的条件码;它们在A7.3节中有描述。beq表示等于时跳转bne表示不等于时跳转
在Thumb模式下,b跳转指令有两种不同的编码方式。您看到的编码可能是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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接