x86的中断

一、中断系统


为什么引入中断?

 

当CPU与外设交换信息时,若用查询方式,则CPU就要浪费很多时间去等外设。这是快速的CPU与慢速的外设之间的矛盾,也是计算机发展过程中遇到的一个严重的问题之一,为了解决这个问题,一方面要提高外设的工作速度;另一方面引入了中断的概念。

 

中断的好处

 

1.      同步操作

有了中断功能,就可以使CPU和外设同时工作。CPU在启动外设工作后,继续执行主程序,同时外设也在工作。当外设把数据准备好后,发出中断申请,请求CPU暂时终止主程序,执行输入或输出(中断处理),处理完后,CPU恢复执行主程序,外设也继续工作。而且有了中断功能,CPU可允许多个外设同时工作。这样大大提高了CPU的利用率,也提高了输入、输出的速度。

 

2.      实现实时处理

当计算机用于实时控制时,中断是一个十分重要的功能。现场的各个参数、信息,根据需要,可在任何时间发出中断请求,要求CPU处理;CPU一旦接受中断请求,就可以马上响应(若中断是开放的话),加以处理。这样的及时处理在查询方式下是做不到的。

 

3.      故障处理

    计算机在运行过程中,往往会出现事先预料不到的情况或出现一些故障,如电源掉电、运算溢出等等。计算机可以利用中断系统自行处理,而不必停机或报告工作人员。

 

什么是中断?



 

在CPU执行程序的过程中,出现了某种紧急或异常的事件(中断请求),CPU需要暂停正在执行的程序,转去处理该事件(执行中断服务程序),并在处理完毕后返回断点处继续执行被暂停的程序,这一过程称为中断.

 

断点:     处是指返回主程序时执行的第一条指令的地址

中断源 :  任何可以引发中断的事件称为中断源.分为硬件中断源和软件中断源两类

中断处理过程 : 中断请求、中断响应、断点保护、中断处理、中断返回

 

中断的相关概念

   1. 究竟是什么引起中断?  --中断源

   2.中断产生如何服务?     --中断响应

   3.响应中断请求,如何服务即如何找到中断服务程序去执行?  --中断向量

   4.当多个中断同时请求服务时,如何处理?                  --中断优先级

   5.CPU是否一定会响应中断?                              --中断屏蔽

 

中断控制方式是CPU与外设交换信息时一种主要输入/输出传递方式。中断控制是计算机发展中的一种主要技术,中断控制方式使得外设具有一定的主动权,使得CPU不必反复地去查询外设的状态,克服了程序查询导致CPU效率低的缺点。随着计算机的发展,中断的适用范围也随之扩大,可包括软件中断,硬件中断。




 

外部中断 :来自CPU外部,由外设的请求引起,通过外部硬件产生,也称为硬件中断。

内部中断 :来自CPU内部,由执行指令引起的。

非屏蔽中断 :通过NMI引脚引入CPU,不受中断允许标志IF的屏蔽,一个系统一般只允许有一个非屏蔽中断。

可屏蔽中断 :通过INTR引脚引入CPU,只有当中断允许标志位IF=1时,才能被CPU响应。通过8259A,一个系统中可有多个可屏蔽中断。

 

3.  中断类型码与中断失量表

8086/8088内部具有一个强有力的中断管理系统,可以处理256个中断,每一个中断都给定一个编号(0~255),称为中断类型码。对于每一个中断类型码在内存中有其对应的中断矢量。所有中断矢量构成一个中断矢量表。在8086内部对每一个中断分配4个中断矢量地址。所以中断矢量表占据内存的地址范围是:0000H: 0000H~0000H: 03FFH,既是内存单元的最低的1K地址范围。只要有中断类型号,就可根据中断类型号与中断矢量所在位置之间的对应关系,很方便地就能判断出中断关系矢量表的地址。

 

即:中断矢量在中断矢量表中的地址=中断类型号×4



 

4.  中断类型号的获取

矢量中断中,中断入口地址与中断类型号有关,中断类型号如何获取呢?

 

1.对于除法出错,单步中断,不可屏蔽中断NMI,断点中断和溢出中断,CPU分别自动提供中断类型号0~4。

2.对于用户自己确定的软件中断INT n,类型号由n决定。

3.对外部可屏蔽中断INTR,可以用可编程中断控制器8259A获得中断类型号。

 

