;安装一个新的int9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的
;“A”;其他的键照常处理。
;我觉得我的程序思路都是对的啊,始终找不出来 到底是哪里出了错。
;高手们帮我看看吧
assume cs:code,ss:stack
stack segment
db 128 dup (0)
stack ends
data segment
dw 0,0
data ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,128
mov ax,data
mov ds,ax
mov ax,0
mov es,ax
push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2]
cli
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti
mov ah,0
mov cx,120
l:int 60h ;进行120次读取BIOSS键盘缓冲区
loop l
cli
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]
sti
mov ax,4c00h
int 21h
;--------------------------------------------------------------
int9:push ax
push bx
push cx
push es
in al,60h
pushf
call dword ptr ds:[0]
cmp al,9eh
jne int9ret
mov ax,0b800h
mov es,ax
mov bx,0
mov cx,80*25
s:mov byte ptr es:[bx],'A'
mov byte ptr es:[bx+1],2
add bx,2
loop s
int9ret:pop es
pop cx
pop bx
pop ax
ret
;------------------------------------------------------------
code ends
end start |