Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32834
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-24 10:07
个人简介

追求嵌入式技术

文章分类
文章存档

2015年(12)

我的朋友

分类: 嵌入式

2015-02-01 20:33:49

此博文是 王爽 编著的《汇编语言》一书第一版第12章内中断的重点记录    
一:基本介绍
    任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种特殊的信息,我们可以称其为:中断信息。中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息。
    注意,我们这里所说的中断信息,是为了便于理解而采用的一种逻辑上的说法。它是对几个具有先后顺序的硬件操作所产生的时间的统一描述。“中断信息”是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息。
    中断信息可以来自CPU的内部和外部,此处主要讨论来自于CPU内部的中断信息。
二:内中断的产生
    对于8086CPU,当CPU内部有下面的情况发生的时候,将产生相应的中断信息:
    1、除法错误,比如:执行div指令产生的除法溢出——对应中断类型码 0
    2、单步执行——对应中断类型码 1
    3、执行int0指令——对应中断类型码 4
    4、执行int n指令——对应中断类型码 n 
    8086CPU用称为中断类型码的数据来标识中断信息的来源
三:中断处理程序
    用来处理中断信息的程序被称为 中断处理程序 。
四:中断向量表
    中断向量表就是中断处理程序入口地址的列表。它保存在内存中,其中存放着256个中断源所对应的中断处理程序的入口。
    CPU只要知道了中断类型码,就可以将中断类型码作为中断向量表的表项号,定位相应的表项,从而得到中断处理程序的入口地址。
    对于8086PC机,中断向量表指定放在内存地址 0 处。从内存0000:0000到0000:03E8的1000个单元中存放着中断向量表。
    中断向量表中,一个表项占2个字,高地址存放段地址,低地址存放偏移地址。
五:中断过程
    下面是8086CPU在收到中断信息后,所引发的中断过程:
    1、(从中断信息中)取得中断类型码
    2、标志寄存器的值入栈;(因为在中断过程中要改变标志寄存器的值,所以先将其保存在栈中。)
    3、设置标志寄存器的第8位TF和第9位的IF的值为0;
    4、CS的内容入栈
    5、IP的内容入栈
    6、从内存地址为 中断类型码*4 和中断类型码*4 +2 的两个字单元中读取中断处理程序的入口地址设置IP和CS
    CPU在收到中断信息后之后,如果处理该中断信息,就完成一个由硬件自动执行的中断过程(程序员无法改变这个过程中所要做的工作)。中断过程的主要任务就是用中断类型码在中断向量表中找到中断处理程序的入口地址,设置CS和IP。因为中断处理程序执行完成后,CPU还要回过头来继续执行被中断的程序,所以在设置CS、IP之前,先将它们的值保存起来。可以看到CPU将它们保存在栈中。我们注意到,在中断过程中还要做的一个工作就是设置标志寄存器的TF、IF位,对于这样做的目的,我们将在后面的内容进行讲解。因为在执行完中断处理程序后,需要恢复在进入中断处理程序之前的CPU现场(某一时刻,CPU中各个寄存器的值)。所以应该在修改标记寄存器之前,将它的值入栈保存。
六:中断处理程序
    由于CPU随时都可能检测到中断信息,也就是说,CPU随时都可能执行中断处理程序,所以中断处理程序必须一直存储在内存某段空间之中。而中断处理程序的入口地址,即中断向量,必须储存在对应的中断向量表表项中。
    中断处理程序的编写方法和子程序的比较相似,下面是常规的步骤:
    1、保存用到的寄存器
    2、处理中断
    3、恢复用到的寄存器
    4、用iret指令返回
    iret指令的功能用汇编语法描述为:
        pop IP
        pop CS
        popf
    iret通常和硬件自动完成的中断过程配合使用。可以看到,在中断过程中,寄存器入栈的顺序是标志寄存器、CS、IP,而iret的出栈顺序是IP、CS、标志寄存器,刚好和其相对应,实现了用执行中断处理程序前的CPU现场恢复标志寄存器和CS、IP的工作。iret指令执行后,CPU回到执行中断处理程序前的执行点继续执行程序。








   
    
阅读(1351) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~