内部中断不需要硬件支持,不受IF标志控制,不执行中断总线周期,除单步中断可通过TF标志允许或禁止外,其余都是不可屏蔽的中断。内部中断分为以下几种:
 (1)除法错误中断。CPU在执行触发指令时,若发现除数为0或者所得的商超过了寄存器能容纳的范围,则自动产生一个类型为0的除法错误中断。
 (2)单步中断。如果CPU的单步标志TF置1,那么每执行完一条指令后,会自动产生类型为1的单步中断,CPU响应中断后,暂停执行下条指令,转到单步中断服务程序去执行,其结果是将CPU的内部寄存器和有关存储期的内容显示出来,便于跟踪程序的执行过程,实现动态排错。
中断向量表
- 中断服务程序的入口地址通常被称为中断向量或中断矢量。8086可处理256类中断,类型号为0~255(0 ~ FFH)。每类中断有一个入口地址,需用4个字节存储CS和IP,256类中断的入口地址要占用1K字节,它们位于内存0000 ~ 003FFH的区域中,存储了这些地址的连续空间称为中断向量表或中断矢量表。
 - 类型号为0~4的5个中断被定义为专用中断,它们分别是:除法错误中断、单步中断、不可屏蔽中断、断点中断和溢出中断,它们的中断服务程序的入口地址分别存放在00H、04H、08H、0CH和10H开始的4个连续单元中。
CPU 通过中断类型码找到中断向量表和程序地址的位置。 
I/O ADDR  | INT TYPE(16进制)  | FUNCTION  | 
00 ~ 03  | 0  | 除法错误中断  | 
04 ~ 07  | 1  | 单步中断  | 
08 ~ 0B  | 2  | 非屏蔽中断  | 
0C ~ 0F  | 3  | 断点中断  | 
10 ~ 13  | 4  | 溢出中断  | 
14 ~ 17  | 5  | 打印屏幕  | 
18 ~ 1F  | 6/7  | 保留  | 
assume cs:code, ds:data, ss:stack
data segment
db 128 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
int 0 ; 除法错误
mov ax, 4C00H
int 21H
code ends
end start

; 以下程序实现 1 ÷ 0 的结果
assume cs:code, ds:data, ss:stack
data segment
db 256 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start:
mov ax, stack
mov ss, ax
mov sp, 128
mov ax, 1
mov bl, 0
div bl
mov ax, 4C00H
int 21
code ends
end start

 例如:
 如上图
- 0号中断源对应的中断处理程序的入口地址为: F000:1060
 - 1号中断源对应的中断处理程序的入口地址为: 01A3:13BB
 - 2号中断源对应的中断处理程序的入口地址为: 0070:0008
 - 3号中断源对应的中断处理程序的入口地址为: 01A3:13B1
 
总结:
 存储N号中断源的中断处理程序入口的偏移地址的内存单元的地址
- 段地址:N * 4 + 2
 - 偏移地址: N * 4
 
中断过程
 1.取得中断类型码
 2.保存标志位寄存器 → pushf
 3.将标志位寄存器的第 8 TF 和 第9位 IF 设置为0
 4.push cs
 5.push ip
 6.cs = N4+2 ip=N4
中断处理程序返回的方法
ss:sp ip cs pushf
iret 指令可实现以下的指令
- pop ip
 - pop cs
 - popf
 









