ARM 汇编编程:分支指令性能与内存操作详解
1. 分支指令性能
ARM 64 位指令集在指令流水线中执行。单个指令执行需要三个时钟周期:
1. 从内存将指令加载到 CPU。
2. 解码指令。
3. 执行指令。
不过,CPU 能同时处理三条处于不同阶段的指令,平均每个时钟周期执行一条指令。但当执行分支指令时,后续指令的解码和预加载工作会被丢弃,需重新开始,这意味着分支后的指令要三个时钟周期才能执行。较新的 ARM 处理器有更复杂、更长的流水线,有时能通过猜测分支走向继续执行,但仍可能导致流水线停顿。
在代码中大量使用分支指令会降低性能,可能使程序速度减慢至原来的三分之一。此外,过多分支会导致代码像意大利面一样混乱,难以维护。早期高级编程语言依赖 goto 语句,导致代码难以理解,现代高级语言采用结构化编程避免了这个问题。虽然 ARM 64 没有结构化编程结构,但我们仍需结构化代码,以提高效率和可读性。
2. 更多比较指令
除了主要的比较指令 CMP ,还有另外两条比较指令:
- CMN Xn, Operand2 :使用加法而非减法, N 表示它是 CMP 的反向操作。
- TST Xn, Operand2 :对 Xn 和 Operand2 执行按位与操作,并根据结果更新标志位。
汇编器能在这三条比较指令间切换,以处理一些特殊的
超级会员免费看
订阅专栏 解锁全文
35

被折叠的 条评论
为什么被折叠?



