ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

汇编语言程序设计(十二)内中断

2022-05-28 21:03:07  阅读:195  来源: 互联网

标签:中断过程 中断向量 汇编语言 十二 中断 地址 处理程序 程序设计 CPU


目录

中断定义与分类

  • 中断是CPU处理外部突发事件的一个重要技术,使得CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回端点,继续CPU原来的工作。

  • 发出中断请求的来源叫中断源,根据中断源的不同,可将中断分为硬件中断和软件中断两大类,硬件中断又可以分为外部中断和内部中断两类(这里有待商榷,硬件中断是否是外部中断和内部中断的并集)。

  • 外部中断是由计算机外设发出的中断请求,比如键盘中断、打印机中断、定时器中断等。外部中断可以屏蔽,比如利用中断控制器来屏蔽这些外部设备的中断请求。

  • 内部中断是指因硬件出错(如突然掉电、奇偶校验错),或运算出错(除数为零、运算溢出、单步中断等)所引起的中断,内部中断是不能屏蔽的

  • 软件中断不是真正的中断,他们是一些可调用程序以及DOS的系统功能调用等。

  • CPU规定了中断的优先权,中段优先权从高到低的顺序是:(1)除法错、溢出中断、软件中断(2)不可屏蔽中断(3)可屏蔽中断(4)单步中断

中断处理程序

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

  • 中断信息中包含表示中断源的类型码,中断类型码的作用就是用来定位中断处理程序。比如中断类型码为4,那么CPU如果根据这个类型码来找到4号中断的处理程序呢?

  • 要定位中断处理程序,需要知道该程序在内存中的段地址和偏移地址,但是一个8位的中断类型码肯定是无法同时包含段地址和偏移地址的,因此,需要引入中断向量表。

  • 中断向量表中每个元素都是一个中断处理程序的入口地址,而中断类型码本质上就是中断向量表的索引,用该索引来定位中断处理程序。

  • 因此,中断向量表必须常驻内存。如下图所示,之所以有256个中断源是因为段地址和偏移地址都是16位的,因此一定可以索引16*16=256个中断源。

  • 对于8086CPU来说,中断向量表指定放在内存地址0处,从内部0000:0000到0000:03FF的1024个字节中存放着中断向量表,为什么是1024个字节呢,因为前边说了中断向量表一共包含256个段地址:偏移地址,段地址和偏移地址各占两个字节,因此一共4个字节,4*256=1024。

  • 但是需要注意的是0:200到0:300这块内存是没有用上的,即这一段并没有存放中断处理程序的地址,所以这块内存比较安全,可以胡搞一下试试。

  • 由于CPU随时都可能检测到中断信息,即cpu随时都可能执行中断处理程序,所以中断处理程序必须一致存储再内存某段空间中。

  • 中断处理程序的入口地址即中断向量,必须存储在对应的中断向量表中。

  • 中断处理程序的常规步骤如下:

  • 中断过程中,寄存器入栈顺序是标志寄存器、CS、IP,iret指令出栈顺序是IP、CS、标志寄存器。

  • iret指令执行后,CPU回到执行中断处理程序的执行点继续执行原程序。

中断过程

  • 利用中断类型码,在中断向量表中找到中断处理程序的入口
  • 用该入口地址来设置CS和IP,使CPU执行中断处理程序
  • 上述用中断类型码找到中断向量,并用它设置CS和IP,这个工作由CPU硬件自动完成,CPU硬件完成这个工作的过程称为中断过程。

8086CPU中断过程

  • 从中断信息中取得中断类型码
  • 标志寄存器的值入栈,保护标志位,因为中断处理程序可能改变标志位
  • 设置标志寄存器的第8位TF和第9位IF的值为0
  • CS的内容入栈
  • IP的内容入栈
  • 从中断向量表起始地址处,找中断类型码4和中断类型码4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS。

0号中断,除法错误中断处理

单步中断

  • 即CPU在执行了一条指令后就转去做其它事情的功能,CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程。单步中断的中断类型码为1,其中断过程如下:
  • 即当TF=1时,CPU在执行完一条指令后将引发单步中断,转去执行中断处理程序,执行完中断处理程序后,又返回原来的位置继续执行。
  • CPU提供单步中断,就是为了单步调试,,,

不响应中断的情况

  • 一般情况下cpu执行过程中检测到中断都要去执行中断处理执行,但也有很多情况是不响应中断的。例如,刚执行完向ss寄存器传送数据的指令后,即使检测到中断信号,CPU也不会响应。

  • 因为ss:sp联合使用是指向栈顶的,因此设置ss和sp的指令应该连续完成。否则会出现错误。

  • 比如,执行完设置ss的指令后,CPU响应了中断,引发中断过程,要在栈中压入标志寄存器、CS和IP的值。此时ss已经被设置了,但是sp并未设置,ss:sp指向的不是正确的栈顶,如果在中断处理程序中用到了栈中内容,则此时会引发错误。

  • 因此,设置ss和sp的指令要连续放,在此之间不会响应中断过程。比如下边的例子,如果设置ss和设置sp的指令之间有其它执行,中间的指令即使出现了错误cpu也不会响应中断。因此一定要将设置ss和sp的指令连续放。

标签:中断过程,中断向量,汇编语言,十二,中断,地址,处理程序,程序设计,CPU
来源: https://www.cnblogs.com/chkplusplus/p/16315137.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有