1、中断:就是打断,打扰,在正常做事中被人打断,事后又恢复进行原来做的事的过程。
2、内部中断:就是CPU本身内部产生的中断。比如你做事,忽然尿来了,自身打断,去上厕所,然后回来后继续做事。
内部中断有四种:
除法中断,如溢出。 中断码0
单步执行,如单步跟踪时,会每步中断,以便查看。TF设置.。中断码1
执行into指令。中断码4
执行int指令.中断码n 如int 21h
CPU如何知道是何种中断,,根据后面的中断码来判断。
3、中断向量表。每个中断都有一个处理功能的代码段,把每个代码段的首地址全总集中在一个表中。每个入口地址就作为一个表项。
它们的顺序可以根据中断码来确定。入口地址占四字节,前两字节为IP,后两字节为CS。且这个中断向量表固定地
存储在0000:0000开始,如0号中断的IP为:0000:0000,cs 为0000:0002,同理,9号中断也可算出:
IP=4*9,CS=4*9+2
4、中断过程。
取得中断:根据中断码取得中断
保存现场:pushf (标志位入栈)
TF=0,IF=0,即,此时不能单步中断,屏蔽其它中断。
push cs (段入栈)
push IP (偏移量入栈)
启动中断:call 中断码定位的CS:IP
5、iret 返回中断,中断功能执行完成后,就要回到原来的现场。
pop ip
pop cs
popf
和进入中断相反,逐个弹出来保存的现场数据。
6、劫持中断:只要把对应中断码的入口地址,改成我们自己的程序入口地址,这样就劫持了原来的中断功能,实现我们自己的功能。
当然,还可以保存好原来中断功能的入口地址,在必要的情况下,还可调用原来的中断功能。
注意:劫持中断,最后返回也必须是iret,而不是ret
7、SS、SP是感情深重的夫妻,只要执行SS那么它会跟随执行到SP处。