有4个bits表示条件码,可以有 $2^4=16$ 个组合,但是全1的组合表示“从不执行”,一般不
使用,所以有时也说有15条件码。

例子,条件码:

if (a > b)
    a++;
else
    b++;

对应的汇编代码如下。其中R0为a,R1为b:

CMP   R0,R1      ; R0 与 R1 比较
ADDHI R0,R0,#1   ; if(a>b)  a++;
ADDLS R1,R1,#1   ; if(a<=b) b++;

例2:

if (a != 1 && b != 2)
    a = a+b;

对应的汇编代码如下。其中R0为a,R1为b:

CMP R0,#1      ; 比较 R0 与 1
CMPNE R1,#2    ; 若(R0 != 1), 则比较 R1 与 2
ADDNE R0,R0,R1 ; 若(R0 != 1 && R1 != 2), 则执行 R0=R0+R1

注意:
对此处汇编代码多作一些说明。上面第三行ADDNE R0,R0,R1根据条件来执行,而第二行的
比较指令执行与否依赖于第一行的比较指令的结果(对标志位产生的影响),若第一个比较
指令把 Z 标志位置 1, 则第二个比较指令不执行,因此也不会影响标志位,ADDNE就根据
CMP R0,#1的对标志位的影响来确定执行与否(也不执行)。

对比如下汇编代码:

CMP R0,#1
CMPNE R1,#2
ADDEQ R0,R0,R1

如果第一个比较指令结果置 Z 为 1 则第二个比较指令不执行,第三行会执行。 我现在是这样理解的,如果有误请指正。