有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 则第二个比较指令不执行,第三行会执行。 我现在是这样理解的,如果有误请指正。