您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 中断屏蔽 >

汇编语言问题 高手入int 16h 一定要设置 IF=1 吗

发布时间:2019-06-28 06:53 来源:未知 编辑:admin

  Int 16h 是可屏蔽中断吗 为何这个程序 我开始加入了 cli 把IF=0 运行后按下

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  在 IF为0期间,只有CPU外部不可屏蔽中断(NMI)引脚上发来的硬件中断请求能得到响应,其它可屏蔽请求不被响应。

  程序执行 INT n 指令是内部的软件中断。不管 IF 是0还是1,只要程序运行遇到 INT指令,都会执行。

  只有在执行不可中断的关键代码期间才关中断(用CLI 指令将 IF清0),一旦完成关键代码的执行,就要立即开中断(用STI指令将 IF置1)。

  这是一种需要自觉遵守的类似于道德规范的规则。这么做的目的,是为了保证外部硬件中断能及时得到响应,不破坏系统整体的工作环境。

  如果不开中断,就可能造成系统工作异常,比如后台打印任务无法顺利完成,系统时钟、以及依赖系统时钟的软件无法正常工作,硬盘等设备工作效率降低或出现异常,等等。追问答非所问追答

  你的问题是:“Int 16h 是可屏蔽中断吗 为何这个程序 我开始加入了 cli 把IF=0 运行后按下

  第一问“Int 16h 是可屏蔽中断吗”的答案,见上面回复的第3小段。即 int 16h不是可屏蔽中断。它是无法屏蔽的软中断。

  第二问“为何这个程序 我开始加入了 cli 把IF=0 运行后按下r还是 可以让字符变红” 答案仍然是第3小段。

  这里有一个问题,就是你设置了IF=0以后,按键盘为什么还有响应?那是因为在进入INT 16H的服务子程序后,IF被它设置成1了。在系统的中断服务中,会经常关中断然后开中断。你用调试软件比如debug跟踪进入INT 16H的执行过程,可以找到开中断(将IF设置为0)的点。

  第三问“难道说 int61h 不用if=1”答案还是上面所说的第3小段。

  你看不懂我的回复,大概是因为你没有学过接口技术课程,对8086的中断了解不全面。

  内部中断的中断号是0~7,除了2号是外部硬件发起的不可屏蔽中断外,其它由CPU发起。比如0号中断是除法溢出中断,只要执行除法指令时被除数的高一半大于或等于除数,CPU就自动调用这个中断。这8个都是不受IF控制的。

  外部中断的中断号是8~0FH(286以后的CPU增加了7个外部中断,这里不讨论)。它们由外部硬件发起,比如键盘、硬盘等。它们都是可屏蔽中断。IF设置为0的时候,影响的就是这8个。

  你将IF置0,不会影响0~7这8个内部中断,不会影响10H往后(包括16H)所有中断指令。它只会影响8~F之间这8个,并且,只是由CPU外部引脚的 IRQ端子上收到的外部硬件中断请求会被屏蔽。(如果你在程序中用一条 INT 08H指令,这次就是指令软中断,它也不会受IF的影响)。

http://rotorooterpa.com/zhongduanpingbi/163.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有