[解決済み] ARMアセンブリのstrの説明
質問
不思議なことに、以下のような説明が見つかりません。
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の値がどこに行き着くのか、その値はどうなるのか知りたい。
の実際の値を知る必要があります。
r0
と
r3
を実行中の特定の時点で知ることができます。これは、次のような質問と同じです。
y
で
y = f(x) : x * 2
について何も知らずに。
x
.
r3は論理的に2シフトされ、r0に加算されます。
そうですね。
最後に、r0にr1が追加されます。
のデータムは
r1
は
格納
を、左側で計算された場所に追加するのではありません。
関連
-
[解決済み】バイナリーボム - フェーズ4
-
[解決済み】アセンブリJLEのjmp命令例
-
[解決済み] callq命令とは何ですか?
-
[解決済み] ミップスアセンブリの文字列の長さ
-
[解決済み] MIPSでディブディブ
-
[解決済み] MIPS srlを変数で指定
-
[解決済み] なぜSet on Less ThanはALU演算なのか?
-
[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】lc3 LDR命令と格納される値について
-
[解決済み] アセンブリ言語 - Moduloはどのように行うのですか?
-
[解決済み] DOSBox - このプログラムはDOSモードでは実行できません (アセンブリ)
-
[解決済み] アセンブリ - CMP後のJG/JNLE/JL/JNGE
-
[解決済み] x86-64におけるmovqとmovabsqの違いについて
-
[解決済み] アセンブリ命令のトラップは何をするのですか?
-
[解決済み] アセンブリMIPS .ALIGNとメモリアドレスの理解
-
[解決済み] アセンブリの追加要求の明確化
-
[解決済み] MIPS:lw(ロードワード)命令
-
[解決済み] ESPレジスタとEBPレジスタとは何ですか?