1

私はTheArmSystem Developers Guideを学んでいて、本の例の1つについて疑問に思っています。

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

0x00000008これが、r1のMSBがキャリーにシフトアウトされ、3番目のビット(2 ^ 3 = 4)が4番目のビット(2 ^ 4 = 8)にシフトされたためにr0になる理由です。

于 2012-05-02T17:14:59.400 に答える