中断程序与TF和IF的关系
风之子1 2013-12-09 09:14:37 在王爽汇编语言第一版中,描述中断的处理过程如下:
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,没有必要再进行设置了”,这句话该如何理解?
在此首先谢谢各位了?