1

我正在学习 Arm System Developers Guide,我想知道书中的一个例子:

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?

4

1 回答 1

2

因为您的结果以 r0 结尾。

所以,会发生什么:

carry = r1[31] = 1
r0    = r1 << 1

这就是为什么 r0 变成0x00000008因为 r1 的 MSB 移出到进位,第三位 (2^3=4) 移到第四位 (2^4=8)。

于 2012-05-02T17:14:59.400 回答