低レベルのデバイスドライバーについて勉強しています。割り込みと IRQ の間で混乱しています。キーボードをフックするサンプル ドライバ コードは、キーボード割り込みが 0x31 であることを示唆していますが、マイクロプロセッサに関する私の本では 0x09 と書かれています。「デバイス マネージャー -> キーボード -> リソース」を開くと、IRQ が 1 であることが示されます。
ありがとう、サンジーブ
低レベルのデバイスドライバーについて勉強しています。割り込みと IRQ の間で混乱しています。キーボードをフックするサンプル ドライバ コードは、キーボード割り込みが 0x31 であることを示唆していますが、マイクロプロセッサに関する私の本では 0x09 と書かれています。「デバイス マネージャー -> キーボード -> リソース」を開くと、IRQ が 1 であることが示されます。
ありがとう、サンジーブ
こんな感じです。あなたのコンピュータには、(A)PIC と呼ばれるユニットがあります。このユニットは、PS2 キーボードなどの周辺機器から入力を受け取り、CPU に割り込みを発生させます。最新のシステムには 2 つの APIC があります。1 つはプライマリと呼ばれ、もう 1 つはスレーブと呼ばれ、それぞれ 8 つの IRQ ラインを保持します。キーボードのキーを押すと、APIC はライン 1 (IRQ 1) で信号を受け取り、CPU で割り込みが発生します。
APIC はプログラムすることができるので、ライン 1 でシグナルを受信しても、CPU で割り込み 9 を発生させません (奇妙なことに、プログラムしない場合、これは実際にはデフォルトです)。内部の一部の CPU と競合するためです。割り込みなので、通常は別の場所に行くようにプログラムします。あなたの場合、それは正しいように聞こえる割り込み 0x31 に変換されているようです (IRQ + 0x30 が追加されます)。
プロセッサのDouble Fault例外割り込みと競合するため、割り込み9にマップされているとは強く信じていません.本はおそらくデフォルト設定について言及しているだけです.
簡単な答えは、IRQ (Interrupt ReQuest) は、システムによって割り込みにマップされるハードウェア入力であるということです。キーボードの場合、IRQ1 は割り込み 9 にマップされます。
幸いなことに、このコンテキストでの割り込み 31h は明らかにエラーまたはタイプミスです。