2011-10-18 16 views
0

私は除算例外を処理するプログラムを作成するタスクを持っています。私はそれについての情報を見つけるのに苦労している。私が理解しているように、私は割り込みベクトルテーブルの0番目のエントリを変更する必要がありますが、私はそれをどのようにしますか?私はLIDT命令があることを知っていますが、テーブル全体を書く必要はありませんか?割り込みを処理する方法は?

16ビットモードで作業しています。

+2

ゼロで除算するのは障害であり、割り込みではありません。 –

+1

CPUがプロテクトモード( "16ビット"も可能)で動作しているときはLIDTが必要です。あなたは例外を処理したいモードは何ですか?保護された、実際の、または仮想の8086? –

答えて

3

16ビットモードで「リアルモード」を意味すると仮定すると、割り込みベクタテーブルはリニアアドレス0から始まります。wikipediaのエントリを参照してください。したがって、古い4バイトfarポインタを[0000:0000]から取得して、後で(または連鎖して)復元して、自分のハンドラでエントリを上書きすることができます。

DOSを使用している場合は、INT 21h/AH=25hを使用して割り込みベクタを設定し、INT 21h/AH=35hを使用して古いエントリを取得できます。

関連する問題