6.9. 未定義命令ハンドラ

プロセッサに認識されない命令は、システムに接続されているコプロセッサに渡されます。その命令がどのコプロセッサにも認識されない場合には、未定義命令例外が生成されます。例えば、命令がコプロセッサ用の命令であるにもかかわらず、コプロセッサに関連する浮動小数点アクセラレータ(FPA)などのコプロセッサがシステムに接続されていないケースが考えられます。ただし、そのようなコプロセッサ用のソフトウェアエミュレータを使用することも可能です。

このようなエミュレータは、以下のような処理を行う必要があります。

  1. 未定義命令ベクタに接続し、古い内容を保存する必要があります。

  2. 未定義命令を検査し、エミュレートする必要があるかどうかをチェックします。このチェックは、SVC ハンドラが SVC 番号を抽出する方法と似ていますが、エミュレータでは下位 24 ビットを抽出するのではなく、ビット 27 〜 24 を抽出する必要があります。

    これらのビットに基づき、以下の方法でその命令がコプロセッサ命令であるかどうかが判断されます。

    • ビット 27 〜 24 が b1110 または b110x の場合、その命令はコプロセッサ命令です。

    • ビット 8 〜 11 が、コプロセッサエミュレータによってその命令を処理する必要があることを示している場合、エミュレータはその命令を処理してユーザプログラムに復帰する必要があります。

  3. 上記以外の場合、エミュレータはインストール時に保存されたベクタを使用して、その例外を元のハンドラ(またはチェイン内の次のエミュレータ)に渡す必要があります。

チェイン内のどのエミュレータもその命令を処理できない場合には、その命令の処理を続けることができないため、未定義命令ハンドラがエラーを通知して終了する必要があります。詳細については、例外ハンドラのチェインを参照して下さい。

Note

Thumb 命令セットにはコプロセッサ命令がないため、未定義命令ハンドラでそのような命令をエミュレートする必要はありません。

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