⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapter8.htm

📁 我们学校教授的课件 很好的学习助手啊 里面讲的很详细 汉好
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>第八章 中断</title>
</head>

<body bgcolor="#4B5983" text="#FFFFFF">

<h1 align="center"><font face="宋体" color="#FFFFFF" size="7">第八章&nbsp; 中断</font></h1>

<h2 align="center"><font face="宋体" color="#FFFFFF" size="6">§8.1 概述</font></h2>

<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">一、中断</font></h3>

<blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFF00">中断</font><font
  face="宋体" size="5" color="#FFFFFF">:是一种使CPU终止当前正在执行的程序而转去处理特殊事件的操作,并且,每一种特殊操作都对应了一个专门的类型号。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  为解决快速的CPU与慢速的外设之间的矛盾,一方面要提高外设的工作速度,另一个解决的方法就是采用中断的处理方式。</font></p>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">1、采用中断处理方式的优点</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  采用中断处理方式,可以实现如下的功能:</font></p>
  <blockquote>
    <blockquote>
      <p align="left"><font face="宋体" size="5" color="#FFFF00">同步操作</font><font
      face="宋体" size="5" color="#FFFFFF">:外设将数据准备好后,发出中断请求,CPU勿需等待,提高了CPU的利用率,也提高了输入输出的速度。</font></p>
      <p align="left"><font face="宋体" size="5" color="#00FF00">实时处理</font><font
      face="宋体" size="5" color="#FFFFFF">:现场的各个参数、信息可以在任何时候发出中断请求,要求CPU处理。</font></p>
      <p align="left"><font face="宋体" size="5" color="#00FFFF">故障处理</font><font
      face="宋体" size="5" color="#FFFFFF">:计算机可以利用中断系统对故障进行自行处理。</font></p>
    </blockquote>
  </blockquote>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">2、中断系统应该具有的功能</font></h4>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)实现中断及返回;</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)能够实现优先级排队;</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">3)高级中断源能够中断低级的中断处理。</font></p>
  </blockquote>
</blockquote>

<p align="left"><font face="宋体" size="5" color="#FFFFFF">二、8086/8088的中断分类</font></p>

<blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 8086/8088系统一共可以处理256种(级)中断,每一种中断对应一个类型码,0 
  ~255(0~0FFH),该类型码称为中断类型码/中断类型号。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  总体上可以分为硬件中断和软件中断两类。</font></p>
  <h4 align="left"><font face="宋体" size="5" color="#FFFF00">1、硬件中断</font><font
  face="宋体" size="5" color="#FFFFFF">:</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 是指由CPU外部的硬件电路产生的中断,也称为外部中断。分为如下两类:</font></p>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)可屏蔽中断:由CPU的INTR引脚进入CPU,受IF标志的控制。可以允许有多个此种类型的中断。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)不可屏蔽中断/非屏蔽中断:由CPU的NMI引脚进入CPU,不受IF标志的控制。一个系统只允许有一个此种类型的中断。</font></p>
  </blockquote>
  <h4 align="left"><font face="宋体" size="5" color="#FFFF00">2、软件中断</font><font
  face="宋体" size="5" color="#FFFFFF">:</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; CPU根据软件中的指令或者执行指令之后的标志位的状态而产生的中断,该种中断不需要有外部电路,是在CPU内部产生的,也称为内部中断。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">例如:</font></p>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV&nbsp; AH,02</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV&nbsp; DL,‘A’</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">INT&nbsp; 21H</font></p>
  </blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">目前,系统中断类型号的大致分配如下:</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)专用中断:类型号0~4</font></p>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">类型号0---除数为0,或者商超过了范围。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">类型号1---单步中断。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">类型号2---非屏蔽中断NMI。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">类型号3---断点中断,INT 
    &nbsp; 3。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">类型号4---溢出中断,INTO。</font></p>
  </blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)保留的中断:类型号5~31</font></p>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">提供给系统使用,用户一般不自行定义。</font></p>
  </blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">3)供用户定义的中断:类型号32~255</font></p>
  <p align="left"> </p>
  <p align="left"><font face="宋体" size="5" color="#FFFF00">注:到Intel 386以后,称某些软件中断为“异常”。</font></p>
