|
发表于 2012-8-10 10:27:21
|
显示全部楼层
- assume cs:code,ss:stack
- stack segment
- db 128 dup (0) ;定义128个字节空间,用于中转数据
- stack ends
- code segment
- start:
- mov ax,stack
- mov ss,ax
- mov sp,128
- ;安装中断例程到0:204
- push cs
- pop ds ;设置ds为代码段
- mov ax,0
- mov es,ax ;设置附加段
- mov si,offset newInt9 ;设置ds:si指向源地址
- mov di,204h ;设置es:di指向目的地址0:204h
- mov cx,offset int9end - offset newInt9 ;设置cx为传输长度
- cld ;设置传输方向为正
- rep movsb ;安装自定义的int9中断例程
- ;保存旧的int9中断向量到0:200h-203h
- push es:[9*4]
- pop es:[200h]
- push es:[9*4+2]
- pop es:[202h]
- ;设置新的int9中断向量为0:204h
- cli ;置IF=0,CPU禁止响应外部中断
- mov word ptr es:[9*4],204h ;(0:9*4)=204h
- mov word ptr es:[9*4+2],0 ;(0:9*4+2)=0
- sti
- mov ax,4c00h
- int 21h
-
- newInt9:
- push ax
- push bx
- push cx
- push es
- in al,60h
- call dword ptr cs:[200h]
-
- cmp al,3bh
- jne int9ret
-
- mov ax,0b800h
- mov es,ax
- mov bx,1
- mov cx,2000
- s2:
- inc byte ptr es:[bx]
- add bx,2
- loop s2
- int9ret:
- pop es
- pop cx
- pop bx
- pop ax
- iret
- int9End:nop
- code ends
- end start
复制代码 在运行中输入command,确定后进行编译,然后运行,
按f1即可不断的换颜色
我用的版本是masm615 |
|