16ビットリアルモードでの割り込みの変更
質問
キーボード割り込みを引き継ぐために割り込みテーブルを変更しようとしています。私の最終目標は、新しい割り込みルーチンを作成し、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
所属していません StackOverflow