关于中断那些事(以8086为例)

 

中断,顾名思义就是主体当前所做的事情被打断,对于CPU来说中断也就是停下当前正在运行的程序,去做一些其他的事。而停下正在运行的情况有两种原因,一种是需要响应一些请求,被称作中断;另一种是出现错误而不得不停止运行去修正错误,被称作异常。其实 Intel的官方文档里也将中断和异常理解为两种中断当前程序执行的不同机制。当CPU收到中断或者异常的信号时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理程序中,在完成对这个信号的处理后再跳回到刚才被打断的程序或任务中。本文主要讨论的是前者,也就是CPU对请求的响应。

CPU是微机的核心,它需要处理有关微机工作的各种各样的事情,这些事情本质上就是数据的传输与计算。而与CPU进行数据传输的元件不外乎内存与IO接口、时钟信号这些外部设备两种。内存是单方面的被动的接受CPU指令的部分,它只会将接收到的数据保存下来和将保存的数据送出去,就像是货轮上一排排的集装箱,它的工作就是简单的装载,所以无需向CPU提出请求,也就无所谓中断。而外部设备就像是货轮的配电室、照明系统抑或是对集装箱的监视系统,它们的工作需要时时刻刻向控制室提供反馈,等待控制室对它们的下一个指令。所以中断可以说是外设特有的与CPU的交互方式,CPU通过中断来处理外部设备的随机请求。除此之外还有查询等方式。

了解了中断的含义,接下来我们看看有哪些具体的中断。按照产生方法,中断可分为硬件中断软件中断。而硬件中断又可分为不可屏蔽中断(非屏蔽中断)和可屏蔽中断两种。基于这两种中断方式,8086芯片设置了NMI(不可屏蔽中断请求)和INTR(可屏蔽中断请求)两个引脚。不可屏蔽中断一旦提出,CPU必须无条件响应,而可屏蔽中断是在标志寄存器中断允许位(IF)为1时,CPU在执行完当前指令后响应的中断。

一般将电源掉电信号作为非屏蔽中断信号,当电源低于9V时发出此信号,使CPU将当下所有重要的操作保存起来,不致丢失。对于可屏蔽中断来说,有着非常严格又有趣的流程:首先,外设向INTR引脚发送一个高电平信号,若IF位为1,则CPU会在下一个总线周期向~INTA引脚(中断允许信号,低电平有效)发送两个负脉冲,第一个负脉冲通知外设CPU已经收到外设的请求,在第二个负脉冲之后外设向CPU发送中断类型号。其次,CPU在接收到中断类型号后先将其暂存,把标志寄存器中的内容压栈,并将标志寄存器的IF位和TF位(单步调试允许标志)清零,然后将断点(当前所执行指令的下一条指令的段基址(CS)和偏移(IP))压栈。有时也将通用寄存器中的内容压栈,以便于主程序的顺利执行。最后再通过中断类型号在中断向量表中找到对应的中断向量,进而找到中断程序,进行中断处理。在中断处理过程中,根据使用者的需要来将IF位和TF位恢复,并在终端子程的最后加上IRET,使得中断处理完成后返回主程序。在IRET过程中按照顺序将断点和标志寄存器出栈,继续执行主程序。中断的处理就像是一根毛线上打的结,只不过这个结出现的位置是随机的,CPU在顺着这跟毛线向下走时,会在结里面走个远路,不过最终都会回到正轨。

中断类型号对应的是256种CPU可以处理的中断,其中有一部分是芯片厂家已经写好的不可更改中断,如非屏蔽中断的中断类型号就是02,所以当NMI引脚收到请求时无需等待中断类型号,CPU会直接通过中断向量02H找到该中断子程的位置;比较常见的不可更改的可屏蔽中断有除数为零中断、溢出中断等等,此处不再赘述。对于其他部分则可以由编程者自己编写中断程序。

接下来我们来了解一下什么是中断向量表,这也是编程者面对中断的一种最直接的方式。中断向量表共有1KB的连续存储单元(IP=0~3FFH),可以存放256个中断向量,中断向量也就是是中断子程序的入口地址。每个中断向量占据四个字节,按照从低到高的顺序,前两个字节存放中断向量的偏移量(IP),后两个字节存放它的段基址(CS)。如中断类型号为30H,中断向量为2000H:4815H,则它的存放首地址地址为30H*4,也就是C0H,从它开始的四个单元C0H、C1H、C2H、C3H分别存放着15H、48H、00H、20H。刚才提到在中断向量表中有一大部分是用来存放编程者自创中断的中断向量的,当我们编写好了一个中断处理子程序后,取出它的CS和IP,放到中断向量表的任意位置(考虑到前面已经存放系统自带中断,我们最好从中断类型号为20H开始用起),如30H,之后可以根据需要来给外部接线,实现硬件中断,或者在你的程序中直接调用,这也就是软件中断

中断概念的简单阐述就到此为止,其实中断作为处理随机响应的一种方式,极大提高了微机的工作效率,甚至可以以中断为主,在中断处理器(如8259A)的帮助下来实现更加复杂,对各个外设配合度要求更高的任务。

总之,中断让微机的工作充满了魅力,真正让它活了起来。就像我们的世界,就是因为它的随机性,才让我们每天的生活都不同,才让我们有了探索的动力,甚至是因为它的随机性,才让人类社会充满了矛盾,而马克思说矛盾是发展的根本动力。微机处理矛盾的方式就是中断,中断就是微机的发展。我希望能够通过我的不断学习,探索它更深层的奥秘。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值