リアル モードでは、256 の異なる SOFTWARE TRIGGERED 割り込みがあります。BIOS と DOS の初期の頃は、「ジャンプ アドレス」テーブル以上のものとして使用されていませんでした。たとえば、DOS は主に INT 21 を使用していたため、実際のアドレスは DOS の新しいバージョンごとに変更されINT 21
ますCALL 1234:5678
が、INT 21 はそのままでした。dos が起動すると、実際のハンドラ関数のアドレスが割り込みテーブルのスロットに配置されます。
INT XX
プロセッサ命令は、0 から 255 までの割り込み番号を使用できるため、それらすべてが使用可能です。対応する割り込みテーブル スロットに何か有用なものがあるかどうかは別問題でした。ただし、特定の割り込みを使用する多くの常駐プログラムがありました (これらのプログラムを複数ロードすると衝突が発生しました)。
これとは別に、ハードウェア割り込みがあります。これらはソフトウェアではなく、キーボード、フロッピー、ハードディスクなどの外部デバイスによって、プロセッサに「サービスが必要です」と伝えたいときにトリガーされます。たとえば、キーボードのキーを押すと、キーボード コントローラーは割り込み 9 をトリガーします (番号については不明です。かなり前のことですが、割り込み 8 ~ 15 はハードウェア用に予約されています)。起動時に、BIOS はそのキーボード処理手順のアドレスを割り込みテーブルの対応するエントリに入れます。キーを押すたびに、キーボードコントローラーは割り込み9をトリガーし、プロセッサーに割り込みテーブル内の対応するアドレスを検索させ、それを呼び出します-これにより、制御がBIOSに転送されます-BIOSは、実際のキーを取得するために必要なことは何でも行いましたキーボード、
最初の質問に答えると、256 の割り込みがあります。0 ~ 7 は、プロセッサ内部のものに使用されました。07-0F はハードウェアによってトリガーされました。10-1F は Bios 用に予約され、DOS は 20-27 を使用しました。残りは未使用でした。つまり、有効なプロシージャ エントリ ポイントが割り込みテーブルに格納されていませんでした。(これは後で非常に曖昧になりました。ここでは単純化しすぎています)。
2 番目の質問: プロテクト モードに入ると、プロセッサをプロテクト モードにする OS によって割り込みテーブルが置き換えられます。プロテクト モードを持たない 8086 用に BIOS ルーチンが書かれているためです。リアルモードではなく、マルチタスクをうまく処理できません。まともなOSは、この種のことを自分で行う必要があります。また、DOS で使用されていた 20 ~ 27 からの割り込みは、他の OS ではそれらに代わるものはありません。そのため、Linux で dos 実行可能ファイルを実行することはできません。実行できないことは別として、dos 割り込みを使用すると動作しません。
3 番目の質問: BIOS 割り込み自体は純粋にソフトウェアですが、ハードウェア イベントをトリガーします。割り込み 13 は、フロッピー/ハードディスク用でした。フロッピーからセクタを直接読み込もうとするプログラムは、プロセッサのレジスタにいくつかの定義済みの値を入力し、割り込み 13 を呼び出します (したがって、BIOS の起動時にアドレスが割り込みテーブルに入れられた BIOS ルーチンにジャンプします)。 BIOSはその仕事をします。ハードウェアはまだありません。もちろん、割り込みハンドラ内で、BIOS はフロッピー コントローラのハードウェア ポートを読み書きしますが、アプリケーションは詳細を知る必要はありませんでした。