我无法理解为什么要设置某些xPRS条件标志。
这是代码(我对xPRS标志值进行了评论):
MOVS R0, #0 ; n=0 z=1 c=0 v=0
MOVS R1, #1 ; n=0 z=0 c=0 v=0
MVNS R2, #0 ; n=1 z=0 c=0 v=0
MOVS R3, #0x80000000 ; n=1 z=0 c=1 v=0
MOVS R4, R0 ; n=0 z=1 c=1 v=0
MOVS R5, R1 ; n=0 z=0 c=1 v=0
MOVS R6, R2 ; n=0 z=1 c=1 v=0
我理解问题的部分来自第4行(MOVS R3,#0x80000000)。
ARM用户指南说“当Operand2常量与指令MOVS,MVNS,ANDS,ORRS,ORNS,EORS,BICS,TEQ或TST一起使用时,进位标志更新为常量位[31] ,如果常量大于255并且可以通过移位8位值产生。如果Operand2是任何其他常数,这些指令不会影响进位标志。“
这很好,所以C标志打开的原因是由于0x80000000将位[31]作为1,这又将C标志设置为1.
但是我也有N标志,所以我认为bit [31]也可能是符号,所以也许0x80000000实际上代表-0(bit [31]这是符号为1,其余0是哪个是数字,但是Z标志没有打开,所以情况不是这样吗?为什么它是N而不是Z?
由于