我正在学习“手臂系统开发者指南”,我想知道本书中的一个例子:
cpsr = nzcvqiFt_USER // capital indicates flag is set
r0 = 0x00000000
r1 = 0x80000004
MOVS r0, r1, LSL #1
cpsr = nzCvqiFt_USER // capital indicates flag is set
r0 = 0x00000008
r1 = 0x80000004
据我所知,8继承并且由于此进位而基于逻辑左移设置了C标志。为什么r1中的4没有移位? MOVS操作是仅移动所携带的8?
答案 0 :(得分:2)
因为你的结果以r0结尾。
所以,会发生什么:
carry = r1[31] = 1
r0 = r1 << 1
这就是为什么r0变为0x00000008
,因为r1的MSB被移出到进位而第三位(2 ^ 3 = 4)被移位到第四位(2 ^ 4 = 8)。