在执行具有立即值的逻辑运算时是否定义了CPSR C标志?

时间:2014-11-15 17:58:03

标签: arm

例如movs r0, #immediate
C标志是未更改,未定义,零还是最后一个旋转位?

1 个答案:

答案 0 :(得分:1)

令人困惑的是,它取决于指令编码和涉及的常量。对于使用简单立即数的16位Thumb编码,APSR.C始终不受影响。

对于使用修改的immediates的ARM / Thumb-2编码,它取决于常量的扩展。引用ARMv7 ARM," A5.2.4修改ARM指令中的立即常量":

  

执行

     

旋转字段设置为0b0000的逻辑指令不会影响APSR.C.否则,逻辑标志设置指令将APSR.C设置为修改后的立即常量的位[31]的值。

Thumb-2类似,但定义稍微复杂一些 - 本质上,涉及8位字段旋转的常量会影响进位标志,尽管那些涉及复制的标志不会发生。

为了说明这一切,举一些例子:

  Constant    APSR.C
         #0  unchanged
      #0xFF  unchanged
     #0xFF0  0
#0xF000000F  1
#0xFF00FF00  unchanged (Thumb-2 only)