2013-07-20 6 views
5

私は例えば、同じ行に複数のレジスタをポップ/プッシュするための注釈を見てきました:アームアセンブリ - 複数のプッシュ/ポップオーダーとSP

push {fp, lr} 

私が最初に押された人を見つけることができませんでした - fpかlr?

さらに、SPはスタック内の最後の占有アドレスまたは最初の空きアドレスを指していますか?

ありがとうございます! ARMのARMから

答えて

2

レジスタは最上位のメモリアドレス(END_ADDRESSに最も高い番号のレジスタに至るまで、最も低いメモリ・アドレス(start_addressの)に、配列内の最も低い番号のレジスタに格納されています)

ARMでは、スタックポインタは通常スタックの最後の占有アドレスを指します。たとえば、最初のスタックポインタを設定するときは、通常、スタックの最後を過ぎたアドレスで初期化します。

PUSHは、STMDBの代わりに、spをベースレジスタとして使用しています。 DBは '減少前'アドレッシングモードを示します。

+0

スタックの終わりをはるかに控えているのはどうですか?最後の空のアドレスを指していませんか? – Niv

+0

「終わり」の意味に依存します。私は最高の住所を意味します。スタックは通常、高いアドレスから低いアドレスへと成長します。つまり、プッシュはスタックポインタをデクリメントしてからワードを格納します。 popが単語をロードした後、スタックポインタをインクリメントします。 –

+0

ああ、今私はそれを手に入れます。ありがとうございます:) – Niv

関連する問題