奥普瓯江 发表于 2019-3-29 16:03:32

实验 15 安装新的int 9 中断例程

安装一个新的int 9 中断例程, 功能:在DOS下,按“A”键后,除非不在松开如果松开,就显示满屏幕的“A”;其他的键照常处理。
提示, 按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码 + 80h。

assume cs:code, ss:stack

stack segment
                db 128 dup (0)
stack ends


code segment
start:                                        ;把int 9h里的地址传到0000:0200-0000:0204中,这样可以不占用
                mov ax, stack
                mov ss, ax
                mov sp, 128
               
                mov ax, cs
                mov ds, ax
                mov si, offset int_9
               
                mov ax, 0
                mov es, ax
                mov di, 204h
               
                mov cx, offset int_end - offset int_9
               
                cld
                rep movsb
               
                push word ptr es:[ 9 * 4]
                pop word ptr ds:
               
                push word ptr es:
                popword ptr ds:
               
               
                ;安装到中断限量表中
               
                cli
                mov word ptr es:, 204h
                mov word ptr es:, 0h
                sti

               
                mov ax, 4c00h
                int 21h
               
int_9:
                push ax
                push bx
                push cx
                push es
               
                mov bx, 0                        ;因为怕bx中有数据所以先归零
               
                pushf
                call dword ptr cs:
               
                in al, 60h
               
                ;判断是否是a键的断码如果不是那就跳转如果是就向下执行
                cmp al, 1eh + 80h
                jne loop_2
               
                mov ax, 0b800h
                mov es, ax
               
                mov cx, 2000
loop_1:
                mov byte ptr es:, 'a'
                add bx, 2
                loop loop_1
               
loop_2:
               
                pop es
                pop cx
                pop bx
                pop ax
                iret
int_end:
                nop
               
               
code ends
end start

jiangbaiyu 发表于 2020-3-10 19:27:20

复制代码运行不了
页: [1]
查看完整版本: 实验 15 安装新的int 9 中断例程