ILD

数据处理指令:比较指令
作者:HerbertYuan 邮箱:yuanjp89@163.com
发布时间:2017-9-26 站点:Inside Linux Development

比较指令和测试指令的目的是修改CPSR的标志位,以便影响下一条指令条件执行。


语法:

CMP{cond} Rn, Operand2

CMN{cond} Rn, Operand2


这两条指令的执行结果不会放入任何寄存器,单纯用于影响标志位。

CMP执行Rn-Operand2,除了结果被丢掉外,等价于SUBS。

CMN执行Rn+Operand2,除了结果被丢掉外,等价于ADDS。


这两条指令根据结果,更新N,Z,C和V标志。


r15寄存器可以用于Rn,值是当前指令的地址加8。r15不可以用于第二操作数,用于移位。


条件影响:

CMP r1, r2

r1作为左边,r2作为右边。

如果r1==r2,则EQ条件码满足。

如果r1>r2,则HI(有符号),GT(无符号)条件码满足。其它类似。


需要一个简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
// C
int cmp(int a)
{
    if (a > 22)
        return 3;
         
    return 0;
}
     
// assembly
cmp r3, #22
ble 28 <cmp+0x28>
mov r3, #3

如果le条件码满足,即a<=22,跳转到if后面执行。


CMN在ADDS指令处分析。


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.