第十二章 内中断 中断相关概念
CPU可以在执行完当前正在执行的指令后,检测到从CPU外部发送过来的或者内部产生的一种特殊信息,并立即对之进行处理。这些特殊的信息称为中断信息。
中断:CPU不再接着向下执行程序,而是转去处理中断信息 中断信息可以来自CPU的内部或外部。
8086CPU内部可能产生的中断: 1) 除法错误 2) 单步执行 3) 执行int0指令 4) 执行int指令
8086CPU用称为中断类型码的数据来标识中断信息的来源.中断类型码为一个字节型数据,可以表示256种中断信息的来源. 除法错误: 0 单步执行: 1 执行int0指令: 4
执行int指令:该指令的格式为int n,指令中的n为字节型立即数,是提供给CPU的中断类型码.
中断处理程序
用来处理中断信息的程序
CPU收到中断信息后,应转去执行该中断信息的处理程序 中断信息和中断处理程序的入口关联 中断类型码的作用:定位中断处理程序
中断向量表
8086CPU用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址
中断向量表:中断向量的列表 中断向量:中断处理程序的入口地址 中断向量表:中断处理程序的入口地址的列表
中断向量表的存储
中断向量表在内存中存放
8086CPU中,中断向量表指定放在内存地址0处,从0000:0000~0000:03FF的1000个单元存放着中断向量表。
表项:存放了一个中断向量,即一个中断处理程序的入口地址(段地址+偏移地址)。占两个字单元,高地址字单元存放段地址,低地址字单元存放偏移地址
8086CPU在收到中断信息后,所引发的中断过程
1) (从中断信息中)取得中断类型码
2) 标志寄存器的值入栈(因为在中断过程中要改变标志寄存器的值,所以先将
其保存在栈中)
3) 设置标志寄存器的TF和IF的值为0 4) CS的内容入栈 5) IP的内容入栈
6) 从内存地址为中断类型码*4和中断类型码*4+2的两个字单元中读取中断
处理程序的入口地址设置IP和CS
中断过程的简洁描述
1) 取得中断类型码N 2) pushf 3) TF=0,IF=0 4) push cs 5) push ip
6) (IP)=(N*4),(CS)=(N*4+2)
安装
“-”是编译器识别的运算符号,编译器可以用它来进行两个常数的减法. 单步中断
基本上,CPU在执行完第一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程.
单步中断的中断类型码为1,则它所引发的中断过程如下: 1) 取得中断类型码1
2) 标志寄存器入栈,TF、IF设置为0 3) CS、IP入栈
4) IP=(1*4) , (CS)=(1*4+2)
响应中断的特殊情况
有些情况下,CPU在执行完当前指令后,即便发生中断,也不响应。 例如对ss和sp的设置指令
应该将设置ss和sp的指令连续存放 mov ax,1000h mov ss,ax mov sp,0