私は非常に基本的な TSR コードを持っています。「D」キーを入力すると、画面に「E」が表示されます。それ以外は何も表示されません。
私がやりたいことは、「ESC」ボタンを押すと、TSR を削除して元の BIOS ルーチンに戻りたいということです。
org 100h
equ 060h
EOI equ 020h
Master_8259 equ 020h
main:
call _inst_09
_inst_09:
cli
xor ax, ax
mov es, ax
mov bx, [es:09h*4]
mov [stari_int09_off], bx
mov bx, [es:09h*4+2]
mov [stari_int09_seg], bx
mov dx, tastatura
mov [es:09h*4], dx
mov ax, cs
mov [es:09h*4+2], ax
sti
mov ax,3100h
mov dx,500
int 21h
ret
tastatura:
push ax
in al, KBD ; Ucitati scan_code iz I/O registra tastature
mov [kbdata], al
cmp byte[kbdata],20h
je .lup
mov al, EOI ; Kod za End Of Interrupt (EOI)
out Master_8259, al ; Poslati EOI na Master PIC (dozvola novih prekida)
pop ax
iret
.lup:
mov al,45h
mov ah,0eh
int 10h
mov al, EOI
out Master_8259, al
pop ax
iret
stari_int09_seg: dw 0
stari_int09_off: dw 0
kbdata: db 0
%include "ekran.asm"
変更した割り込みをアンインストールする必要があることはわかっていますが、アンインストールした後、プログラムが応答しなくなりました。
これは、unstaling 手順になります。
_uninst_09:
cli
xor ax, ax
mov es, ax
mov ax, [stari_int09_seg]
mov [es:09h*4+2], ax
mov dx, [stari_int09_off]
mov [es:09h*4], dx
sti
ret
トリックは、どこに置くべきかわからないということです。ESCが押されているかどうかを確認してから、この手順にジャンプしてみましたが、機能していないようです。