王爽汇编 检测点17.1 在int 16h中断例程中,一定要设置IF=1的指令,对吗?
王爽汇编检测点17.1在int 16h中断例程中,一定要设置IF=1的指令。这种说法是对的吗?网上搜索了一下,发现回答这种说法是对的,或这种说法是不对的都有。大家对题目的含义分歧不大,基本上都认为,题意中设置IF=1是为了保证在读取键盘缓冲区的第一个字节内容时,键盘中断可以响应, 以便将相应按键加入键盘缓冲区中,但答案就不同了,说对的认为:
int 16h只是从键盘缓冲区中读取数据,但我们不能确保键盘缓冲区中会一直有数据,如果没有键盘缓冲区中没有数据,就会造成死锁。所以还是要设置IF=1使得能够响应int 9的中断。便于int 9向键盘缓冲区中写入数据,以便int 16h能个取得键盘缓冲区中的数据。
说不对的认为:
经查资料,说明键盘中断是可屏蔽的,据全国2011年1月自学计算机通信接口技术试题中一题讲:PC机可屏蔽硬件中断中,键盘中断的中断号是 09H。因此,如果不打开IF=1,则CPU没有机会处理INT9的按键信息,如此CPU就会进入死循环,反复检测键盘缓冲区是否有数据。因此应该先打开IF=1,让CPU可以响应INT9的按键信息。
综上所述,解题的关键,其实就在于int 9H是否是可屏蔽中断?我认为,根据王爽书上P236, 内中断包括除法错误、单步执行、into指令、int指令 n,所以int 9H应该是int n的一种,所以 int 9H是内中断。而内中断,都是不可屏蔽的。所以17.1的答案是不对的,即使IF=0,cpu也照样响应 int 9H中断,不知道大家意见如何? 键盘中断怎么成内中断了?
内中断是cpu内部产生的中断
外中断是cpu外部产生的中断
键盘又不在cpu内部,键盘中断是内中断?谁告诉你的?
谢谢。王爽书上讲对8086cpu,int n 是内中断,看来这个说法不严谨。初学者会以为这个n的取值是0-255都可以,所以int 9H也是内中断。实际上不是这样,至少中断向量号为02的是不可屏蔽中断,是外部中断,所以int n不都是内中断 ,int 2就不是内中断 。不仅是int 2,其他取值的 int n 也可能不是内中断。 键盘引起中断和程序中直接执行int 9指令是不一样的。
直接执行int n指令,当然属于内中断,而且不可屏蔽,因为你都执行int 9指令了,这条指令就是中断指令,还谈什么屏蔽不屏蔽呢?
可屏蔽和不可屏蔽是对于外中断来说的。有键盘输入,你可以响应中断也可以不响应。
页:
[1]