3

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

ランダムなサンプル コードをオンラインで見つけましたが、元の割り込みのアドレスを取得する方法についての説明がありません。それらは単に変数をその場所に持ち、それ自体をメモリに入れる方法を持っています。

私の質問は、リアル モードの割り込みテーブルをどのように把握したり、画面に出力したりできるかということです。

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

ありがとう!

4

2 に答える 2

4

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

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

于 2009-10-23T19:59:31.243 に答える
2

プログラムが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
于 2009-10-25T21:25:31.410 に答える