第12章 内中断

Posted godoforange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第12章 内中断相关的知识,希望对你有一定的参考价值。

任何一个通用的CPU,比如8086 ,都具备一种你能力,可以在执行完当前正在执行的指令后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种特殊的信息,我们可以称其位:中断信息。中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而去转去处理这个特殊信息。

  注意,我们这里所说的终端信息,是为了便于理解而采用的一种逻辑上的说法。它是对几个具有先后顺序的硬件操作所产生的时间的统一描述。“中断信息”是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息。因为本书的内容不是微机原理与接口或组成原理,我们只能能用一些便于理解的说法来描述一些比较复杂的及其工作原理,从而使学习者忽略一些和我们的学习重心无关的内容。

12.1 内中断的产生

  1.除法错误,比如,执行div指令产生的除法溢出

  2.单步执行

  3.执行into指令

  4.执行int指令

12.2 中断处理程序

  CPU收到中断信息后,需要对中断信息进行处理。而如何应对中断信息进行处理可以由我们编程决定的。

  CPU在收到中断信息后,应该转去执行该中断信息的处理程序。若要8086CPU执行某处的程序,就要将CS:IP指向它的入口。可见首要的问题是,CPU在收到终端信息是,如何根据终端信息确定其处理程序的入口。

  CPU的设计者必须在中断信息和其处理程序的入口地址之间建立某种联系,使得CPU根据终端信息可以找到要执行的处理程序。

12.3  中断向量表

  CPU用8位的中断类型码通过中断向量表找到相对应的中断处理程序的入口地址。那么什么是中断向量表呢?中断向量表,就是中断向量的列表。那么什么又是中断向量呢?所谓中断向量,就是中断处理程序的入口地址。展开来讲,中断向量表,就是中断处理程序的的入口地址的列表。

  中断向量表在内存中保存,其中存放着256个中断源所对应的中断处理程序入口地址。

  CPU只要知道了中断类型码,就可以将中断类型码作为中断向量的表项号,定位相应的表项,从而得到中断处理程序的入口地址。

  可见,CPU用中断类型码,通过查找中断向量表,就可以得到中断处理程序的入口地址。在这个方案中,一个首要的问题是,CPU如何找到中断向量表?现在,找到中断向量表是通过中断类型码找到中断处理程序入口地址的先决条件。

  中断向量表在内存中存放,对于8086PC机,中断向量表指定放在内存地址0处。从内存0000:0000到0000:03FF 的1024个地址单元中存放着中断向量表能不能存放在别处呢?不能,

  那么在中断向量表中,一个表占多大的空间呢?一个表项存放一个中断向量,也就是一个中断处理程序的入口地址,对于8086CPU,这个入口地址包括段地址和偏移地址,所以一个表占2个字,高地址存放段地址,低地址存放偏移地址。

12.4  中断过程

  从上面中,我们了解到,可以用中断类型码,在中断向量表中找到中断处理程序的入口。找到这个入口地址的最终目的是用它设置CS和IP ,使CPU中执行中断处理程序。用中断类型码找到中断向量,并用它设置CS和IP,这个工作是由CPU的硬件自动完成的。CPU硬件完成这个工作的过程称为中断过程。

  CPU收到中断信息后,要对终端信息进行处理,首先将引发中断过程。硬件在完成中断过程后,CS:IP将指向中断程序的入口,CPU开始执行中断处理程序。

12.5  中断处理程序和iret指令

  由于CPU随时都可能检测到中断信息,也就是说CPU随时都可能·执行中断程序,所以中断处理程序必须一直存储在内存某段空间之内。而中断处理程序的入口地址,即中断向量,必须存储在对应的中断向量表项中。

  中断处理程序的编写方法和子程序的比较类似:

  保存用到的寄存器,

  处理中断

  恢复用到的寄存器

  用iret指令返回

以上是关于第12章 内中断的主要内容,如果未能解决你的问题,请参考以下文章

第19章 SVC中断方式调用用户函数

第1章 异常与中断的概念及处理流程

第16章 STM32中断应用概览

第13章 int指令

第13章 int指令

第4章STM32F407VG-中断