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

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



