例如movs r0, #immediate
C标志是未更改,未定义,零还是最后一个旋转位?
答案 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)