その前に、もう一度おさらいをする。ハードウェア割り込みの場合は割り込みが発生すると割り込みコントローラーから割り込み番号を受け取る。プログラマーが「INT」命令などで、行うトラップは、「INT 21h」などのように、割り込み番号はプログラムとして書かれている。除算エラーなどのアボートやフォルトの場合はROMに書かれている割り込み番号を受け取る。
そしてその割り込み番号から実際の処理に移行するには「割り込みベクター」と呼ばれるメモリーを参照してそこにジャンプする。80186以下のCPUや80286以上のリアルモードでは、 00000h〜00400hに割り込みベクターがセットされている。CPUの決まりであり、OSの決まりではない。したがってMS-DOS、N88-BASIC、その他のOS(Windowsなんかはプロテクトモードなので、違う)でも同じ領域にセットされる。
左図のように、割り込み番号0の処理は、アドレス00000hにそのオフセットアドレスが、00002hにセグメントアドレスが入っている。割り込み番号0の処理は、アドレス00004hにそのオフセットアドレスが、00006hにセグメントアドレスが入っている。これが256個分、格納されている。したがって例えば割り込み番号0が発生すると、CSに[00002h]が
IPに[00000h]の内容が格納され、そのアドレスにジャンプする。
次に、割り込み番号0が発生した際の処理の流れを、詳しく説明する。
|