i++循环与i--循环的执行效率
参考:http://www.limodev.cn/blog
CPSR(current program status register):程序状态寄存器,在用户级编程时用于存储条件码。
CPSR包含条件码标志等。
CPSR的条件标志位:
N:本位设置成当前指令运算结果的bit[31]的值。当两个表示的有符号整数运算时,n=1表示运算结果位负数,n=0标示结果为正数或0,即N可以标示结果是否为负。
Z:Z=1表示运算的结果为0,Z=0表示运算的结果不为0。对于CMP指令,Z=1表示进行比较的两个数大小相等,即Z可以标示结果是否为0。
C:
1)在加法指令中(包括比较指令CMP),当结果产生了进位,则C=1,表示无符号运算数发生下溢出;其他情况下C=0;
2)在减法指令中(包括减法指令CMP),当运算中发生错位,则C=0,表示无符号运算数发生下溢出;其他情况下C=1;
即C可以标示结果是否有进位。
V: 对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号为溢出;通常其他指令不影响V位。即V可以标示结果是否有溢出(Q位也有此功能)。
i- -操作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i > 0,可以直接通过Z标志判断出来。
i++操作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对 于i < n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。