▼ 中断是一个由硬件激发的过程,它中断当前正在执行的任何程序。
▼ 在Intel系列微处理器中,包括INTR和NMI(Non Maskable Interrupt)两个申请中断的引脚和一个响应INTR中断的引脚INTA。
▼ 软中断有INT、INTO、INT3和BOUND。其中,INTO和BOUND为条件中断。
▼ IF(interrupt flag,中断标志)和TF(trap flag)两个标志位。
▼ 中断返回指令是:IRET(IRETD)。
▼ 中断向量表(interrupt vector table)存于:000000H~0003FFH,共256个,每个4字节,共占1024字节。
▼ 中断向量(interrput vector)包含中断服务程序的入口地址(段地址+偏移地址)。
▼ 当微处理器执行完当前指令后,会按照下边给出的顺序检查下列条件以确定中断是否有效。
图1 确定中断前的条件检查
▼ 中断发生时的处理顺序如下:
图2 中断处理顺序
▼ 保护模式下,使用一组存储在中断描述表IDT(interrupt descriptor table)中的共256个中断描述符来取代中断向量。每个中断描述符长8字节,共256 × 8 = 2K字节。
图3 保护模式下的中断描述符
▼ 中断描述符表由中断描述表地址寄存器IDTR定位于系统中任何存储单元。
▼ 中断标志IF和陷阱标志TF在中断期间的标志寄存器内容压入堆栈后被清除。当IF被置位它允许INTR引脚产生一个中断;当IF被清除,它阻止INTR引脚产生中断。当TF = 1时,它在每条指令执行后产生一个陷阱中断(类型1,即单步);当TF = 0,程序正常执行。
图4 标志位寄存器
▼ 中断标志通过STI和CLI指令来置位和清除。没有特殊的指令来置位和清除陷进标志。