实验15

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
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