</blockquote>

<p align="left"> </p>

<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">三、中断向量和中断向量表</font></h3>

<blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFF00">1、中断向量</font><font
  face="宋体" size="5" color="#FFFFFF">:中断处理子程序的入口地址。每一个中断类型都要对应一个中断向量。每一个中断向量包括段地址和偏移地址,是一个4个字节的信息。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFF00">2、中断向量表</font><font
  face="宋体" size="5" color="#FFFFFF">:位于内存0段的0~03FFH区域内能够容纳256个中断向量的存储空间。</font></p>
  <p align="center"><font face="宋体" size="5" color="#FFFFFF">256*4=1024=0400H</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  一个中断向量占用4个字节存储单元,地址较低的两个字节存储中断处理子程序的入口地址的偏移地址(IP),地址较高的两个字节存储中断处理子程序的入口地址的段地址(CS)。在中断向量表中,从地址最低处[0:0000H]开始,相继地存放中断类型号为0~255的中断向量。即中断类型号为N的中断向量在中断向量表中的地址为[0:4*N]。</font></p>
</blockquote>

<p align="center"><img src="zhdxl.gif" width="468" height="471"
alt="zhdxl.gif (7347 bytes)"></p>

<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">四、中断指令</font></h3>

<blockquote>
  <h4 align="left"><font face="宋体" color="#FFFFFF"><big><big>1、中断调用---INT</big></big></font></h4>
  <p align="left"><font face="宋体" color="#FFFFFF"><big><big>格式:INT&nbsp; type</big></big></font></p>
  <p align="left"><font face="宋体" color="#FFFFFF"><big><big>操作:(SP)←(SP)-2</big></big></font></p>
  <blockquote>
    <blockquote>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>((SP))←(PSW)</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(SP)←(SP)-2</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>((SP))←(CS)</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(SP)←(SP)-2</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>((SP))←(IP)</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(IP)←(4*type)</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(CS)←(4*type+2)</big></big></font></p>
    </blockquote>
  </blockquote>
  <p align="left"><font face="宋体" color="#FFFFFF"><big><big>&nbsp;&nbsp;&nbsp; 
  若指令中未指定中断类型号,则默认的中断类型号为3,即断点中断。</big></big></font></p>
  <h4 align="left"><font face="宋体" color="#FFFFFF"><big><big>2、若溢出则中断---INTO</big></big></font></h4>
  <p align="left"><font face="宋体" color="#FFFFFF"><big><big>格式:INTO</big></big></font></p>
  <p align="left"><font face="宋体" color="#FFFFFF"><big><big>操作:</big></big></font></p>
  <blockquote>
    <blockquote>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(SP)←(SP)-2</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>((SP))←(PSW)</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(SP)←(SP)-2</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>((SP))←(CS)</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(SP)←(SP)-2</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>((SP))←(IP)</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(IP)←(0:10H);类型号为4</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(CS)←(0:12H)</big></big></font></p>
    </blockquote>
  </blockquote>
  <h4 align="left"><font face="宋体" color="#FFFFFF"><big><big>3、中断返回---IRET</big></big></font></h4>
  <p align="left"><font face="宋体" color="#FFFFFF"><big><big>格式:IRET</big></big></font></p>
  <p align="left"><font face="宋体" color="#FFFFFF"><big><big>操作:(IP)←((SP))</big></big></font></p>
  <blockquote>
    <blockquote>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(SP)←(SP)+2</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(CS)←((SP))</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(SP)←(SP)+2</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(PSW)←((SP))</big></big></font></p>
      <p align="left"><font face="宋体" color="#FFFFFF"><big><big>(SP)←(SP)+2</big></big></font></p>
    </blockquote>
  </blockquote>
</blockquote>

<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">五、中断向量的保存和恢复</font></h3>

<blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  在对中断的操作过程中,进入中断处理子程序(中断执行)之前,必须保存原来的中断向量,从中断处理子程序返回后(IRET),必须将保存的原中断向量恢复到中断向量表中。</font></p>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">1、对中断向量表的直接读写</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">例如:</font></p>
</blockquote>

<blockquote>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">CODE1 SEGMENT</font></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -