安装一个int9中断例程,按F1改变当前屏幕显示颜色
assume cs: code
stack segment
db 128 dup (0)
stack ends
code segment
start:
mov ax, stack
mov ss, ax
mov sp, 128
push cs
pop ds
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
call delay
mov ax, 4c00h
int 21h
delay:
push ax
push dx
mov dx, 10h
mov ax, 0
sd:
sub ax, 1
sbb dx, 0
cmp ax, 0
jne sd
cmp dx, 0
jne sd
pop dx
pop ax
ret
int9:
push ax
push bx
push cx
push es
in al, 60h
pushf
call dword ptr cs:[200h]
cmp al, 3bh
jne int9ret
mov ax, 0b800h
mov es, ax
mov bx, 1
mov cx, 2000
s:
inc byte ptr es:[bx]
add bx, 2
loop s
int9ret:
pop es
pop cx
pop bx
pop ax
iret
int9end:
nop
code ends
end start