中断如何转入中断服务程序?田对内部中断或NMI,指令本身提供了类型码田对外部可屏蔽中断,在第二个中断响应周期外设向DB送出一个字节的中断类型号,将类型号*4得到中断向量地址,而向量地址前2个字节内容为偏移量(IP),后2个字节内容为段地址(CS),据此即可转到中断服务程序。例: INT 11H的操作步骤如下:
ÿ 对内部中断或NMI,指令本身提供了类型码 ÿ 对外部可屏蔽中断,在第二个中断响应周期, 外设向DB送出一个字节的中断类型号,将类型 号*4得到中断向量地址,而向量地址前2个字 节内容为偏移量(IP),后2个字节内容为段地 址(CS),据此即可转到中断服务程序。 例:INT 11H 的操作步骤如下:
中断操作步骤INT 11HMOV AL.30H中断向量表0:0040H类型10H中断向量地址0:0043H中断向量NIPF84DH0:0044H=11HX4=0044H(4DH0:0045HF8H0:0046HF000HCS00H0:0047HFOHA类型12H中断向量中断处理程序F000:F84DHSTIPUSH DS.『IP、CS、PSW出栈IRET返回断点,继续执行
} } F84DH F000H INT 11H MOV AL,30H 中断向量地址 =11H×4=0044H 中断向量表 类型10H 中断向量 类型12H 中断向量 中断处理程序 0:0040H 0:0043H 0:0044H 0:0045H 0:0046H 0:0047H 4DH F8H 00H F0H IP CS F000:F84DH STI PUSH DS IRET . { IP、CS、PSW出栈 返回断点,继续执行
0: 0000 0200h0: NX4 中断向量表0:0~3FFH0: NX4+2—3000h某中断源发申请中断,申请执行类型号为N的中断子程MOV AX, 0ADD AX. DX堆栈1000:150h1MOV[DI],AX(IP)=0200h执行(CS)=3000hIRET后响应中断后0150(IP)SS:SP执行1000(CS)3000:200h1MOV BX,CX类型NIRET前(PSW)+(PSW)响应中断前中断子程SS:SPIRETSS:SP内存
内 存 中断向量表0:0 ~ 3FFH 1000:150h 3000:200h 0: N×4 0: N×4+2 0: 0000 、 、 0200h 3000h 、 、 、 MOV AX, 0 ADD AX, DX MOV [DI], AX 、 、 、 、 MOV BX,CX 、 、 IRET 、 类型N 中断子程 某中断源发申请中断, 申请执行类型号为N的中断子程 响应中断前 SS:SP 响应中断后 SS:SP 堆栈 执行 IRET后 (IP) (CS) (PSW) 0150 1000 (PSW) SS:SP (IP)=0200h (CS)=3000h 执行 IRET前
0:0000从中断子程返回断点处靠的是执行中断子程最后的指令IRET,0200h0: NX4 从堆栈中取出断点地址给CS:IP,3000h0: NX 4+2—继续执行被中断的程序。故中断子程最后应安排IRET指令。MOV AX, 0堆栈ADD AX, DX(IP)=0200h执行1000:150h-MOV [DI,AX(CS)=3000hIRET后响应中断后0150(IP)SS:SP1000(CS)3000:200hMOVBX,CX(PSW)(PSW)响应中断前SS:SPSS:SPIRET
从中断子程返回断点处, 靠的是执行中断子程最后的指令IRET, 从堆栈中取出断点地址给CS:IP, 继续执行被中断的程序。 故中断子程最后应安排 IRET 指令。 1000:150h 3000:200h 0: N×4 0: N×4+2 0: 0000 、 、 0200h 3000h 、 、 、 MOV AX, 0 ADD AX, DX MOV [DI], AX 、 、 、 、 MOV BX,CX 、 、 IRET 、 响应中断前 SS:SP 响应中断后 SS:SP 堆栈 执行 IRET后 (IP) (CS) (PSW) 0150 1000 (PSW) SS:SP (IP)=0200h (CS)=3000h
(续)8086/88的中断响应过程标志寄存器入栈(1)TEMP=TEIF=TF0(2)CS:IP入栈(3)8086/88各种中断源的优先权,实际上是指被识别出来的先后多种中断同时请求时,最先响应的则可能是单步中断或NMI中断1生
8086/88的中断响应过程(续) 还有 Y NMI TEMP=1 标志寄存器入栈 TEMP=TF,IF=TF=0 CS:IP入栈 获取中断向量 执行服务程序 弹出CS:IP 弹出标志寄存器 返回被中断程序 (1) (2) (3) (4) (5) N N Y (6) 8086/88各种中断源的优先权, 实际上是指被识别出来的先后 多种中断同时请求时, 最先响应的则可能是 单步中断或NMI中断