疑惑:
网上有的说答案是“错误”的,是基于int 9h是CPU内部中断,是不可屏蔽中断,所以不受IF影响。而在int 16h过程中,IF是为0的(见备注,进入INT 16h之前IF已经设置为0)。
但是,经查资料,说明键盘中断是可屏蔽的,
而且根据目前本书的知识面,在15.2节(Page273),可以断定int 9h确实是可屏蔽中断
先做如下分析:
先看int 16的0号的工作过程:
(此时IF=0,TF=0,见备注)
请看第(2)步,如果没有则进入第1步,此时如果不打开IF=1,则CPU没有机会处理INT9的按键信息,如此CPU就会在(1)(2)步之间进入死循环,因此第(2)步应该先打开IF=1,然后再进入第(1)步。
如果缓冲区有数据,直接进入步骤(3),继续往下执行,就不需要打开IF=1
备注:
外中断源处理过程:
可屏蔽中断
(1) 取中断码N
(2) 标志寄存器入栈:IF=0,TF=0
(3) CS、IP入栈
(4) (IP)=(N*4),(CS)=(N*4+2)
不可屏蔽外中断(几乎所有由外设引发的中断,都是可屏蔽中断):
(1) 标志寄存器入栈:IF=0,TF=0
(2) CS、IP入栈
(3) (IP)=(N*4),(CS)=(N*4+2) ; (对于8086CPU,N固定为2)