欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

中断程序与tf跟if的关系

更新时间: 2014-01-05 03:16:04 责任编辑: Author_N1

 

中断程序与TF和IF的关系
在王爽汇编语言第一版中,描述中断的处理过程如下:
1.取得中断类型码
2.标志寄存器入栈,TF,IF=0
3.CS,IP入栈
4.(IP)=(N*4),(CS)=(N*4+2)

在书中261页有一句“基本上,CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程”,
关于为什么在中断程序执行前有一步把TF设置为0,书中262页有以下的叙述:“当TF=1时,CPU在执行完一条指令后将引发单步中断,转去执行中断处理程序。注意,中断处理程序也是由一条条指令构成的,如果在执行中断处理程序之前,TF=1,则CPU在执行完中断处理程序中的第一条指令后,又要产生单步中断,则又要转去执行单步中断处理程序,在执行完中断处理第一条指令后,又要产生单步中断,则又要转去执行单步中断的中断处理处理程序。。。。”

在294页检测点15.1中有一句:“其实在我们的int9中断例程中,模拟int指令调用原int9中断例程的程序段是可以精简的,因为在进入中断例程后,IF和TF都已经置0,没有必要再进行设置了。”

根据以上的描述,以下的三个问题不明白:
1.默认情况下TF与IF的值是否为0?(我认为是,比如TF如果不为0,那它就得去执行单步中断)
2.执行中断之前,会将标志寄存器入栈,之后才会将tf,if置为0,那么如果tf为1,会执行单步中断,在它执行将TF置为0之前会将标志寄存器入栈,此时会将tf的这个1入栈,那出栈后不是又得执行单步中断了,是这样么?
3.“因为在进入中断例程后,IF和TF都已经置0,没有必要再进行设置了”,这句话该如何理解?
在此首先谢谢各位了?
--参考方法--
2.理解正确
3.当产生中断,cpu就自动把TF与IF清0,不需要你自己用POPF等指令进行设置
--参考方法--
1 一般情况下TF=0,除非调试器将他置位,你说的都对,TF用于调试软件,利用TF和INT 3,结合调试寄存器完全可以自己写调试器
2 确实是,中断清TF是为了加快中断例程实时性和高效性,但同时又不能影响其他机制,于是先入栈,再清TF,中断返回后弹出TF,不影响调试异常的处理,详细资料看保护模式下的调试寄存器资料
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:16:04
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20240/
本文WWW.DOC100.NET DOC100.NET版权所有。