汇编语言编写DOS下的内存驻留程序(4)
2007-04-25 09:29:43 来源:WEB开发网核心提示:以下是程序代码:cseg segmentassume cs:cseg,ds:csegorg 100hstart: jmp InitializeOld_Keyboard_IO dd ? new_keyboard_io proc farassume cs:cseg,ds:csegsti ;Section 1cmp ah,0
以下是程序代码:
cseg segment
assume cs:cseg,ds:cseg
org 100h
start:
jmp Initialize
Old_Keyboard_IO dd ?
new_keyboard_io proc far
assume cs:cseg,ds:cseg
sti
;Section 1
cmp ah,0
je ki0
assume ds:nothing
jmp Old_Keyboard_IO
;Section 2
ki0:
pushf
assume ds:nothing
call Old_Keyboard_IO
cmp al,'y'
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[2],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",如果是的话就修改它.
可以借执行这个程序,来验证其是否正确.
更多精彩
赞助商链接