第八章中断及中断系统 8.1中断工作原理 8.2中断指令与中断调用 8.3终端系统应用 8.4中断服务程序编写
第八章 中断及中断系统 8.1中断工作原理 8.2中断指令与中断调用 8.3终端系统应用 8.4中断服务程序编写
中断是CPU与外设之间进行输入输出的一种有效方法,。 它是CPU中止正在执行的程序而转去处理特殊事件● 的过程。具有这种功能实现这种过程的软、硬件 环境称中断系统。 中断技术的应用非常广泛。现代计算机系统中多道 程序的分时运行、实时控制、人机通讯、计算机 故障处理、对I/0设备的管理等均使用中断技术。 中断技术能够充分发挥计算机的软、硬件功能, 提高工作效率和实时处理能力
中断是CPU与外设之间进行输入输出的一种有效方法, 它是CPU中止正在执行的程序而转去处理特殊事件 的过程。具有这种功能实现这种过程的软、硬件 环境称中断系统 。 中断技术的应用非常广泛。现代计算机系统中多道 程序的分时运行 程序的分时运行 、实时控制 、人机通讯 、计算机 故障处理、对I/O设备的管理等均使用中断技术。 中断技术能够充分发挥计算机的软 、硬件功能, 提高工作效率和实时处理能力。 2
8.1中断工作原理 8.1.1中断 中断是指CPU在执行当前程序的过程中,遇到了某些 随机出现的外设请求,暂停正在执行的程序而转 去执行为外设服务的程序;服务完毕,CPU再返回 到暂停处继续执行原来的程序。故中断首先是对 外设而言的,称之为外中断或硬件中断。 在386和486中把许多指令执行过程中产生错误的情 况处理和内部软件中断统称为异常中断,简称为 异常;把外部中断称为中断。异常和中断构成了 整个系列微机中的中断系统。 o8
8.1中断工作原理 8.1.1 中断 中断是指CPU在执行当前程序的过程中,遇到了某些 随机出现的外设请求,暂停正在执行的程序而转 去执行为外设服务的程序;服务完毕,CPU再返回 到暂停处继续执行原来的程序。故中断首先是对 外设而言的,称之为外中断或硬件中断。 在386和486中把许多指令执行过程中产生错误的情 况处理和内部软件中断统称为异常中断,简称为 异常;把外部中断称为中断。异常和中断构成了 整个系列微机中的中断系统。 3
在中断传送方式下,CPU不再循环查询外设的状态,而是在外设 “准备好”后,主动通知CPU。具体地说,外设通过接口电路 向CPU发出中断请求信号,CPU暂停执行当前正在执行的程序, 转入执行相应的中断服务程序。在中断服务程序中,执行I/0 操作,再返回继续执行原来被中断的程序。这样CPU就避免了 把大量时间耗费在等待、查询外设信息的操作上,故提高了 CPU的工作效率。 中断原理如图8.1所示。 主程序 中断响应 中断类型N 中断服务程序 中断返回 图8.1中断工作原理示意图
在中断传送方式下,CPU不再循环查询外设的状态,而是在外设 “准备好”后,主动通知CPU。具体地说,外设通过接口电路 向CPU发出中断请求信号,CPU暂停执行当前正在执行的程序, 转入执行相应的中断服务程序 转入执行相应的中断服务程序 。在中断服务程序中 在中断服务程序中,执行I/O 操作,再返回继续执行原来被中断的程序。这样CPU就避免了 把大量时间耗费在等待、查询外设信息的操作上,故提高了 CPU的工作效率 。 中断原理如图8.1所示。 主程序 中断响应 中断类型N 中断服务程序 中断返回 图8.1 中断工作原理示意图 4
8.1.2中断类型 外设的中断是通过INTEL8259A可编程中断控制器 (PIC)连接到主机上的,系统对中断源的管理也 是通过8259APIC实现的。8259APIC共有8条外界 中断请求信号线IR0-IR7,可以产生8位编码,每 一种编码对应一种中断类型号,中断类型号的范 围是00H-FFH,用来区分外部中断源类型。常用 的中断类型号及其对应的中断名如表8-1所示。 8
8.1.2 中断类型 外设的中断是通过INTEL8259A可编程中断控制器 (PIC)连接到主机上的,系统对中断源的管理也 是通过8259A PIC 8259A PIC实现的。8259A PIC 8259A PIC共有8条外界 中断请求信号线IR0-IR7,可以产生8位编码,每 一种编码对应一种中断类型号,中断类型号的范 围是00H-FFH,用来区分外部中断源类型。常用 的中断类型号及其对应的中断名如表 的中断类型号及其对应的中断名如表8-1所示。 5
表8-1常用的中断类型号及其对应的中断名 中断类型号 中断类型 00-1F BI0S中断 20-3F D0S中断向量 40-5F 扩充BIOS中断向量 60-67 用户中断向量 68-6F 保留 70-77 I/0设备中断向量 78-7F 保留 80-FD BASIC F1-FF 保留 。888
表8-1 常用的中断类型号及其对应的中断名 中断类型号 中断类型 00-1F BIOS中断 20-3F DOS中断向量 40-5F 扩充BIOS中断向量 60 -67 用户中断向量 68-6F 保留 70 -77 I/O设备中断向量 78-7F 保留 80 -FD BASIC F1-FF 保留 6
8.1.3中断服务 每种类型的中断都由相对应的中断服务程序来处理,中断类型由中断类 型号来标识。中断服务程序的功能是多种多样的,所有中断服务程序 都具有相同的结构模式。中断服务程序的编写方法和标准子程序很类 似,下面是编写中断服务程序的步骤,但它与子程序编写有一些不同 之处。 (1)保存寄存器内容; (2)如允许中断嵌套,则开中断(STI); (3)处理中断; (4)关中断(CLI); (5)送中断结束命令(0I)给中断命令寄存器; (6)恢复寄存器内容; (7)返回被中断的程序(IRET)。 中断处理程序除了编写结构特点外,在位置上也有特点。它们在80X86 系统中,都是由操作系统提供的,都不是浮动装配的,而是固定装配 的。装配的起始地址由中断向量表给出。并且,中断服务程序通常都 是常驻内存的,即系统一启动,就完成中断服务程序的装配
8.1.3 中断服务 每种类型的中断都由相对应的中断服务程序来处理,中断类型由中断类 型号来标识。中断服务程序的功能是多种多样的,所有中断服务程序 都具有相同的结构模式。中断服务程序的编写方法和标准子程序很类 似,下面是编写中断服务程序的步骤,但它与子程序编写有一些不同 之处。 (1)保存寄存器内容; (2)如允许中断嵌套,则开中断(STI); (3)处理中断; (4)关中断(CLI); (5)送中断结束命令(EOI)给中断命令寄存器; (6)恢复寄存器内容; (7)返回被中断的程序(IRET)。 中断处理程序除了编写结构特点外 中断处理程序除了编写结构特点外,在位置上也有特点 在位置上也有特点。它们在80X86 系统中,都是由操作系统提供的,都不是浮动装配的,而是固定装配 的。装配的起始地址由中断向量表给出。并且,中断服务程序通常都 是常驻内存的,即系统一启动,就完成中断服务程序的装配。 7
8.1.4中断向量表 每种中断类型都安排一个中断类型号。80X86中断系统能处●● 理256种类型的中断,类型号为000-0FFH。每种中断类型 号都对应一个中断服务程序,中断向量是中断服务程序的 入口地址,中断向量表就是各类型中断处理程序的入口地 址表。 其中,存储器的低1.5KB,地址从0段0000~5F℉H为系统占用, 其中最低的1KB,地址从0000~3F℉H存放中断向量。中断 向量表中的256项中断向量对应256种中断类型,每项占用 4个字节,其中2个字节存放中断服务程序的段地址(16 位),另2个字节存放偏移地址(16位)。因为各服务程 序的段地址和偏移地址在中断向量表中按中断类型号顺序 存放(如图8.2所示),所以每类中断向量的地址可由中 断类型号N×4计算出来。 8888 8
8.1.4 中断向量表 每种中断类型都安排一个中断类型号。80X86中断系统能处 理256种类型的中断,类型号为000 -0FFH 。每种中断类型 号都对应一个中断服务程序,中断向量是中断服务程序的 入口地址,中断向量表就是各类型中断处理程序的入口地 址表 。 其中,存储器的低1.5KB,地址从0段0000~5FFH为系统占用, 其中最低的1KB,地址从0000 ~3FFH存放中断向量 。中断 向量表中的256项中断向量对应256种中断类型,每项占用 4个字节,其中 2个字节存放中断服务程序的段地址 个字节存放中断服务程序的段地址 (16 位),另2个字节存放偏移地址(16位)。因为各服务程 序的段地址和偏移地址在中断向量表中按中断类型号顺序 存放(如图8.2所示),所以每类中断向量的地址可由中 断类型号N×4计算出来。 8
中断向量表 0:0000 IP 类型0中断服务程序入口地址 CS 0:0004 类型1中断服务程序入口地址 0:0008 类型2中断服务程序入口地址 0:03FC 类型F℉中断服务程序入口地址 图8.2中断向量表 、08 。888 9
中断向量表 0:0000 类型0中断服务程序入口地址 IP 类型0中断服务程序入口地址 类型1中断服务程序入口地址 0:0000 0:0004 CS 0:0008 类型2中断服务程序入口地址 ……… 0:03FC 类型FF中断服务程序入口地址 图8.2 中断向量表 9
8.2中断指令与中断调用 8.2.1软中断指令 软中断又称为程序自中断,它是用中断指令实现的。 (1)中断指令 格式:INTN;其中,N为中断类型号。 功能:①(FLAGS)→↓(SP) 0→IF、TF ②(CS)+↓(SP) (4*N+2)+CS ③(IP)→↓(SP) (4*N)→IP 说明:首先将CS、IP寄存器的内容压入堆栈,然后IP、 CS从中断向量表的4*N~4*N+3共4个字节单元中获取N号中 断处理子程序的入口地址。最后根据IP和CS寄存器中地址 值的内容,CPU便转入N号中断处理子程序执行中断服务。 为了保证在执行完中断处理子程序之后能正确返回到被 中断程序处继续执行,通常在中断处理子程序的最后写上 中断返回指令。 10
8.2中断指令与中断调用 8.2.1 软中断指令 软中断又称为程序自中断,它是用中断指令实现的 。 ⑴中断指令 格式:INT N N;其中,N为中断类型号 。 功能:①(FLAGS)→↓(SP) 0→IF、TF ② (CS )→↓ (SP ) (4*N+2 ) →CS ③(IP)→↓(SP) (4*N)→IP 说明:首先将CS 、IP寄存器的内容压入堆栈 寄存器的内容压入堆栈,然后IP 、 CS从中断向量表的4*N~4*N+3共4个字节单元中获取N号中 断处理子程序的入口地址。最后根据IP和CS寄存器中地址 值的内容,CPU便转入 N号中断处理子程序执行中断服务 号中断处理子程序执行中断服务 。 为了保证在执行完中断处理子程序之后能正确返回到被 中断程序处继续执行,通常在中断处理子程序的最后写上 中断返回指令。 10