本文共 1286 字,大约阅读时间需要 4 分钟。
各标志位的含义如下:
所有ARM数据处理指令的乘法指令均可选择使用S后缀,并影响状态标志位。而其它指令一般不允许加S后缀,如B 、LDR、SWI、MRS等。 N 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0; 例如:执行movs r0,#0x7FFFFFFF后N=0;因为R0最高位为0 执行movs r0,#0x80000000后N=1;因为R0最高位为1 执行CMP r0,r0后N=0;因为R0-R0=0x00000000; 故N一般看目标寄存器的最高位,即N = Rd[31]。 Z 指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0; 例如:执行CMP r0,r0后Z=1 执行MOVS R0,#0后Z=1 故Z一般看目标寄存器的值是否为0,Rd=0时Z=1,否则Z=0。 C 当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP 指令), 并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值, 其它指令C通常不变; 例如:执行 mov r0,#0xF0000000 ADDS R0,R0,R0 后C=1; 执行 SUBS R2,R2,R2后C=1,因为R2-R2=0不需要借位。 执行 CMP R3,R3后C=1; 执行 MOV R1,0x80000000 movs r0,r1 ,lsr #32 后C=1; 执行 mov r0,#0x10 mov r1,#0x7FFFFFFF subs r3,R0,r1 ,lsr #1 后C=0; 总之,一般情况下加法进位,减法无借位时C=1; 对于结合移位操作的非加/减法指令,C为最后移出的值。 V 当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。 例如:执行 mov r1,#0x80000000 adds r1,r1,r1 后V=1; 执行 mov r1,#0x70000000 adds r1,r1,r1 或 CMN R1,R1 后V=1; 执行 LDR R0,=0x8000000 LDR R1,=0x7FFFFFFF CMP R0,R1 后V=1 ; 总之,两个负数运算结果第31位为0,则V=1 两个正数运算结果第31位为1,则V=1。 另外THUMB指令一般不需要S后缀,便能影响状态标志位。 如 在THUMB状态下下面两条指令相同 movs r0,#0x00 mov r0,#0x00
转载地址:http://qdsqb.baihongyu.com/