咱们在8086编程时,当一个CPU内部中断或者外部中断来了,该去执行什么样的中断处理程序呢?由于咱们知道CPU就是个小傻瓜,只能机械的跟着CS,IP走,因此一切的一切,包括中断机制都是咱们编程人员编出来的。编程
下面咱们看这个中断指令:int 0;ip
这是一个masm风格汇编的调用中断指令,中断类型代码为0,意思是说咱们要调用一个中断类型代码为0的中断,而后让CPU去处理这个中断类型代码相对应的中断处理程序,处理完中断后返回。内存
这条指令看起来也太智能了吧,仅仅一条指令就能干那么多事情,其实,这么理解彻底错了,咱们要了解一个道理,对于每个汇编指令,就如int 0这个指令,虽然仅仅一句话,可是当汇编成机械语言时,可不单单就一句话了,只不过汇编器帮咱们作了不少事,对于这条指令,汇编器碰到这条指令会产生以下代码:asm
这里又得说一个中断向量表的概念:程序
咱们通常约定俗成的在内存0X000处创建一个中断向量表,这个中断向量表每4个字节的储存一个中断类型的中断处理程序地址。就是这么个意思:im
从内存地址0开始,前两个字节存放与中断类型代码0相应的中断处理程序地址的ip偏移地址,而后后两个字节存放中断处理程序地址CS段地址,其后依次是中断类型1,2,.....的中断中断处理程序地址。cpu
这样,咱们就能够经过中断类型代码,中断向量表找到此中断类型的处理程序了。img
至于中断处理程序,通常是这样的一个流程:语言
iret指令至关于:错误
pop IP; pop CS; popf;
下面咱们讲下内中断:
cpu内部中断上面几个,第一个,当除法错误时产生一个中断,中断类型为0,后面的单步执行这个是干吗的呢?每当CPU执行完一跳指令后,检测到标志寄存器的TF位为1,那么就会产生一个单步中断,中断类型码为1,因此咱们才有如上所示,当处理中断时,要将TF置0。
像int n,就是表明执行中断类型代码为n的中断。