1

DA アドレッシング モードについて 2 つの質問があります。例えば:

STMDA R0!, {R1-R7}

R0 - (7 * 4) + 4つまり、 ARM アーキテクチャのリファレンス マニュアルR0-24によると、開始アドレスは になり、 end_address は になります。R0

そう:

  1. の値はまたはR1に保存されますR0-24R0?
  2. R1が に格納されている場合R0-24、後続のストアはメモリの先頭に向かって (からR0-24R0) 拡張されますか?
4

3 に答える 3

4

ARM の複数のストアとロードを使用する場合、レジスタ値は常に昇順でメモリにロード/ストアされます。そのため、降順複数ストアを使用する場合、レジスタはメモリに逆方向に書き込まれます。あなたのSTMDA指示は効果的に次のステップに分解されます。

  • R7で保管R0
  • R6で保管R0 - 4
  • R5で保管R0 - 8
  • R4で保管R0 - 12
  • R3で保管R0 - 16
  • R2で保管R0 - 20
  • R1で保管R0 - 24
  • から 28 を引きますR0(書き戻しのため - !)。

だから、あなたの質問に答えるために:

  1. の値はR1に保存されR0 - 24ます。R0(ここでは、命令を実行した後ではなく、命令を実行する前の値を意味します。ライトバックを使用して!いるため、命令の後にR028 が減算されます。)

  2. R1に格納されR0 - 24ますが、上で説明したように、R1はその値がメモリに格納される最後のレジスタです。 R7が最初に格納され、そこからの後続のストアがメモリ内で下方に拡張されます。

この回答をサポートするドキュメントを知らないことを認めなければなりません。また、最後にARMコーディングを行ってからしばらく経ちました。ただし、ARM がレジスタを降順の複数ストアに格納する方法を疑問に思ったことは確かに覚えています。私はこれを見つけるために短いプログラムを書くことでこれを理解しました。

于 2009-11-17T15:16:03.980 に答える