鱼C论坛

 找回密码
 立即注册
查看: 5081|回复: 3

[技术交流] 王爽汇编 检测点17.1 在int 16h中断例程中,一定要设置IF=1的指令,对吗?

[复制链接]
发表于 2018-9-6 22:20:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
王爽汇编  检测点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中断,不知道大家意见如何?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-7 00:13:20 | 显示全部楼层
键盘中断怎么成内中断了?
内中断是cpu内部产生的中断
外中断是cpu外部产生的中断
键盘又不在cpu内部,键盘中断是内中断?谁告诉你的?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-8 22:28:02 | 显示全部楼层
谢谢。王爽书上讲对8086cpu,int n 是内中断,看来这个说法不严谨。初学者会以为这个n的取值是0-255都可以,所以int 9H也是内中断。实际上不是这样,至少中断向量号为02的是不可屏蔽中断,是外部中断,所以int n不都是内中断 ,int 2就不是内中断 。不仅是int 2,其他取值的 int n 也可能不是内中断。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-14 19:23:23 | 显示全部楼层
键盘引起中断和程序中直接执行int 9指令是不一样的。
直接执行int n指令,当然属于内中断,而且不可屏蔽,因为你都执行int 9指令了,这条指令就是中断指令,还谈什么屏蔽不屏蔽呢?
可屏蔽和不可屏蔽是对于外中断来说的。有键盘输入,你可以响应中断也可以不响应。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 18:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表