源程序
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
call init_reg ;初始化寄存器
call cpy_int9 ;开始复制中断例程到 0000:0204
call set_int9 ;安装中断例程
mov ax,4c00h
int 21h
init_reg:
mov ax,cs
mov ds,ax
mov si,offset int9 ;cld, rep movsb,es*16+di = ds*16+si
mov ax,0
mov es,ax
mov di,204h
mov cx,offset int9_end - offset int9 ;要复制的中断例程的长度
ret
int9: ;int 9 控制键盘外设
push ax
push bx
push cx
push es
in al,60h ;键盘的输入处理过程,扫描码,送入60h端口,引发9号中断,CPU执行中断例程,处理键盘输入
pushf
call dword ptr cs:[200h]
cmp al,9Eh ;断码 = 扫描码 + 80H
jne int9_ret ;如果不等,跳出
mov ax,0B800H ;如果松开键盘,执行满屏的A
mov es,ax
mov cx,2000
mov bx,0
mov al,'A'
full_screen:
mov byte ptr es:[bx],al ;'A' 的ASCII码 = 41H
add