15.4例程中的部分代码:
........
push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2] 1:这里是将原来的int 9中断例程的入口地址保存在ds:0,ds:2单元中
mov word ptr es:[9*4],offset int 9
mov es:[9*4+2],cs 2:这里是在中断向量表中设置新的int 9中断例程的入口地址
........
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2] 3:这里是将中断向量表中int 9中断例程的入口恢复为原来的地址
........
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
call dword ptr ds:[0] 4:这里是对int指令进行模拟
----->这一句的作用是:push ds:[2],push ds:[0]
cmp al,1
........
以下是我的理解:1,2执行后,就执行4,4将原来的int 9中断例程的入口地址压进栈,那此时到底是
调用的原来的int 9中断例程,还是新写的int 9中断例程?有点迷惑求人给解。 |