ARM の複数のストアとロードを使用する場合、レジスタ値は常に昇順でメモリにロード/ストアされます。そのため、降順複数ストアを使用する場合、レジスタはメモリに逆方向に書き込まれます。あなたのSTMDA
指示は効果的に次のステップに分解されます。
R7
で保管R0
R6
で保管R0 - 4
R5
で保管R0 - 8
R4
で保管R0 - 12
R3
で保管R0 - 16
R2
で保管R0 - 20
R1
で保管R0 - 24
- から 28 を引きます
R0
(書き戻しのため - !
)。
だから、あなたの質問に答えるために:
の値はR1
に保存されR0 - 24
ます。R0
(ここでは、命令を実行した後ではなく、命令を実行する前の値を意味します。ライトバックを使用して!
いるため、命令の後にR0
28 が減算されます。)
R1
に格納されR0 - 24
ますが、上で説明したように、R1
はその値がメモリに格納される最後のレジスタです。 R7
が最初に格納され、そこからの後続のストアがメモリ内で下方に拡張されます。
この回答をサポートするドキュメントを知らないことを認めなければなりません。また、最後にARMコーディングを行ってからしばらく経ちました。ただし、ARM がレジスタを降順の複数ストアに格納する方法を疑問に思ったことは確かに覚えています。私はこれを見つけるために短いプログラムを書くことでこれを理解しました。