ゼロ除算例外を処理するプログラムを作成するタスクがあります。それについての情報を見つけるのに苦労しています。私が理解しているように、割り込みベクタ テーブルの 0 番目のエントリを変更する必要がありますが、どうすればよいですか? LIDT 命令があるようですが、テーブル全体を記述する必要はありませんか?
注意してください、私は16ビットモードで作業します。
ゼロ除算例外を処理するプログラムを作成するタスクがあります。それについての情報を見つけるのに苦労しています。私が理解しているように、割り込みベクタ テーブルの 0 番目のエントリを変更する必要がありますが、どうすればよいですか? LIDT 命令があるようですが、テーブル全体を記述する必要はありませんか?
注意してください、私は16ビットモードで作業します。
16ビットモードで「リアルモード」を意味すると仮定すると、割り込みベクトルテーブルは単純にリニアアドレス0から始まる場所に配置されます。ウィキペディアのエントリを参照してください。したがって、古い 4 バイトの far ポインターを取得して、[0000:0000]
後で復元 (またはチェーン) し、独自のハンドラーでエントリを上書きできるようにするだけです。
DOS を使用INT 21h/AH=25h
している場合は、割り込みベクトルを設定しINT 21h/AH=35h
、古いエントリを取得するために使用できます。