|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是让 安装一个新的int 9中断例程,功能是在dos模式下,按F1键后改变当前屏幕的显示颜色
小甲鱼的视频说,由于windows将8086给保护起来了,所以安装了也看不到结果
于是我修改了一下源程序,不再将其安装,类似于前面一个例子(按下ESC改变颜色), 将中断例程放在程序中
可是为什么运行完后,按下F1无反应.....
我的环境是虚拟机下的XP
代码是:
assume cs:code
stack segment
db 128 dup(0)
stack ends
data segment
dw 0,0
data ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,data
mov ds,ax
mov ax,0
mov es,ax
push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2] ;将原来的int 9中断例程的入口地址保存在ds:0、ds:2单元中
cli
mov word ptr es:[9*4],offset int9
mov word ptr es:[9*4+2],cs ;设置中断向量表
sti
mov ax,0
mov es,ax
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2] ;恢复原来中断向量表的int 9中断例程的地址
mov ax,4c00h
int 21h
;------新的int 9 中断例程------
int9:
push ax
push bx
push es
in al,60h
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
call dword ptr ds:[0]
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
code ends
end start
|
|