nbsp; jne ki1
mov al,''y''
jmp kidone
ki1:
cmp al,''Y''
jne kidone
mov al,''y''
kidone:
iret
new_keyboard_io endp
;Section 3
Initialize:
assume cs:cseg,ds:cseg
mov bx,cs
mov ds,bx
mov al,16h
mov ah,35h
int 21h
mov word ptr Old_Keyboard_IO,bx
mov word ptr Old_Keyboard_IO,es
;End Section 3
mov dx,offset new_keyboard_io
mov al,16h
mov ah,25h
int 21h
mov dx,offset Initialize
int 27h
cseg ends
end start
在面的程序第一部分主要是检查AH是否等于0(读取字符).如果AH不等于0,就用旧的中断处理程序来处理其它的功能:1H(读取键盘状态),2H(读取键盘标志).在这里,使用JMP指令,而非使用CALL来模拟软件中断;因此原先的中断处理程序结束后,就直接返回到中断前的状态.
程序的第二部分是处理AH=0H时的情形.首先程序中断模拟一个软件中断来调用旧的键盘处理程序,是为了在读完字符之后,控制权能交还到我们的驻留程序,接下来的几行程序是检查读到的字符是不是"Y"和"y",如果是的话就修改它.可以借执行这个程序,来验证其是否正确.