1. ホーム
  2. assembly

[解決済み] ARMアセンブリのstrの説明

2022-02-12 10:33:41

質問

不思議なことに、以下のような説明が見つかりません。 str はアセンブリ言語で動作します。

以下のように理解しています...

str r1,[r2]

...レジスタ1にあるものを保存します。 r1 は、レジスタ2のアドレスに格納されます。 r2 . しかし、どのようにして str は、角括弧がもっと複雑な場合に機能します。例えば

str r1,[r0,r3,lsl#2]

どうなっているのでしょうか?の値がどこにあるか知りたいのです。 r1 が終了し、その値はどうなるのか。テストはできないので、私が思うに推測でやってみるつもりです。

r3 は論理的に2シフトされ、それが r0 . 最後に r1 が追加され r0 .

これは私の推測ですが、私にとってもこれは正しいとは思えません。誰かこれを明確にしてくれませんか?

どのように解決するのですか?

<ブロッククオート

str r1,[r0,r3,lsl#2]

どうなっているんだ?

上の指示は基本的にこうです。 r0 + (r3 << 2) = r1 または、手動でビットシフトを展開する場合。 r0 + (r3 * 4) = r1

この表記は <instruction> <src> [<dst>, <offset>, <shift>] .

オフセットには負の値もあることに注意してください(例. -r3, #lsl2 ).

r1の値がどこに行き着くのか、その値はどうなるのか知りたい。

の実際の値を知る必要があります。 r0r3 を実行中の特定の時点で知ることができます。これは、次のような質問と同じです。 yy = f(x) : x * 2 について何も知らずに。 x .

r3は論理的に2シフトされ、r0に加算されます。

そうですね。

最後に、r0にr1が追加されます。

のデータムは r1 格納 を、左側で計算された場所に追加するのではありません。