ARM の SP、LR、PC の 3 つのレジスタの紹介

ここに画像の説明を挿入

スタックポインタ R13(SP)

MSP スタック ポインタ
PSP スタック ポインタ

リンクレジスタR14(LR)

1"。関数呼び出し

bl または blx を使用してサブルーチンにジャンプする場合、r14 はリターン アドレスを保存し、呼び出しプロシージャの最後に復元できます。BL または BLX を使用する場合、ジャンプ命令はリターン アドレスを r14 に自動的に配置します。サブルーチンは通常、MOV PC、LR BX LR
のいずれかの命令で r14 を PC にコピーして戻ります。

通常子程序这样写,保证了子程序中还可以调用子程序。
                     stmfd sp!, {lr}
                     ……
                     ldmfd sp!, {pc}

2"。中断

例外が発生すると、例外モード固有の物理 R14 が、例外モードが戻るアドレスに設定されます。

1. 割り込みが入る

レジスタ内の値は順番に保存され、ハードウェアによって自動的に完了します。
ここに画像の説明を挿入

2. 割り込みハンドラを呼び出す

3. 割り込み復帰

ここに画像の説明を挿入
LR=0xffff fff1 の場合は、LR の値を確認してください
? ? ?
LR の値を確認します。LR=0xffff fff9 の場合、
レジスタの値は割り込みに入る前に順番に保存されるため、割り込みに入る前に MSP スタックが使用されることを意味します。すべては MSP ポインタを通じて見つけることができます。 R0、R1、R2、R3、R12、LR、リターン アドレス、PSR は
LR の値をチェックします。LR=0xffff fffD の場合、
レジスタの値は次の値になるため、割り込みに入る前に PSP スタックが使用されることを意味します。割り込みに入る前に順番に保存されます。すべては PSP ポインタ R0、R1、R2、R3、R12、LR、リターン アドレス、PSR で見つけることができます

プログラムカウンタR15(PC)

おすすめ

転載: blog.csdn.net/m0_37187962/article/details/123345689