ARM 汇编指令详解:标志设置、数据处理与分支跳转
1. 设置标志
在 ARM 汇编中,有两条指令能直接影响状态寄存器(Status Register)的标志,分别是 CMP(比较)和 CMN(负比较)。其中,CMP 更为常用,其指令格式为:
CMP <Operand1> <Operand2>
CMP 指令执行一个概念上的减法操作,即从 Operand1 中减去 Operand2。减法的实际结果会被忽略,但状态寄存器的标志会根据减法的结果(正、零或负,不会产生进位)进行更新。如果减法结果为 0,则零标志(Zero flag)会被设置。
Operand1 必须是一个寄存器,而 Operand2 可以是寄存器、特定值或立即数。例如:
CMP R0, R1 @ 比较 R0 和 R1,即 R0 减去 R1
CMP R0, #1 @ 比较 R0 和 1,即 R0 减去 1
CMP 指令常与 BEQ 指令结合使用,用于创建程序分支或跳转到程序的新部分:
CMP R0, R1
BEQ zeroflagset
如果 R0 和 R1 的比较结果为 0,程序控制将转移到标记为 ‘zeroflagset’ 的程序部分。若分支未发生,则表明 CMP 的结果不为 0,此时无需执行 BNE 功能,后续代码可处理这种情况。
超级会员免费看
订阅专栏 解锁全文
1345

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



