小弟初学汇编,在王爽老师的汇编语言一书中看到这么一句话:键盘的输入到达60h端口时,相关的芯片就会向CPU发出中断类型码为9的可屏蔽中断信息,CPU检测到该中断信息后,如果IF=1,则响应中断,引发中断过程,转去执行int 9中断例程。
然后我就在想,IF是不是除了正在执行中断例程,其它时间都是为1的?因为CPU如果没有在执行中断例程,如果检测到中断信息,它肯定是转去执行中断例程。。。所以IF是一直为1的。然后我写了一个程序,把IF设置为0,然后执行它,我在猜想执行它后键盘应该是被我屏蔽了,我按了键盘应该会没反应,因为我执行了把IF设为0的程序,既然IF被我设为0,那CPU就不会去响应检测到的可屏蔽中断信息,也是键盘的输入所引发的9号中断信息,可是我这样想是错的,事实并非如此,为什么呢?我哪里想错了呢?求前辈指点。。。。。。小弟感激不尽啊!
------解决方案--------------------------------------------------------
把源码贴上来看看。
------解决方案--------------------------------------------------------
如果在 cli 后通过 int16h 这样的读键盘的话,是能被读入的;这是因为 int16h 的开始处就 sti 了,所以可以响应键盘中断,读入按键;这么处理也是唯恐用户程序里无意识的 cli 会导致程序的意外失去响应吧。
------解决方案--------------------------------------------------------
是不是实模式下才能相应键盘中断呢。
------解决方案--------------------------------------------------------