中断
所谓中断,是指CPU在正常运行程序时,由于程序的预先安排或内外部事件,引起CPU中断正在运行的程序,而转到为预先安排的事件或内外部事件服务的程序中去,这些引起程序中断的事件称为中断源。预先安排的事件是指PC机的中断指令,执行到此,立即转相应的服务程序去执行。内部事件是指系统板上出现的一些事件信号,中断指令也可看作内部事件,外部事件是指某些接口设备所发出的请求中断程序执行的信号,这些信号称为中断请求信号。
中断请求信号何时发生是不能预知的,然而,它们一旦请求中断,则会向CPU 的接收中断信号的引脚发出电信号,因此这些信号CPU是马上可以知道的。这样CPU 就无需花大量的时间去查询这些信号是否产生。因为中断请求信号一旦产生,便会马上通知CPU。如键盘,何时有键控下,是随机的,因而CPU可以对键盘不加理睬,而去执行其它程序,一旦有键按下,键盘马上产生中断请求情号,CPU得知这信号后,便立即去执行为键盘服务的中断程序,服务完后,CPU又恢复执行被中断了的程序。
中断服务程序执行完,返回原来执行程序的中断处(称为断点)继续往下执行,称为中断返回。有时中断请求信号(即中断源)可能有好几个,因此CPU响应这些中断就得有先后次序,这称为中断的优先级。CPU首先响应优先级高的中断,优先级低的中断,暂不响应,称为挂起。有些中断源产生的中断,可以用编程的办法使CPU 不予理睬,这叫中断的屏蔽。
CPU响应中断,转去执行中断服务程序前,需将被中断程序的现场信息保存下来,以便执行完中断服务程序后,接着从被中断程序的断点处继续往下执行。现场信息是指程序计数器的内容、CPU的状态信息、执行指令后的结果特征和一些通用寄存器的内容,有些信息的保存和程序计数器的内容等由机器硬件预先安排完成,称为中断处理的隐操作。有些信息保存是在中断服务程序中预先安排。CPU响应中断时,由中断源提供地址信息,引导程序转移到中断服务程序中去执行。这个地址信息称为中断向量,它一般是和中断源相对应的,PC机采用类型号来标识中断源。
中断方式以其执行速度快,可实时处理,不占用CPU过多的时间等优点,在一些高级应用场合中较多地被采用。PC机中断系统不仅具备一般中断系统的特点,而且有所创新,比如,中断不仅可由外部事件引起,也可由预先安排的事件,或称为内部的事件引起,这些内部事件是指中断指令和执行一些指令引起的特殊事件等。本小节将对PC机的中断系统加以描述,对中断向量表加以介绍。
1.2.3.1 PC机的中断类型
PC机有两种类型的中断:由执行某些指令引起的软中断(也可称为内中断)和接口设备引起的硬中断(也可称为外中断),这些类型的中断,均有中断类型号相对应,现就软硬中断分述如下:
1)软中断
执行下述指令时,将产生或者可能产生中断,这些中断称为软中断。
1.DIV(除)或IDIV(整除)指令
当执行这些除法指令时,若除数为0或商溢出,则产生中断,这类中断称为0型中断。程序设计c语言
2.INT指令
当执行中断指令INT n时,则产生n型中断。
3.INTO指令
若指令序列执行过程中,上条指令执行的结果,使溢出标志位O=1,接着若执行的是INTO指令,则引起内部中断,称为4型中断,若溢出标志位O=0,该指令将不起作用。
4.单步执行
当标志位T=1时,每执行一条指令,则引起一次中断,使得指令的执行,成为单步执行方式,这种方式用于程序的调试,如DEBUG中的跟踪命令T,就是将标志位T置1,进而去执行一个单步中断服务程序,单步执行为1型中断。
2)硬中断
80x86CPU有两条中断请求线:非屏蔽中断NMI和可屏蔽中断INTR线,当这两条线上收到中断请求信号而引起的中断,称为硬中断。现分述如下:
1.非屏蔽中断
当NMI线上出现一个由低上跳的高电平中断请求信号后(持续时间需大于两个时钟周期),不管标志寄存器I位的状态如何,当前指令执行完后,80x86CPU马上转入中断处理。此种类型的中断有三种来源:系统板上随机存储器RAM产生奇偶错,协处理器插座上来的中断请求(仅XT机),I/O通道检查出错等,这种中断是在PC机的系统板上,用户一般是不能用的。
2.可屏蔽中断
当INTR线上出现高电平的中断请求信号时(必须保持到当前执行的指令结束为止),80x86是否响应该中断,取决于标志寄存器I位的状态,若I=1,则CPU处于开中断,因而可以响应,若I=o,则CPU不响应。I的状态,可以由汇编设置,若执行开中断指令STI,则I位被置1,Turbo C有此功能的是库函数enable(),若执行关中断指令CLI,则I位被清零。Turbo C有此功能的库函数是disable()。
disable宏屏蔽中断,只有从外设来的不可屏蔽中断(NMI),仍然是允许的。
enable宏开放中断,可以允许任何设备中断发生。
在PC机上80x86的INTR中断请求线接8259A中断控制器,该中断控制器有进行优先级排队的八条中断请求线,这样,就将80x86的INTR扩展成八条中断请求线,因而使得PC机具有八级中断,其中0,1,3,4,5,6,7编号的中断已为系统配置的I/O设备所占用,当然用户若不用对应的设备时,则可借用该中断号,不过相应的中断向量表和中断服务程序要改写。
1.2.3.2 中断向量表
80x86在内存的前1024个字节(即地址为00000—003FFH)建立了一个中断向量表,可存储256个中断向量,每个中断向量占用4个字节,前两个字节为中断服务程序的入口地址偏移量,后两个字节装入了段地址。使用时,将这两个字节分别装入IP及CS中,以转入中断服务程序,图1-17示出了中断向量表,每个中断向量用类型号加以区别,当执行中断时,CPU根据类型号再乘4后,得到中断向量地址,进而得到IP及CS的值,它就是中断服务程序的入口地址,程序由此转入中断服务程序去执行。
物理地址
4×N
4×N+1
4×N+2
4×N+3
图1-17 中断向量表
系统开机后,BIOS立即把有关的中断向量内容填入中断向量表中,包括0~7FH 一段。待BIOS引导DOS到内存后,DOS进行初始化,它又将某些中断向量填入中断向量表中,它还要修改由BIOS装入的某些中断向量。有些中断向量,用户是可以用在自己的程序中的,如60~67H号中断。绝对地址为180~19FH的一段,是专为用户保留的,它可用作用户的软中断。如何由用户编写和使用自己的中断服务程序将在
第三章介绍。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。