检测点 17.1
“在 int 16h 中断例程中,一定有设置 IF=1 的指令。”这种说法对吗?
答:正确。int 16h 中断例程的功能是读取键盘缓冲区的信息。当执行该中断例程时,如果键盘缓冲区为空,则该中断例程会处于循环执行状态(即循环检测键盘缓冲区是否存在可读取信息)以等待键盘缓冲区被写入信息;由于引发 int 16h 中断过程中,硬件已经自动执行了 IF=0,因此如果 int 16h 中断例程中没有设置 IF=1 的指令,那么一旦键盘缓冲区在执行 int 16h 中断例程之前的状态为空,使得 int 16h 中断例程处于等待键盘输入的状态,IF=0 会导致 CPU 无法响应 int 9 中断以执行键盘缓冲区写入操作。于是 int 16h 中断例程会成为死循环(即循环等待键盘输入的键盘死锁状态 —— 键盘无论输入什么,其引发的 int 9 中断都会由于 IF=0 而使得 CPU 无法予以响应)。