![]() |
1
2
原始ARM指令集允许大多数指令是有条件的。这主要用于以下情况:
这将被编译为如下内容:
在这里,实际的操作码是mov,并且它附加了一个条件,因此它只在设置Z-Flag之前进行比较时执行。 这将保存分支指令。这背后的想法源于分支机构在过去是一个相当昂贵的操作。今天我们有了更好的分支预测器和推测执行,这使得这种优化效率降低。ARM的较新ISA(Thumb1/2和AArch64)不再支持大多数指令的条件执行。主要原因是更好的分支预测和操作码空间中非常高的成本。条件必须在操作码中进行编码,这会占用4位,这相当多。Thumb和Thumb2有一个伪指令IT(以及附加了不同数量的T(hen)和E(lse)的变体),这允许在它之后的指令具有条件。 尽管如此,AFAIK Cortex M0+不支持ARM-ISA,也不支持Thumb的IT指令。因此,可能您的编译器设置了错误的目标。 |
![]() |
Ilya Loskutov · 无法将单词加载到寄存器中 2 年前 |
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
Arya · 汇编语言中的“标签”——操作码 3 年前 |
![]() |
S1mple · 通过gcc生成64位共享库时的“未定义的主引用” 3 年前 |
![]() |
R0M2 · 为什么“GCC”忽略汇编代码的-fno pic 3 年前 |
![]() |
Akagi Akira · 如何在gnu汇编程序中组装MIPS cpu 3 年前 |