cpj0036 发表于 2020-3-31 23:12:52

王爽汇编语言第三版检测点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打破了这一”规定“)

sbx 发表于 2020-9-7 22:13:26

我来看看!

xieglt 发表于 2020-9-8 10:32:48

不是哪个中断把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

sbx 发表于 2020-9-8 20:13:18

我学习了!
页: [1]
查看完整版本: 王爽汇编语言第三版检测点15.1问题