2012-09-17 6 views
7

アセンブリ言語では、ハードウェア割り込みではないDOS割り込みINT 21hがあります。アセンブリでカスタム割込みを作成することはできますか?

私自身の割り込みを記述して呼び出すことが可能かどうか疑問に思っていました。

可能であれば、リンクや方法を提案してください。

+0

関連:http://stackoverflow.com/questions/3392831/what-happens-in-an-interrupt-serviceここ

は割り込み22Hのためのハンドラを設定する方法の例を行きます - ルーティン –

答えて

16

はい、独自の相互作成ハンドラを作成して、いつでも呼び出すことができます。 割り込みハンドラを指すように割り込みベクタ(アドレス0000:0000から始まる)を設定する必要があります。

各ハンドラへのポインタは4バイト(オフセットとセグメント)を消費します。たとえば、INT 22hの割り込みハンドラを設定する場合は、ハンドラをポイントする位置0000:0088hのベクトルを更新します。

Ralph Brown's interrupt listにチェックを入れて、未使用の割り込み番号(ハードウェアの入力によって使用されていないもの)を確認してください。

INITIALIZE: 
     XOR AX,AX 
     MOV ES,AX 
     CLI ; Disable interrupts, might not be needed if seting up a software-only interrupt 
     MOV WORD PTR ES:[136], OFFSET INT22 ; setups offset of handler 22h 
     MOV WORD PTR ES:[138], CS   ; Here I'm assuming segment of handler is current CS 
     STI ; Reenable interrupts 
     ; End of setup 


INT22 PROC FAR 
     ; Here goes the body of your handler 
     IRET 
INT22 ENDP 
+0

私はそれを得るが、INT 21Hのファイル書き込み機能のようなものは、それを可能な限りプログラミングしている。また、割り込みの設定例を挙げることができます。大いに助けになるだろう。 –

+0

@TotalAnimeImmersion:はい、あなたは割り込みハンドラで何でもできます。ハンドラの設定例を追加しました。 – gusbro

+0

ありがとうございました。本当に助けになった。 –

関連する問題