6.3.2. 例外ハンドラからの復帰

例外からの復帰方法は、例外ハンドラがスタック処理を行うかどうかによって異なります。いずれの場合も、実行を例外発生時の場所に戻すには、例外ハンドラが以下の処理を行う必要があります。

復帰先のモードのレジスタをスタックから復元する必要のない単純な復帰では、例外ハンドラは以下を使用するデータ処理命令を実行することによって、これらの処理を行います。

必要な復帰命令は、例外タイプによって異なります。各例外タイプからの復帰方法については、復帰アドレスと復帰命令を参照して下さい。

Note

リセットハンドラはメインコードを直接実行するため、リセットハンドラから復帰する必要はありません。

例外ハンドラのエントリコードが、スタックを使用して例外処理中も保存しておかなければならないレジスタを格納した場合には、^ 修飾子を付けた多重ロード命令を使用して復帰できます。例えば、以下の命令を使用して復帰できます。

    LDMFD sp!,{r0-r12,pc}^

上記の命令で復帰できるのは、以下のレジスタがスタックに保存された場合です。

^ 修飾子を指定することで、CPSRSPSR から復元されます。この修飾子は、特権モードから使用する必要があります。スタック処理の詳細については、RealView Compilation Tools v3.0 Assembler Guideに記載されている、LDM および STM を使用したスタックの実装に関する説明を参照して下さい。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential