5.10 データアボートハンドラ

システムに MMU が存在しない場合は、データアボートハンドラでエラーを通知して終了する必要があります。MMU が存在する場合は、データアボートハンドラによって仮想メモリのメモリ障害を解決する必要があります。

lr_ABT はデータアボートを発生させた命令よりも 2 つ先の命令を指すため、データアボートを発生させた命令の位置は lr_ABT-8 となります。

このアボートを発生する可能性のある命令には以下のような種類があります。

単一レジスタロード / ストア命令

応答はプロセッサタイプによって異なります。

  • ARM7TDMI を含む ARM7™ でアボートが発生した場合は、命令で指定されたベースレジスタが更新され、変更は取り消されます。

  • アボートが ARM9™ 以降のプロセッサで発生した場合、プロセッサは命令開始前に保持されていた値をそのアドレスに復元します。この変更を元に戻すコードは必要ありません。

スワップ命令(SWP)

この命令に関連してアドレスレジスタが更新されることはありません。

多重ロード / ストア命令

応答はプロセッサタイプによって異なります。

  • アボートが ARM 7 ベースのプロセッサで発生し、ライトバックが有効にされている場合には、転送全体が発生したかのようにベースレジスタが更新されます。

    レジスタリスト内にベースレジスタを指定して LDM を使用した場合、プロセッサは後で回復できるように、上書きされた値を修正されたベース値で置き換えます。元のベースアドレスは、使用されるレジスタの数を使用して再計算されます。

  • アボートが ARM9 以降のプロセッサで発生し、ライトバックが有効にされている場合には、命令開始前に保持されていた値をベースレジスタに復元します。

上記 3 つのどのケースでも、MMU は要求された仮想メモリを物理メモリにロードできます。MMU のフォールトアドレスレジスタ(FAR)には、アボートを発生させたアドレスが保持されます。これにより、ハンドラは復帰して命令を再実行することができます。

非機密扱いPDF file icon PDF 版ARM DUI0471JJ
Copyright © 2010-2013 ARM.All rights reserved.