[解決済み] ARMにおけるSP(スタック)とLRとは?
質問
何度も定義を読んでいますが、ARMのSPとLRとは何なのか、まだ理解できていません。PC(次の命令のアドレスを示す)はわかりますし、SPとLRもおそらく似たようなものだと思うのですが、それが何なのかがわかりません。どうか助けていただけませんか?
を編集してください。 例を挙げて説明していただければ幸いです。
を編集してください。 LRが何のためにあるのかやっとわかった。SPが何のためにあるのかはまだわからない。
どのように解決するのですか?
LRは リンク登録 であり、関数呼び出しの戻りアドレスを保持するために使用されます。
SP はスタックポインタです。 スタックは一般に、関数呼び出しの間に「自動的な」変数とコンテキスト/パラメータを保持するために使用されます。 概念的には、スタックをデータを積み重ねる場所と考えることができます。 スタックポインターは、データのスタックの高さを示します。 スタックの最上部からデータを削除して、スタックを短くすることができます。
ARMアーキテクチャリファレンスより。
SP、スタックポインタ
レジスタR13はアクティブなスタックへのポインタとして使用されます。
Thumbコードでは、ほとんどの命令でSPにアクセスできません。唯一 SPにアクセスできる唯一の命令は、SPをスタックポインタとして使用するように設計されたものです。 スタックポインタとして使用するように設計された命令のみです。スタックポインタ以外の目的でSPを使用することは、非推奨です。 スタックポインタ以外の目的でのSPの使用は非推奨です。注 SPをスタックポインター以外の目的で使用することは スタックポインタ以外の用途でSPを使用すると、オペレーティングシステムやデバッガなどの要件が崩れる可能性があります。 オペレーティングシステム、デバッガ、その他のソフトウェアシステムの要件を破り、誤動作を引き起こす可能性があります。 誤動作を引き起こす可能性があります。
LR、リンク・レジスタ
レジスタR14は、サブルーチンからの戻りアドレスを格納するために使用されます。また 他の時には、LRは他の目的のために使用することができます。
BLまたはBLX命令でサブルーチンコールを行った場合、LRにサブルーチンのリターンアドレスが設定されます。 サブルーチンのリターンアドレスに設定されます。サブルーチン・リターンを行うには、LRをプログラム・カウンタにコピーします。 をプログラムカウンタに戻します。これは通常、次の2つの方法で行います。 BLまたはBLX命令でサブルーチンに入った後、2つの方法で行います。
- BX LR命令で戻る。
- サブルーチンエントリ時に、LRをスタックに格納する。 という形式の命令でスタックに格納します。PUSH {,LR}の形式でスタックに格納し 一致する命令で復帰する。POP {,PC} ...
関連
-
[解決済み] JavaScriptでStackとQueueを実装するには?
-
[解決済み] なぜJavaのVector(およびStack)クラスは時代遅れ、または非推奨とされているのですか?
-
[解決済み] どちらが速いですか?スタックアロケーションとヒープアロケーション
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】ベースポインタとスタックポインタとは一体何でしょうか?これらは何を指しているのでしょうか?
-
[解決済み] Gnuアセンブラ(GAS)のCFIディレクティブは何のためにあるのですか?
-
[解決済み] なぜx86は醜いのか?なぜ他と比較して劣っていると言われるのか?[クローズド]
-
[解決済み] gdbで指定されたアドレスのアセンブリ命令をブレークするには?
-
[解決済み] なぜインテルはプロセッサーに内蔵RISCコアを隠すのか?
-
[解決済み] ここでいう「@plt」とは、どういう意味でしょうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Gnuアセンブラ(GAS)のCFIディレクティブは何のためにあるのですか?
-
[解決済み] FS"/"GS "レジスタは何のためにあるのですか?
-
[解決済み] コールスタックはどのように機能するのか?
-
[解決済み] 最近のシステムでは、スタックの成長方向はどうなっているのでしょうか?
-
[解決済み] アセンブリコードで "int 0x80 "とはどういう意味ですか?
-
[解決済み] gdbで指定されたアドレスのアセンブリ命令をブレークするには?
-
[解決済み] 学習会【終了
-
[解決済み] x86_64 registers rax/eax/ax/al overwriting full register contents [duplicate] レジスタの内容をすべて上書きする。
-
[解決済み] アセンブリ言語ではスタックはどのように機能するのですか?
-
[解決済み] ここでいう「@plt」とは、どういう意味でしょうか?