ARMv7-M 手册中没有 "beq" 或 "bne" 指令?
No "beq" or "bne" instruction in ARMv7-M manual?
我正在研究运行 Cortex-M4 处理器和 ARM/Thumb 指令集的 STM32l475 微控制器。我看到(从objdump
)在ARM程序的二进制文件中生成了beq.n
和bne.n
指令(我在编译程序时添加了-mthumb
标志)。但是,我在最新的 ARMv7-M 手册中找不到这些分支指令。
谁能告诉我原因?手册中有哪些指令相当于这两个分支指令?
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 部分中的条件代码 table,您会将 beq
编码为 11010000[imm8]
.
我正在研究运行 Cortex-M4 处理器和 ARM/Thumb 指令集的 STM32l475 微控制器。我看到(从objdump
)在ARM程序的二进制文件中生成了beq.n
和bne.n
指令(我在编译程序时添加了-mthumb
标志)。但是,我在最新的 ARMv7-M 手册中找不到这些分支指令。
谁能告诉我原因?手册中有哪些指令相当于这两个分支指令?
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 部分中的条件代码 table,您会将 beq
编码为 11010000[imm8]
.