- 10
- 0
- 约1.67万字
- 约 60页
- 2019-08-29 发布于广东
- 举报
8.3.5 中断处理的一般过程 (1)中断处理流程图 (2)中断服务子程序结构 1)保护现场(类似于执行通用子程序) 2)开中断(可选) 3)执行关于当前中断源或异常处理所要求的I/O等程序操作 4)关中断(可选) 5)送中断结束命令给(EOI) 6)恢复现场 7)中断返回 比较: 中断控制与子程序调用 中断控制 子程序调用 程序进入方式 外部随机请求 CALL指令 程序进入时刻 当前指令执行后 执行CALL指令后 保护/恢复现场 视需要设置 视需要设置 保护/恢复断点 PSW/CS/IP CS/IP 返回主程序指令 执行IRET 执行RET 参数传递 无 无 用指令来为中断类型N设置中断向量: MOV AX, 0 MOV ES, AX MOV BX, N*4 ;中断入口地址 MOV AX, OFFSET INTHAND MOV ES:WORD PRT[BX],AX ;设置中断处理程序INTHAND MOV AX, SEG INTHAND ;的入口地址 MOV ES:WORD PRT[BX+2],AX ┆ INTHAND: ;中断处理程序 ┆ IRET 用户可以为保留的中断类型号扩充自己的需要的中断功能,对新增加的中断功能要在中断向量表中建立相应的中断向量。 用户在编写自己的中断处理程序代替系统中的某个中断处理功能时,要注意保留原来的中断向量。程序结束时,要恢复原来的中断向量。可以使用dos功能调用来存取中断向量 取中断向量 预置AH=35H, AL=中断类型号 执行INT 21H ——把类型号为AL的中断向量取出到ES:BX中 设置中断向量 预置AH=25H, AL=中断类型号,DS:DX=中断向量 执行INT 21H ——把DS:DX指向的中断向量放置到中断向量表中类型号为AL的中断向量处 ┆ MOV AL, N MOV AH, 35H ;调用DOS功能35H INT 21H PUSH ES ;保存原中断向量 PUSH BX PUSH DS MOV AX, SEG INTHAND MOV DS, AX ;置用户定义的中断处理 MOV DX, OFFSET INTHAND ;程序INTHAND的入口 MOV AL, N ;地址(段地址和偏移地址) MOV AH, 25H ;设置新的中断向量 INT 21H 例:使用DOS功能调用存取中断向量。 POP DS ┆ POP DX ;恢复原中断向量 POP DS MOV AL , N MOV AH , 25H INT 21H RET INTHAND: ;中断处理程序 ┆ IRET 当中断发生时,由硬件自动完成下列动作: (1)取中断类型号N。 (2)标志寄存器(PSW)内容入栈。 (3)当前代码段寄存器(CS)内容入栈。 (4)当前指令计数器(IP)内容入栈。 (5)禁止外部中断和单步中断(IF=0,TF=0)。 (6)从中断向量表中取4*N的字节内容送IP,取 4*N+2的字节内容送CS。 (7)转中断处理程序。 8.3.3 中断过程 8.3.4 中断优先级和中断嵌套 IBM-PC规定中断的优先级次序为: 优先级高 内部中断(语法错,INTO,INT) 非屏蔽中断(NMI) 可屏蔽中断(INTR) 低 单步中断 可屏蔽中断的优先权又分为8级,在正常的优先级方式下,优先次序为:IR0 、IR1、 IR2、 IR3、 IR4、 IR5、 IR6、 IR7 可屏蔽中断的优先权又分为8级,在正常的优先级方式下,优先次序为:IR0 、IR1、 IR2、 IR3、 IR4、 IR5、 IR6、 IR7 R SL 0 0 正常优先级关系 0 1 清除由L2-L0指定的中断请求 1 0 个中断优先级依次作循环一个位置 1 1 各中断优先级依次循环到由L2-L0指定的中断请求为最低 主 程 序 中断请求
原创力文档

文档评论(0)