|
83:Re: 割り込み処理 hideyosi 10/16 16:15 うーーーん・・・ AL = 割り込み番号 + 0x60; OUT(0x20, AL); これはどういうことだろう。こういうことなのかな??? ----------------------------------------- [BITS 16] [OPTIMIZE 1] [OPTION 1] [INSTRSET "8086"] [FORMAT "BIN"] ORG 0x100 ;----------------------------------------------------- ;--- こっから上は、MS-DOSの.COMを作る時の ------------ ;----おまじないだと思ってくれい! ------------ ;----------------------------------------------------- ;-------- 実験部分 ---------------------- ;BIOSのキー入力を乗っ取る MOV AX,0 MOV ES,AX ; ESを0にする。 MOV WORD[ES:0x09*4+0],IINT09 MOV WORD[ES:0x09*4+2],CS MOV AX,DS MOV ES,AX ; ESをもとにもどす。 JMP MAINLLP ;メインループへジャンプ ;メインのループ部分 MAINLLP: JMP MAINLLP ;乗っ取ったキーボード割り込み部分 IINT09: ;押されたキーは何かを調べる ;IN命令で、押されたキーの値を取得 MOV DX,0x60 IN AL,DX ;持ってきた値の7ビットだけを抽出 AND AL,0x7F ;二進数 01111111 でANDSする ;もしその値が1Eだったら、Aボタンが押されている CMP AL,0x1E ;上のCPM命令によってキャリーフラブが変化している。 ;同じならZFが1,CFが0になっている ;もしそうなら、文字表示ルーチンをコールする JE MOJIPRINT ;そうでなかったら、割り込みから戻る JMP INTEND ;文字を表示するルーチン MOJIPRINT: MOV AL,0x41 MOV AH,0x0e INT 0x10 JMP INTEND ;割り込み後は、この処理をしないと戻れない INTEND: MOV AL,0x09 ADD AL,0x60 MOV DX,0x20 OUT DX,AL IRET ;----------------------------------------------------- ;---- これがないと、暴走しちゃうぞ! ------------- ;----------------------------------------------------- ;MS-DOS終了 INT 0x20 ----------------------------------------- ・・・ところが、これだとうまくいかないんだよねぇ。なんでだろう???? |