首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

中断程序与TF跟IF的关系

2013-12-16 
中断程序与TF和IF的关系在王爽汇编语言第一版中,描述中断的处理过程如下:1.取得中断类型码2.标志寄存器入

中断程序与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,不影响调试异常的处理,详细资料看保护模式下的调试寄存器资料

热点排行