質問

キーボード割り込みを引き継ぐために割り込みテーブルを変更しようとしています。私の最終目標は、新しい割り込みルーチンを作成し、RAMに自分自身をコピーして、リアルモード割り込みテーブルが私を指すようにすることです。

オンラインでランダムにサンプルコードを見つけましたが、元の割り込みのアドレスを取得する方法に関する説明がありません。代わりに変数があり、それをメモリに格納する方法があります。

だから私の質問は、どのようにリアルモード割り込みテーブルを把握するか、画面に印刷するのですか?

および/または誰かがこれをして特定のキーを無効にするか、特定のキーでビープ音を鳴らす良いコード例を持っているなら、本当に感謝しています。

ありがとう!

役に立ちましたか?

解決

16ビットリアルモードでは、割り込みテーブルはアドレス4から始まり、256個の4バイトエントリがあります。 256個の割り込みベクターのそれぞれは、そのテーブルの4バイトアドレス(セグメント+オフセット)を取得します。

http://en.wikipedia.org/wiki/Interrupt_descriptor_table に詳細があります。

他のヒント

プログラムがDOSで実行されている場合、DOS提供のAPIを使用できます(おそらくそうすべきです):

  MOV  AH,35H    ; function 35H is Get Vector
  MOV  Al,9      ; slot in IDT for keyboard interrupt
  INT  21H       ; call DOS, contents of old vector in ES:BX (save them somewhere)
   .
   .
  MOV  AH,25H    ; function 25H is Set Vector
  MOV  AL,9
  PUSH CS        ; the new vector is passed in DS:DX, so copy CS to DS
  POP  DS        :  (assuming your new handler is in the same seg as other code)
  MOV  DX,NewHandler
  INT 21H
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top