![](https://images2015.cnblogs.com/blog/672107/201512/672107-20151230190037214-1096963217.png)
安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不在松开, 如果松开,就显示满屏幕的“A”;其他的键照常处理。
提示:按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。
断码 = 通码 + 80h。
可以用在屏幕中间显示一个字符来替代满屏‘A’这样的功能,如果实现了
一个字符的显示,说明程序(除了满屏‘A’部分)其他地方基本上正确
(不一定完全正确,原因很多),这样在把满屏显示‘A’这样的功能添加上
去,完善起程序。
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset int9;ds:si指向源地址
mov ax,0
mov es,ax
mov di,204h;es:di指向目的地址
mov cx,offset int9end - offset int9
cld
rep movsb
mov ax,es:[9*4]
mov es:[200h],ax
mov ax,es:[9*4+2]
mov es:[202h],ax
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 es
in al,60h
pushf
call dword ptr cs:[200h]
cmp al,9EH;9EH是'A'的断码
jne int9ret
mov ax,0b800h
mov es,ax
mov cx,2000
mov di,0
int9_s: mov byte ptr es:[di],'A'
mov byte ptr es:[di+1],0CH;高亮红
add di,2
loop int9_s
int9ret:pop es
pop ax
iret
int9end:nop
code ends
end start
--------------------------------------------------------------------
总结:首先搭建框架:
int9中断例程安装
保存原来的int 9中断例程
设置中断向量表
int9
int9end:nop
心得:为了便于程序的调试,写程序时可以先把功能简化,就上述程序来说
可以用在屏幕中间显示一个字符来替代满屏‘A’这样的功能,如果实现了
一个字符的显示,说明程序(除了满屏‘A’部分)其他地方基本上正确
(不一定完全正确,原因很多),这样在把满屏显示‘A’这样的功能添加上
去,完善起程序。