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

Posted

技术标签:

【中文标题】ARMv7-M 手册中没有“beq”或“bne”指令?【英文标题】:No "beq" or "bne" instruction in ARMv7-M manual? 【发布时间】:2019-03-25 14:31:46 【问题描述】:

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

谁能告诉我原因?而手册中与这两条分支指令等效的指令有哪些?

【问题讨论】:

【参考方案1】:

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 的反汇编显示条件代码代替上面的 &lt;c&gt;。因此,使用 A7.3 节中的条件代码表,您可以将 beq 编码为 11010000[imm8]

【讨论】:

以上是关于ARMv7-M 手册中没有“beq”或“bne”指令?的主要内容,如果未能解决你的问题,请参考以下文章

MIPS中beq指令是不是需要符号位扩展?

实用汇编指令

某网络赛某题2

智能小车35:从汇编指令bne聊起

armv7-m 裸机 ldr/str 符号内存

arm 汇编 指令看不太懂,高手解释下