8个中断请求信号接到8259A。当外设申请中断时,8259A响应优先权高的中断源,将中断请求信号送到CPU的INTR端。8259A收到CPU发出的第二个中断响应信号时,将对应中断源的中断类型号送给CPU,CPU获取中断类型号后,自动转入相应的中断服务程序。

 

将有关中断的主程序编写方法归纳 :

 

     1. 主程序中的初始化

     (1)设置中断向量。

     (2)设置8259A的中断屏蔽寄存器的中断屏蔽位。

     (3)设置CPU中断允许位标志IF(开中断STI)。

 

     2. 硬件(外设接口)和CPU自动完成

     (1)外设接口向CPU的INTR端发出中断请求。

     (2)当前指令执行完后,CPU发两个中断响应信号INTA给外设接口。

     (3)CPU取中断类型号n。

     (4)CPU自动将当前PSW、CS、IP内容压栈保护。

     (5)清除IF、TF,禁止外部中断和单步中断。

     (6)从中断向量表中取(4n)地址中内容→IP,取(4n+2)地址中内容→CS。

     (7)转向中断服务子程序。

5.  专用中断

在8088/8086中断系统中的前5个中断,系统已经给出了固定的定义和处理功能,故又称它们为专用中断,其中除了非屏蔽中断而外,其余的4个都属于内部中断。

 

除数为零中断 :类型码0;当执行除法时,如果除数为零,CPU自动产生一个类型0中断。

 

单步中断 :类型码1;受TF为控制,当TF为1时,每执行一条指令,就产生一个单步中断,主要使用于程序调试过程中。

 

断点中断 :类型码3;主要用于程序调试中,即在指定位置设置断点,当CPU执行到此断点位置时将转入到断点服务子程序。

 

溢出中断(INTO) :类型码4;当CPU执行加/减操作时,如果有溢出产生,并且其后执行该指令时则会作出相应的处理操作。

6.  软件中断

也叫内部中断。通过中断指令使CPU执行中断服务程序的方法称为软件中断,中断指令提供了直接调用中断服务程序的软件手段。软件中断是以INT n指令出现在程序中的,中断指令占用2个字节,第一个字节为指令码CDH,第二个字节为指令操作数n,即中断类型码。因此,在软件中断时,CPU是从指令流中读得中断类型码的。

 

软件中断与外部中断有许多不同之处:

 

   1.软件中断是以一条指令INTn而进入中断服务程序的,并且其中断类型码由指令的第二字节提供。

   2.软件中断不受中断允许标志IF的禁止 ,即无论IF=1或0,对任何一个软件中断都不影响。其中单步中断是受单步标志TF的影响,即只有TF=l 时,才能执行单步中断。

   3.由于CPU是从指令流中读的软件中断的中断类型码,因此,软件中断进入中断后,不需要执行中断响应总线周期,也不必从数据总线上读取中断类型码。

   4.软件中断除类型器(除数为0的中断)外,都没有随机性,因为软件中断是以INT n指令的形式出现在程序中的,该指令放在程序的何处何时执行,都是预先定好了的,这就使软件中断不会出现随机性。

7.  外部中断

    8088/8086系统的外部中断包括非屏蔽中断和可屏蔽中断,它们分别通过NMI和INTR向CPU发出中断请求。

 

不可屏蔽中断NMI:

 

    分配中断类型码是2(其中断矢量地址范围是:0000H:0008~0000H: 000BH)。

在8086中,不可屏蔽中断NMI是高电平有效,其不受IF位的影响,在系统中应用于紧急情况的故障处理,例在IBMPC/XT中使用NMI中断服务程序对RAM奇偶校验出错进行处理等。

 

可屏蔽中断INTR:

 

    当 INTR上出现正跳变信号时,则产生可屏蔽中断,它受IF位影响(可通过软件来设置IF位)。对于一个系统可以有多个外设需要采用中断方式与CPU交换信息,当系统有多个外设中断时,中断有可能是同时产生或先后产生,因此就需要有专门的中断控制芯片来完成其管理工作,如8259A。

8.  中断响应的流程及中断的优先权

    8086含有多种中断,而CPU一次只可处理一个中断请求,因此当有多个中断发生时,CPU需有一个中断处理的顺序问题,亦即中断的优先权管理。在8086中各类中断源的优先级:

 

优先级 中断类型

 

1(高)     内部中断(除单步中断)

2          NMI

3          INTR (IRQ0, ... , IRQ7)

4(低)     单步中断





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值