1113727163 发表于 2019-6-25 12:58:29

关于中断过程的问题

王爽汇编书上说中断过程,如下:
1.取得中断类型码N;
2.pushf
3.TF=0,IF=0
4.push CS
5.push IP
6.IP=N*4,CS=N*4+2

我的问题是:触发中断的条件是TF与IF不为0,如果在第二步把标志寄存器都压入栈,TF与IF的值也会入栈,在执行完中断程序后,标志寄存器出栈TF或IF值为1,企不是又会引发中断?

暗pluto 发表于 2019-6-25 13:46:52

首先要理解这两个寄存器的意思
跟踪标志(TF):当TF被设置为1时,CPU进入单步模式,所谓单步模式就是CPU在每执行一步指令后都产生一个单步中断。主要用于程序的调试。
中断标志(IF):决定CPU是否响应外部可屏蔽中断请求。IF为1时,CPU允许响应外部的可屏蔽中断请求。

所以当执行完中断以后,如果TF为1,那么会执行单步中断(单步中断也是中断的1种,所以很中断的过程一样)

人造人 发表于 2019-6-25 14:58:33

首先你要明白,中断并不是由TF和IF引发的
TF和IF更类似于一个开关,TF和IF这个开关如果关闭了,那么中断源产生的中断信号就没办法通过这个开关到达处理器内部,处理器就没办法知道这个中断请求,同样也没办法处理这个中断
只有TF和IF这个开关打开,这样中断源产生的中断信号才能通过这个开关到达处理器内部,处理器才能知道有中断产生,才能处理这个中断请求

楼上已经说明了
准确来说这个开关是IF
TF和调试有关,如果不禁用TF,会导致无限循环

1113727163 发表于 2019-6-25 16:20:18

人造人 发表于 2019-6-25 14:58
首先你要明白,中断并不是由TF和IF引发的
TF和IF更类似于一个开关,TF和IF这个开关如果关闭了,那么中断源 ...

那么例如在执行除法错误中断前,TF和IF的值是多少?

人造人 发表于 2019-6-25 19:52:43

中断分两种,内中断和外中断
内中断就是处理器内部产生的中断
外中断就是处理器外部产生的中断
^_^


内部中断是不可屏蔽中断,不管tf和if状态是什么,都会执行中断处理程序

外部中断分可屏蔽中断和不可屏蔽中断
不可屏蔽中断无法屏蔽,一旦出现,处理器无条件执行中断处理程序

只有外部中断,并且是可屏蔽中断才能屏蔽,如何屏蔽?
这就要看if标志,if如果为0,处理器忽略外部中断请求
只有if为1,处理器才响应中断请求

tf和调试有关,如果tf为1,执行完一条指令就中断,执行中断处理程序,执行中断之前必须让tf为0,不然就在执行中断的第一条指令后又一次进入中断,一直这样下去,死循环

除法错误中断属于内部中断,不管tf和if是什么,一旦出现除法错误中断,处理器无条件执行中断处理程序

1113727163 发表于 2019-6-26 10:05:48

人造人 发表于 2019-6-25 19:52
中断分两种,内中断和外中断
内中断就是处理器内部产生的中断
外中断就是处理器外部产生的中断


谢谢大佬孜孜不倦的回答

majian890324 发表于 2020-5-2 12:33:36

学习中ing~~~

心驰神往 发表于 2020-10-30 15:22:43

{:9_218:}

kkl44stupid 发表于 2021-2-10 13:11:11

支持

ridiculum 发表于 2021-6-16 17:32:18

学习一个

Dragon910623 发表于 2021-6-22 12:53:44

{:10_277:}

超级玛尼哄 发表于 2021-6-24 18:20:07

{:10_279:}

小超超超 发表于 2021-7-28 00:06:43

{:10_257:}{:10_256:}

burntlime 发表于 2021-7-29 16:53:58

{:10_256:}
页: [1]
查看完整版本: 关于中断过程的问题