安装一个新的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’这样的功能添加上
去,完善起程序。