王爽汇编语言第三版检测点15.1问题
15.1有(1)和(2), (1):说了在进入中断例程后IF 和TF都已经被置0,没有必要再进行设计了我的问题: 到底是哪个中断把IF 和TF置0 的,因为在执行我们模拟的int9之前,并没有发现进入任何中断,(参考p280的程序)为什么没有必要再设置了
我的问题2:再完成15.1(2)我用了
cli
mov word ptr es:,offset int9
mov word ptr es:,cs
sti
之后
从sti可以看到IF被置于1了,还可以按照(1)中的简化写法吗?我在csdn上搜了答案,上面还是用了省去设置IF 和TF,如(1),
这样还能真正模拟中断吗,(因为模拟中断一定要IF=0,TF=0,我们前面的sti打破了这一”规定“)
我来看看! 不是哪个中断把IF 和TF置0 的,是CLI 指令禁止了中断,然后 STI 指令允许中断。
我们在改写中断向量表设置自己的中断程序的时候必须先禁止中断,以防止改写
到一半时突然发生中断,导致严重错误。改写完了后,必须恢复中断,如果不恢复,
中断程序就不会执行了。
当然,我们可以自己设置标志位来实现 CLI 和 STI 功能
CLI 如下:
pushf
pop ax
and ax,0FDFFH
push ax
popf
STI 如下:
pushf
pop ax
or ax,0200h
push ax
popf
我学习了!
页:
[1]