- CPU处理外部突发事件的重要技术。
- 外部中断(可屏蔽):计算机外设发出的中断请求
- 内部中断(不可屏蔽):出错
-
中断优先权
-
中断的过程
1、从中断信息中取得中断类型码(N)
- 2、标志寄存器的值入栈(保护标志位):pushf
- 3、设置标志寄存器的第8位TF和第9位IF位0
- 4、CS入栈:push CS
- 5、IP入栈:push IP
6、从内存地址位中断类型码4和中断类型码4+2的两个字单元读取中断处理程序的入口地址设置IP和CS:(IP)=(N4),(CS)=(N4+2)
中断处理程序
1、保存用到的寄存器
- 2、处理中断
- 3、恢复用到的寄存器
-
int 0中断(除法错误)
安装代码+注册中断向量表 ```cpp assume cs:code
code segment
;设置ds:si指向源地址
mov ax,cs
mov ds,ax
mov si,offset d0
;设置es:di指 向目的地址
mov ax,0
mov es,ax
mov di,200h ;安全的内存空间(中断向量0在的位置)
;设置cx为传输长度
mov cx,offset do0end - offset do0
;设置传输方向为正
cld
rep movab
;设置中断向量表
mov ax,4c00h
int 21h
do0: ;特色中断处理程序 mov ax,4c00h int 21h do0end:nop
单步中断(类型码1)
- CPU执行完一条指令后,如果检测到标志寄存器TF位为1,则产生单步中断,引发中断过程
响应中断的特殊情况
- 很多情况下会先屏蔽中断
- 例如
- 执行向ss传送数据指令后,检测到中断信号也不会响应
- ss:sp应该联合设置,连续完成;引发中断需要向栈中压入数据
- 设置ss的下一步如果不是设置sp,单步中断不会响应
- 执行向ss传送数据指令后,检测到中断信号也不会响应