1. ホーム
  2. assembly

[解決済み] ARMにおけるSP(スタック)とLRとは?

2023-05-19 23:26:57

質問

何度も定義を読んでいますが、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} ...

このリンクは、些細なサブルーチンの例を示しています。

レジスタが呼び出し前にスタックに保存され、その後ポップバックして内容を復元する例を示します。