实验15
1. 安装新的 int 9 中断例程
安装一个新的 int9 中断例程,功能:在 DOS 下,按下"A"键后,除非不再松开, 如果松开,就显示满屏幕的"A";其他的键照常处理。
提示:按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。 断码=通码+80H。
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax ; 安装自定义的 int9 中断例程
mov ax,0
mov es,ax
mov si,offset int9
mov di,204h
mov cx,offset int9end-offset int9
cld
rep movsb
push es:[9*4]
pop es:[200h]
push es:[9*4+2]
pop es:[202h] ; 保存原中断向量
cli
mov word ptr es:[9*4],204h
mov word ptr es:[9*4+2],0 ; 设置自定义的中断向量
sti
mov ax,4c00h
int 21h
int9:
push ax
push cx
push es
push di
in al,60h ; 读入扫描码
pushf
call dword ptr cs:[200h] ; 调用原 int 9 终端
cmp al,1EH+80H ; 是否为 A 的断码
jne int9ret
mov ax,0b800h
mov es,ax
mov di,0
mov cx,80*20
s: mov byte ptr es:[di],'A' ; 显示满屏 A
add di,2
loop s
int9ret:pop di
pop es
pop cx
pop ax
iret
int9end:nop
code ends
end start