《中断调用和输入输出程序设计概要课件.ppt》由会员分享,可在线阅读,更多相关《中断调用和输入输出程序设计概要课件.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 6 章2/16/20231第六章 中断和输入输出程序设计 本章重点:本章主要讲述中断类型、向量表、优先级、处理过程、中断程序设计以及BIOS/DOS中断调用。6.1 中断概念 本节重点:本节对中断中涉及到的基本概念进行介绍,包括中断的分类,中断向量表的作用,中断是如何处理的和各中断的优先级等。6.1.1 中断与中断源1、中断:当一种特殊事件发生时,CPU停止正在运行的程序,而转去执行该事件的处理程序,处理完该事件后,再返回原程序继续正确地执行下去,这个过程就称为中断。2、中断源:引起中断的事件。2/16/20232非屏蔽中断请求中断逻辑INT n指令INT0指令除法错误单步TF=1 IR0
2、8259A IR1可编程 IR2 中断 IR3控制器 IR4 (PIC)IR5 IR6 IR7INTRNMICPUn410系统定时器键盘彩色/图形接口保留(通信)串行通信接口保留(ALT打印机)软盘保留(打印机)图6.1 8086/8088中断源08090A0B0C0D0E0F 8086/8088的中断源如图8.1所示。80286以后使用两片8259级连结构,可管理15级中断。2/16/202336.1.2 中断分类 8086/8088的中断可分为两类;外部中断和内部中断。1.外部中断外部中断又称为硬中断。它来自处理机的外部条件,如I/O设备或其他处理机等,以完全随机的方式中断现行程序而转向中
3、断处理程序。外部中断分为:非屏蔽中断NMI和可屏蔽中断INTR。NMI中断:直接连在CPU上,CPU不能禁止NMI线上的中断请求,即如果系统中发生了非屏蔽中断,CPU必须做出响应。所以NMI中断主要用于一些紧急的故障处理,如电源掉电等。INTR中断:用于外部设备的中断请求,这些外设通过8259A可编程控制器与CPU相连。如:硬盘、键盘、显示器、打印机等。2/16/20234 可屏蔽中断被CPU响应的两个条件:一是该外设的中断请求是否被屏蔽。二是CPU是否允许响应中断。这两个条件分别由8259A中的中断屏蔽寄存器(IMR)和标志寄存器(PSW)中的中断允许位IF控制。在外部的中断请求未被屏蔽的情
4、况下,CPU是否响应中断与标志寄存器中的IF位有关。若IF=0,CPU禁止响应任何外设的中断,若IF=1,CPU则响应外设的中断。可用指令STI和CLI来设置或清除IF位。2.内部中断 内部中断又称为软件中断,它通常有三种情况引起:(1)由中断指令INT引起的中断。(2)处理CPU某些错误的中断 (3)调试程序(DEBUG)设置的中断 2/16/202356.1.3中断向量表每个中断源都对应着一个中断处理程序,中断处理程序的起始地址称为中断入口地址,系统将各种中断处理程序的入口地址放在一起形成一个地址表,称为中断向量表。如图8.3。表中每四个单元的内容构成一个中断处理程序的入口地址(中断向量)
5、,其中前两个单元存放中断处理程序的偏移地址IP的值,后两个单元存放中断处理程序的段地址CS值。系统共可处理256种不同的中断。每种中断对应着一个编号,称为中断类型号,其编号范围为00FFH。硬中断的类型号由硬件产生,其他中断的类型号由软件中断指令INT n中的操作数n指出,根据中断类型号可以很容易的得到中断向量。8086/8088的中断向量表的起始地址位于内存绝对地址00000H到003FFH处,故每个中断向量的地址可由中断类型号乘以4计算出来。即:中断向量地址=中断类型号*4 2/16/202366.1.4中断过程中断发生时,硬件自动完成的动作如下:(1)取中断类型号n(2)标志寄存器(PS
6、W)内容压栈(3)当前代码段寄存器(CS)内容压栈(4)当前指令指针(IP)内容压栈(5)禁止外部中断和单步中断(置IF=0,TF=0)(6)从中断向量表中取4n地址的内容送IP,取4n2地址中内容送CS(7)转中断处理程序中断处理程序返回时使用IRET指令。2/16/202376.1.5中断优先级 1.中断优先级当系统中有多个中断源同时向CPU请求中断时,CPU应如何处理呢?8086Pentium微处理机为各中断类型规定了一个中断优先级次序。当多个中断源同时申请中断时,CPU按优先级从高到低的次序依次处理各中断源的请求。优先级从高到低的次序为:优先级高 非屏蔽中断(NMI)内部中断 可屏蔽中
7、断(INTR)优先级低 单步中断可屏蔽中断的优先级又分为八级,在正常的优先级方式下,优先级次序是:IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7 2/16/202382.中断嵌套正在运行的中断处理程序,又被其他中断源中断,这种情况叫做中断嵌套。8086Pentium没有规定中断嵌套的层数,但在实际使用时,多层中断嵌套要受到堆栈容量的限制。6.1.6中断指令 外中断是由外设发出中断信号引起的,没有中断指令。1.软中断指令INT指令格式:INT n 指令功能:转到相应中断处理程序执行,n为中断类型号。在转移过程中,系统首先会保护现场,将CS和IP内容压栈后从中断向量表相应单元取出中
8、断向量,送入CS和IP,完成转移。2/16/202392.中断返回指令IRET指令格式:IRET指令功能:从中断服务程序返回主程序。主要是恢复中断前的CS和IP的内容。本节小结:本节对中断的来源和处理进行了简要介绍,通过本节的学习应该对中断的处理有一个整体的认识。2/16/2023106.2中断处理程序设计 本节重点:本节着重讲述了如何利用中断向量表中保留的中断类型号编写自己所需的中断处理程序。6.2.1中断处理程序的编写CPU响应中断后,自动根据中断类型取中断向量,并转入中断处理程序。具体的工作由中断处理程序完成,外中断和软中断程序设计不尽相同。2/16/2023111.外中断处理程序外设中
9、断是随机发生的,在中断处理程序设计时必须考虑这一点。外中断处理程序的 主要步骤如下:(1)保护现场。主要指各通用寄存器内容和除CS外代码段寄存器的内容。保护方法一般是压栈。(2)尽快完成中断处理,以免影响其他外设中断请求。(3)恢复现场。(4)中断返回。用IRET指令返回。2/16/2023122.软中断处理程序 软中断处理程序的步骤如下:(1)考虑切换堆栈。(2)及时开中断。(3)应该保护现场。(4)完成中断处理。(5)恢复现场。(6)堆栈切换。(7)一般利用IRET指令实现中断返回。2/16/2023136.2.2设置和获取中断向量在系统程序或应用程序由于某种需要而提供新的中断处理程序时,
10、就要设置对应的中断向量,使其指向新的中断处理程序。1.设置中断向量 设置中断向量一般有两种方法:直接写入法和使用DOS调用法。方法1:直接写入法 用MOV指令将中断向量直接写入中断向量表,下面是一个直接写入法的例子。例 使用直接写入法设置中断向量。CLI MOV WORD PTRBX,OFFSET INTHAND MOV WORD PTRBX+2,SEG INTHAND STIMOV AX,0MOV DS,AXMOV BX,n*42/16/202314方法2:使用DOS功能调用法 使用25H号DOS功能调用可以设置中断向量,出口参数如下:预置:AH=25H AL=中断类型号 DSDX=中断向量
11、执行:INT 21H功能:将指定的中断向量写入中断向量表。例 使用DOS功能调用设置中断向量。INTHAND:MOV AX,SEG INTHAND MOV DS,AXMOV DX,OFFSET INTHAND MOV AH,25H MOV AL,n INT 21H 2/16/2023152.获取中断向量获取中断向量也有两种常用方法:直接读取法和使用DOS功能调用法。方法1:直接读取法 利用MOV指令直接读取中断向量。例 利用直接读取法读取n号中断向量,并保存在双字变量OLDVECTOR中:XOR AX,AX MOV ES,AX MOV AX,ESn*4 MOV WORD PTR OLDVECT
12、OR,AX MOV AX,ESn*4+2 MOV WORD PTR OLDVECTOR+2,AX 2/16/202316 方法2:使用DOS功能调用法 利用35H号 DOS功能调用可以取得指定中断号的中断向量,其出入口参数如下:预置:AL=中断类型号执行:INT 21H功能:读取指定中断的中断向量,其中:ES=中断处理程序的段地址 BX=中断处理程序的偏移地址 例7-4 使用DOS功能调用取得n号中断的中断向量 MOV AH,35H MOV AL,n INT 21H MOV WORD PTR OLDVECTOR,ES MOV WORD PTR OLDVECTOR,BX2/16/2023176.
13、3 BIOS中断调用本节重点:理解BIOS在计算机中的地位,会应用BIOS中断调用。6.3.1 BIOS概述BIOS(Basic Input/Output Systerm)是 固 化 在ROM中的程序,包含了主要I/O设备的处理程序和许多常用例行程序,它们一般以中断处理程序的形式存在。BIOS程序直接建立在硬件基础上,磁盘操作系统(DOS)建立在BIOS基础上。通常应用程序可以调用DOS提供的系统功能完成输入输出或其他操作,这样做用户可以少考虑硬件,实现起来容易。2/16/202318BIOS中断程序处于DOS功能调用和硬件环境之间,和DOS功能调用相比其优点是效率高,缺点是编程相对复杂;和直
14、接对硬件编程相比,优点是实现相对容易,缺点是效率相对低。6.3.2 BIOS 中断调用方法 1.BIOS中断调用方法 BIOS调用方法很简单,基本步骤为:置入口参数 使用中断语句INT n,其中n为中断号。例如:MOV AH,0 INT 1AH 2/16/2023191.例:例:BIOS键盘中断键盘中断 (INT 16H)AH 功能功能 返回参数返回参数 0 从键盘读一字符从键盘读一字符 AL=字符码,字符码,AH=扫描码扫描码 1 读键盘缓冲区的字符读键盘缓冲区的字符 如如ZF=0,AL=字符码,字符码,AH=扫描码扫描码 如如ZF=1,缓冲区空缓冲区空 2 取键盘状态字节取键盘状态字节 A
15、L=键盘状态字节键盘状态字节 字符数字键字符数字键 字符码为字符码为ASCII 码码 功能键、控制键功能键、控制键 字符码为字符码为0对应一个扫描码对应一个扫描码本节小结:概括的介绍了BIOS及其中断调用方法,要求掌握BIOS中断的使用。2/16/2023206.4 DOS功能调用本节重点:DOS基本I/O功能调用。6.4.1 DOS功能调用概述1.什么是DOS 功能调用 DOS系统内包含了许多涉及设备驱动和文件管理等方面的子程序,DOS的各种命令就是通过适当地调用这些子程序实现的。为了方便程序员使用,把这些子程序编写成相对独立的程序模块而且编上号。这些编了号的可由程序员调用的子程序就称为DO
16、S的功能调用或称为系统调用。DOS功能调用主要包括三方面的子程序:设备驱动(基本I/O)、文件管理和其他(包括内存管理、置取时间、置取终端向量、终止程序等)。2/16/202321.调用方法可按如下方法调用DOS功能调用:(1)设置入口参数。有部分功能调用是不需要入口参数的,但大部分功能调用需要入口参数,在调用前应按要求准备好入口参数。(2)功能调用号送寄存器。(3)发软中断指令“INT 21H”。2/16/2023226.4.2 基本I/O功能调用 1.带回显键盘输入(1号功能调用)功 能:从标准输入设备上读入一字符,并将该字符回显在标准输出设备上。通常情况下,标准输入设备就是键盘,标准输出
17、设备就是显示器。如果键盘无字符可读,则一直等待到有字符可读(即按键)。入口参数:无。出口参数:AL=读到字符的ASCII码。2/16/2023232.显示输出(2号功能调用)功 能:向标准输出设备写一字符。通常情况下,标准输出设备就是屏幕。入口参数:DL=要输出字符的ASCII码。出口参数:无。3.显示字符串(9号功能调用)功 能:在标准输出上显示一个字符串。通常情况下,标准输出就是屏幕。入口参数:DS:DX=需要输出字符串的首地址,字符串以字符$为结束标志。出口参数:无。2/16/2023244.输入字符串(0AH号功能调用)功 能:从标准输入上读一个字符串。通常情况下,标准输入就是键盘。入口参数:DS:DX=输入缓冲区首地址。出口参数:接收到的输入字符串在缓冲区中。本节小结:本节简要介绍了DOS功能介绍和基本I/O功能调用,要求掌握这些基本功能调用。2/16/202325 本章小结:本章先对中断进行了简要介绍,包括中断的类型、处理过程、优先级和中断向量表等。然后,介绍了中断程序设计和中断向量的设置和获得。最后,具体讲述了DIOS和DOS中断功能调用。本章重点要熟悉中断的处理过程,在此基础上能编写自己的中断程序并设置中断向量,能熟练使用BIOS和DOS中断功能调用。2/16/202326
限制150内