. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
主题 : :  请教一个知识点,关于TF和IF的问题  [待解决] 回复[ 30次 ]   点击[ 2069次 ]  
philmei
[帖 主] [ 发表时间:2007-12-19 00:35 ] 
荣誉值:7
信誉值:10
注册日期:2007-11-26 03:32
我想请教2个问题。

一、
我的理解:
当CPU执行完某条指令后,会自动检察TF的值是否为1,如果TF=1则引发内中断
然后会
1.取得中断类型码
2.将标志寄存器入栈
3.将TF和IF都设为0
4.将当前CS和IP入栈
5.到"中断向量表"中"中断类型码"所对应的位置找"中断例程"的地址,再将"中断例程"的IP和CS分别出栈

请问:
1.在没有发生任何中断的时候,TF应该默认为0吧?不然TF=1会引发内中断。
2.当某一情况引发了中断的时候,TF变为1,而后,CPU响应中断,取得中断类型码,再将标志寄存器入栈,入栈

时TF是否也等于1?还是说当CPU采用中断后会自动将TF设回0?
3.如果当时将TF=1入栈了,等中断程序执行完后我们用iret将标志寄存器出栈,那时TF不是又为1了吗?又会引

发中断,但无缘无故引发的中断,中断类型码又是多少?相信CPU不会同意TF为1的。

二、
再请教一个有关可屏蔽中断的问题
书中P262页最后一段中说:“几乎所有由外设引发的外中断,都是可屏蔽中断。”
书中P262页最上边一段中说:“可屏蔽中断是CPU可以不响应的外中断。CPU是否响应可屏蔽中断,要看标志寄存

器的IF位的设置。当CPU检测到可屏蔽中断信息时,如果IF=1,则CPU在执行完当前指令后响应中断,引发中断过

程;如果IF=0,则不响应可屏蔽中断。”

请问:
假设一种情况,硬盘此时正在copy数据,此时打开记事本,在其中打字。
有时会发现字显示的很慢的情况,但最后都可显示出来。
根据这一情况,我推想,打字时引发了外中断,而且当时IF=1,因为CPU必竟响应了键盘输入。之所以没有立刻

显示出来,是因为程序运行时将IF设为了0。
1.CPU在不处理程序的时候,IF是不是始终保持在IF=1的状态?以便随时等待接收输入设备的信号
2.不响应可屏蔽中断的情况是否'有,且只有'当CPU调用某一中断时将IF设为了0的时候?

再假设一种情况,就是当我用电脑打游戏的时候,比如“魂斗罗或反恐精英CS”,相信大伙都玩过的。
跳起来打枪的现象。
操作全过程:让小人儿向前跳,跳起来时打枪,后落地。
当我按前和跳的时候,小人儿向前跳了起来。此时应该会引发一个外中断,因为我的输入被CPU执行了。而我又

在小人儿没落地之前开枪了,CPU也执行了,说明又引发了一个外中断。但我之前跳的这一下还没落地,也就是

说之前起跳外中断还没结束,那时IF应该等于0,CPU怎么会又执行了新的外中断?
我又思考,难道说起跳的外中断就是只管起跳,当跳起后,起跳的外中断就已经执行完成了?落地时CPU又再次

确定落点?

可能我第二次分析的对,但我不确定。

总结一下我提出的问题,以便于回答:
1.在CPU不执行程序时,TF是否默认为0?如果是那么
2.中断引发的标志寄存器入栈,当时TF是否为1?
3.中断例程执行完后,咱们用iret将标志寄存器出栈,TF的值为多少?
4.CPU不执行中断时,IF是否默认为1,以便随时等待接收输入信号?
5.是否只有在处理中断的过程时,IF才会等于0?

以上是我学习这章时的疑问,望前辈们给予指点。谢谢!
891204dh
[第19楼] [ 回复时间:2009-08-31 04:27 ] 
荣誉值:2
信誉值:0
注册日期:2009-04-08 06:33
这个问题啊?认真看书就懂了.希望大家都能认真的看书,分析书上是怎么说的!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved