1、第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计第八章第八章 输入与输出程序设计输入与输出程序设计第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计第一节:第一节:IO设备的数据传送方式设备的数据传送方式 输入输出设备都通过一个硬件接口或控制器和输入输出设备都通过一个硬件接口或控制器和CPU相连。例如软磁盘通过软盘控相连。例如软磁盘通过软盘控制器和制器和CPU连接起来;终端显示器通过数据接口和连接起来;终端显示器通过数据接口和CPU连接起来。这些接口和控
2、制器连接起来。这些接口和控制器都能支持输入输出都能支持输入输出IN、OUT与外部设备交换信息。这些信息与外部设备交换信息。这些信息包括控制、状态和数据包括控制、状态和数据三三种不同性质的信息,它们必须按不同的端口地址分别传送。种不同性质的信息,它们必须按不同的端口地址分别传送。控制信息输出到控制信息输出到IO接口接口:告诉接口和设备要做什么工作告诉接口和设备要做什么工作 状态信息状态信息 的读取:的读取:表示表示I/O设备当前的状态设备当前的状态 数据信息的传输数据信息的传输:是是IO设备和设备和CPU真正要交换的信息。真正要交换的信息。常用的输入输出方式常用的输入输出方式:1、查询输入输出;
3、、查询输入输出;2、中断输入输出、中断输入输出;3、DMA方式方式 DMA方式:方式:也称为成组数据传送方式。主要适用于也称为成组数据传送方式。主要适用于些高速的些高速的IO设备,如设备,如磁带、磁盘、模数转换器等设备。磁带、磁盘、模数转换器等设备。DMADMA方式能使方式能使I IO O设备直接和存储器进行成设备直接和存储器进行成批数据的快速传送。每个字节一到达端口,就直接从接口送到存储器,同样,批数据的快速传送。每个字节一到达端口,就直接从接口送到存储器,同样,接口和它的接口和它的DMADMA控制器也能直接从存储器取出字节并把它送到控制器也能直接从存储器取出字节并把它送到I IO O设备中
4、去。设备中去。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计第二节:第二节:程序直接控制程序直接控制IO方式方式 IO端口的地址编码:端口的地址编码:计算机的外部设备和大容量存储设备都是通过接口连接计算机的外部设备和大容量存储设备都是通过接口连接到系统上,每个端口由一组寄存器组成,这些寄存器都分配有一个地址编码,到系统上,每个端口由一组寄存器组成,这些寄存器都分配有一个地址编码,该编码称为该编码称为I IO O端口的地址编码端口的地址编码。计算机的计算机的CPU和内存就是通过这些端
5、口和和内存就是通过这些端口和外部设备进行通讯的。外部设备进行通讯的。IO接口中有用作数据缓接口中有用作数据缓冲的冲的数据寄存器数据寄存器,有用做,有用做保存设备和接口的状态信保存设备和接口的状态信息,供息,供CPU对外设进行测对外设进行测试的试的状态寄存器状态寄存器;还有用;还有用来保存来保存CPU发出的命令以发出的命令以控制接口和设备的操作的控制接口和设备的操作的命令寄存器命令寄存器。它们都分配。它们都分配有各自的端口号,有各自的端口号,CPU就就是通过不同的端口号来选是通过不同的端口号来选择外部设备的择外部设备的 第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序
6、设计端口数量:端口数量:在在IBM PC中,中,1 1M M空间的低空间的低1616位地址线有效,因此这个位地址线有效,因此这个I/O空间允许设置空间允许设置6 64K(65536)个个8位端口或位端口或32K(32768)个个16位端口位端口。PC机的部分端口地址机的部分端口地址(16进制进制)第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计一、I/O指令指令 PC机的机的IO指令指令IN和和OUT,这两条指令既可以传送字节也可以传送字,并这两条指令既可以传送字节也可以传送字,并且都有直接端口寻址和间接端口寻址两种方式。且都有直接端口寻址和间接端口寻址两种方式
7、。如下所示:如下所示:直接端口寻址方式直接端口寻址方式:端口地址端口地址PORT是一个是一个8位的立即数,其范围是位的立即数,其范围是0一一255。间接寻址方式间接寻址方式 :端口地址在端口地址在DX中,其范围为中,其范围为0一一65535。另外要注意的是,另外要注意的是,I/O指令中使用的寄存器必须是指令中使用的寄存器必须是AL或或AX。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计用用IN指令可以从一个数据寄存器输入数据或从状态寄存器输入接口和外没的状态。指令可以从一个数据寄存器输入数据或从状态寄存器输入接口和外没的状态。例如例如 下面两条指令能把一个字从
8、端口地址下面两条指令能把一个字从端口地址0028和和0029传送到存储器的传送到存储器的DATA_WORD单元中。单元中。例例 测试某状态寄存器测试某状态寄存器(端口地址为端口地址为27H)的第的第2位是否为位是否为1,若为,若为1,则转移到,则转移到ERROR进进行处理。行处理。OUT指令用来输出数据或给一个指定的指令用来输出数据或给一个指定的IO端口传送命令信息。端口传送命令信息。例例 某接口的命令寄存器某接口的命令寄存器(端口地址为端口地址为126H)的第的第7位控制成组数据传送位控制成组数据传送。注意:注意:DOS功能调用或功能调用或BIOS例行程序,例行程序,其例行程序本身也是用其例
9、行程序本身也是用IN和和OUT指令指令与外部设备进行数据交换的。与外部设备进行数据交换的。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计二、I/O直接数据传输举例直接数据传输举例例例 SOUND程序程序(发声程序(发声程序)基本原理:基本原理:程序通过程序通过IO指令使设备控制寄存器指令使设备控制寄存器(IO端口地址为端口地址为61H)的第的第1位交替为位交替为0和和l,而端口而端口6lH的第的第1位和扬声器的脉冲门相连,当第位和扬声器的脉冲门相连,当第1位由位由0变为变为1,延迟一会又由,延迟一会又由0变为变为1时,时,脉冲门就先打开后关闭,产生了一个脉冲电
10、流。这个脉冲电流被放大后送到扬声器使脉冲门就先打开后关闭,产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使之发出了声音。之发出了声音。61H端口的第端口的第0位和一个振荡器位和一个振荡器(2号定时器号定时器)相连,现在不用振荡器产生相连,现在不用振荡器产生声音,所以把第声音,所以把第0位置零。位置零。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计程序:soundprogram segment assume cs:soundprogram main proc far start:mov bx,0f350h mov dx,2300h in al,61h mov
11、 ah,al and al,11111100b;关断定时器通道关断定时器通道2的门控的门控sound:xor al,2;触发触发61H端口第端口第1位位 out 61h,al mov cx,dx;(dx)=控制脉宽的计数值控制脉宽的计数值wait1:loop wait1;延时循环延时循环 dec bx;(bx)=脉冲持续的时间脉冲持续的时间 jnz sound mov al,ah out 61h,al;恢复恢复61H端口端口 mov ax,4c00h int 21h main endp soundprogram ends end start第一章第一章 基础知识基础知识第八章第八章 输入与输出
12、程序设计输入与输出程序设计例例 COMM程序程序 基本原理基本原理 这是一个关于这是一个关于INS8250串行通讯口串行通讯口IO的例子。它的数据寄存器的端口地址是的例子。它的数据寄存器的端口地址是03F8H,状态寄存器的端口地址是状态寄存器的端口地址是03FDH。其中其中0位是输入数据准备位,位是输入数据准备位,5位是输出数据位是输出数据准备位。下列是串行口输入输出程序。准备位。下列是串行口输入输出程序。输出子过程:输出子过程:读取子过程:读取子过程:第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计以上CPU与外部设备交换信息的方式称为查询方式或等待方式。造成
13、CPU必须查询等待的主要原因是许多外设的工作速度比较低如磁盘、打印机等,它们通过按键或打印头的机械动作输入或输出一个数据,其速度是很慢的,而OUT执行指令的速度是它的几千倍乃至上万倍,所以则在接收或发送数据之前必须要了解外设的状态,看外设是否已经准备好。当外没还没有准备好以前,CPU就要等待,不能做别的操作。为了提高CPU的工作效率,我们可采用中断方式传送数据。关于中断,我们将在下一节中做详细介绍。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计第三节:中断传送方式第三节:中断传送方式 什么是中断什么是中断:中断是一种使中断是一种使CPU中止正在执行的程序而转去
14、处理特殊事件的操作。中止正在执行的程序而转去处理特殊事件的操作。什么是中断源什么是中断源:引起中断的事件引起中断的事件。中断的优点中断的优点:避免因反复查询外部设备的状态而浪费时问,从而提高了避免因反复查询外部设备的状态而浪费时问,从而提高了CPU的效率。的效率。外中断外中断:由外设控制器或协处理器(:由外设控制器或协处理器(8087/80287)引起的中断一般称为外中断)引起的中断一般称为外中断。内中断内中断:中断指令中断指令INT产生的中断,或由产生的中断,或由CPU的某些错误结果产生的中断称为内中断的某些错误结果产生的中断称为内中断 80868088的中断源如下图所示的中断源如下图所示:
15、第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计非屏蔽中断:非屏蔽中断:是为电源错、内存或是为电源错、内存或IO总线的奇偶错等异常事件的中断保留的。总线的奇偶错等异常事件的中断保留的。外部设备的中断外部设备的中断是通过是通过Inter 8259A可编程中断控制器可编程中断控制器(PIC)连到主机上。连到主机上。CPU通过一组通过一组IO端口控制端口控制8259A,而而8259A则则通过通过INTR管脚给管脚给CPU传送中断信号传送中断信号。这种外中断类型的分。这种外中断类型的分配由硬
16、件连线实现配由硬件连线实现 中断中断20H到到3FH用于调用用于调用DOS功能例行程序功能例行程序,其它中断号小于,其它中断号小于20H或大于或大于3FH的中断,的中断,用于调用用于调用IBM PC ROM BIOS或一些应用软件或一些应用软件 一、中断向量表中断向量表 我们给每种中断都安排一个中断我们给每种中断都安排一个中断类型号。类型号。IBM PC中断系统能处理中断系统能处理256种类型的中断,类型号为种类型的中断,类型号为00FFH。每种类型的中断都由相应的中断处理每种类型的中断都由相应的中断处理程序来处理,程序来处理,中断向量表中断向量表就是各中断就是各中断类型的处理程序的地址表。如
17、左图所类型的处理程序的地址表。如左图所示:示:第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计 存储器的低存储器的低1.5K字节,地址从字节,地址从0到到5FFH为系统占用,其中最低为系统占用,其中最低1K字节,地字节,地址从址从0到到3FFH存放中断向量。中断向量表中的存放中断向量。中断向量表中的256项中断向量对应项中断向量对应256种中断类种中断类型,每项占用四个字节,其中两个字节存放中断处理程序的段地址(型,每项占用四个字节,其中两个字节存放中断处理程序的段地址(16位),位),另两个字节存放偏移地址另两个字节存放偏移地址(16位位)。因为各处理程序的段
18、地址和偏移地址在中断。因为各处理程序的段地址和偏移地址在中断向量表中按中断类型号顺序存放,所以每类中断向量的地址可由中断类型乘以向量表中按中断类型号顺序存放,所以每类中断向量的地址可由中断类型乘以4计算出来。例如,报警中断的中断类型为计算出来。例如,报警中断的中断类型为4AH,它的中断向量地址为它的中断向量地址为4AH4128H,即即128H,129H两字节存放的是报警中断处理程序的偏移地址两字节存放的是报警中断处理程序的偏移地址12AH,l2BH两字节存放的是报警中断处理程序的段地址,取出段地址和偏移地址。两字节存放的是报警中断处理程序的段地址,取出段地址和偏移地址。CPU就可转入中断处理程
19、序。就可转入中断处理程序。中断操作的中断操作的5个步骤个步骤:(1)取中断类型号取中断类型号 (2)计算中断向量地址计算中断向量地址 (3)取中断向量,偏移地址送取中断向量,偏移地址送IP段地址送段地址送CS (4)转入中断处理程序转入中断处理程序 (5)中断返回到中断返回到INT指令的下一条指令指令的下一条指令第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计二、设量中断向量设量中断向量 下表列出了下表列出了IBM PC各类中断的地址分配:各类中断的地址分配:用户可以利用保留的中断类
20、型号扩充自己需要的中断功能,对新增加的用户可以利用保留的中断类型号扩充自己需要的中断功能,对新增加的中断功能要在中断向量表中建立相应的中断向量。中断功能要在中断向量表中建立相应的中断向量。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计指令来为中断类型指令来为中断类型N设置中断向量:设置中断向量:;段地址为段地址为0;设置偏移地址设置偏移地址;要设置的中断子过程;要设置的中断子过程;设置新中断向量(地址);设置新中断向量(地址)注意:如果新的中断功能只供自己使用,或用自己编写的中注意:如果新的中断功能只供自己使用,或用自己编写的中断处理程序代替系统中的中断处理功
21、能时,要注意保存原中断处理程序代替系统中的中断处理功能时,要注意保存原中断向量,在设置自己的中断向量时,应先保存原中断向量再断向量,在设置自己的中断向量时,应先保存原中断向量再设置新的中断向量,在程序结束之前恢复原中断向量。设置新的中断向量,在程序结束之前恢复原中断向量。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计 在实际编程过程中,在检查或设置任何中断向量时,总是避免直接使用中在实际编程过程中,在检查或设置任何中断向量时,总是避免直接使用中断向量的绝对地址,而是使用断向量的绝对地址,而是使用DOS功能调用功能调用(21H)存取中断向量。存取中断向量。第一章
22、第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计三、中断过程中断过程 当今断发生时,由硬件自动完成下列动作:当今断发生时,由硬件自动完成下列动作:1.取中断类型号取中断类型号N2.标志寄存器(标志寄存器(PSW)内容入栈内容入栈3.当前代码段寄存器当前代码段寄存器(cs)内容入栈内容入栈4.当前指令计数器当前指令计数器(IP)内容入栈内容入栈5.禁止外部中断和单步中断禁止外部中断和单步中断(IF0,TF0)6.从中断向量表中取从中断向量表中取4N的字节内容送的字节内容送IP,取取4N+2的字节内容送的字节内容送CS。转中断处理程序转中断处理程序 中断发生的过程很象我们
23、所熟悉的子程序调用,不同的是在保护中断现场时,除了中断发生的过程很象我们所熟悉的子程序调用,不同的是在保护中断现场时,除了保存返回地址保存返回地址CS:IP之外,还保存了标志寄存器之外,还保存了标志寄存器PSW的内容。因为标志寄存器记录了中的内容。因为标志寄存器记录了中断发生时,程序指令运行的结果特征。当断发生时,程序指令运行的结果特征。当CPU处理完中断请求返回原程序时,要保证原处理完中断请求返回原程序时,要保证原程序工作的连续性和正确性。所以中断发生时,程序工作的连续性和正确性。所以中断发生时,PSW的内容也要保存起来,另一个不同的内容也要保存起来,另一个不同点是,在中断发生时,点是,在中
24、断发生时,CPU还自动清除了还自动清除了IF位和位和TF位,这样设计的目的是使位,这样设计的目的是使CPU转入中转入中断处理程序后,不允许再产生新的中断,如果在执行中断处理程序的过程中,还允许外断处理程序后,不允许再产生新的中断,如果在执行中断处理程序的过程中,还允许外部的中断,可以通过部的中断,可以通过STI指令再把指令再把IF设置为设置为1。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计编写中断处理程序和编写子程序一样,所使用的汇编语言指令没有特殊限制,只是中编写中断处理程序和编写子程序一样,所使用的汇编语言指令没有特殊限制,只是中断处理程序返回时使用断处
25、理程序返回时使用IRET指令指令。这条指令的工作步骤相中断发生时的工作步骤正好。这条指令的工作步骤相中断发生时的工作步骤正好相反。它首先把相反。它首先把IP、CS和和PWS的内容出栈,然后返回到中断发生时紧接着的下一条指的内容出栈,然后返回到中断发生时紧接着的下一条指令。令。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计四、内部四、内部过程过程 第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计五、外五、外过程过程 外部中断主要有两种来源,一种外部中断主要有两种来源,一种是非屏蔽中断是非屏蔽中断(NMl),另一种是来自各种另一种是
26、来自各种外部设备的中断,由外部设备的请求引起的中断也称为外部设备的中断,由外部设备的请求引起的中断也称为可屏蔽中断可屏蔽中断。但是从外设发出中断请求到但是从外设发出中断请求到CPU响应中断,响应中断,有两个控制条件是起决定作用,有两个控制条件是起决定作用,一是该外设的中断请求是否屏蔽,一个是一是该外设的中断请求是否屏蔽,一个是CPU是否允许响应中断。是否允许响应中断。这两个条件这两个条件分别由分别由8259A的中断屏蔽寄存器(的中断屏蔽寄存器(IMR)和标志寄存器(和标志寄存器(PSW)中的中断允许中的中断允许位位IF控制。控制。中断屏蔽寄存器的中断屏蔽寄存器的IO端口地址是端口地址是21H,
27、它的它的8位对位对应控制应控制8个外部设备,如左图个外部设备,如左图所示所示:通过设置这个寄存器的某位通过设置这个寄存器的某位为为0或为或为1来允许或禁止某外来允许或禁止某外部设备的中断。部设备的中断。某位为某位为0表表示允许某种外设中断请求,示允许某种外设中断请求,某位为某位为1表示某种外设的中表示某种外设的中断请求被屏蔽断请求被屏蔽(禁止禁止)。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计例如,只允许键盘中断,可设置如下中断屏蔽字:例如,只允许键盘中断,可设置如下中断屏蔽字:如果系统中要新增设键盘中断,则可用下列指令实现:如果系统中要新增设键盘中断,则可
28、用下列指令实现:注意:注意:在编写中断程序时,应在主程序的初始化部分设置好中断屏蔽寄存器,以确定在编写中断程序时,应在主程序的初始化部分设置好中断屏蔽寄存器,以确定允许用中断方式工作的外部设备。外部设备向允许用中断方式工作的外部设备。外部设备向CPU发出中断请求,发出中断请求,CPU是否响应还与是否响应还与标志寄存器中的中断标志位标志寄存器中的中断标志位IF有关。有关。如果如果IF=0,CPU就禁止响应任何外设的中断就禁止响应任何外设的中断。如果如果IF1测允许测允许CPU响应外设的中断请求,有两条指令能设置或清除响应外设的中断请求,有两条指令能设置或清除IF位。位。允许允许CPU响应外设的中
29、断请求响应外设的中断请求(IF1)也叫做也叫做开中断开中断,反之叫做,反之叫做关中断关中断(1F0)。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计 当任何类型的中断发生时,当前的当任何类型的中断发生时,当前的PSW要保存入栈,然后清除要保存入栈,然后清除IF位进入中断处理程位进入中断处理程序。如果允许在一个中断处理程序的执行过程中发生外中断,则必须用一条序。如果允许在一个中断处理程序的执行过程中发生外中断,则必须用一条STI指令开中指令开中断。当执行到中断返回指令断。当执行到中断返回指令IRET,又取出又取出PSW先前的值,其中先前的值,其中IF为为1,CP
30、U将允许外中将允许外中断再次发生。断再次发生。有一种特殊的外部中断和有一种特殊的外部中断和IF标志位无关,这就是非屏蔽中断,非屏蔽中断的类型号标志位无关,这就是非屏蔽中断,非屏蔽中断的类型号为为2,CPU不能禁止非屏蔽中断,如果系统使用了这种类型的中断,那么不能禁止非屏蔽中断,如果系统使用了这种类型的中断,那么CPU总会响应的,总会响应的,所以非屏蔽中断主要用于一些紧急的故障处理,如电源掉电等。另外计算机内部的实时所以非屏蔽中断主要用于一些紧急的故障处理,如电源掉电等。另外计算机内部的实时钟希望能不停地计时,所以也可以把非屏蔽中断提供给实时钟。钟希望能不停地计时,所以也可以把非屏蔽中断提供给实
31、时钟。在一次外中断处理结束之前,还应给在一次外中断处理结束之前,还应给8259A可编程中断控制器的中断命令寄存器发出可编程中断控制器的中断命令寄存器发出中断结束命令中断结束命令(EOI)。中断命令寄存器的中断命令寄存器的IO端口地址为端口地址为20H,如下图所示。如下图所示。它的各控制位可动态地控制中断处理过程,其中它的各控制位可动态地控制中断处理过程,其中L2-L0三位指定三位指定IR0IR7中具有中具有最最低优先级低优先级的中断请求。的中断请求。6位和位和7位控制位控制IR 0一一IR 7的中断优先级的顺序。的中断优先级的顺序。5位位(EOI)是中断结是中断结束位。束位。当当EOI位为位为
32、1时当前正在处理的中断请求就被清除时当前正在处理的中断请求就被清除,所以在中断处理完成后,必所以在中断处理完成后,必须把中断结束位置为须把中断结束位置为1,否则以后将屏蔽掉对同级中断或低级中断的处理。,否则以后将屏蔽掉对同级中断或低级中断的处理。当然在必要的当然在必要的时候,在中断处理程序中也可利用时候,在中断处理程序中也可利用EOI命令清除当前的中断请求,使得在中断处理的过程命令清除当前的中断请求,使得在中断处理的过程中又能响应同级或低级中断。中又能响应同级或低级中断。结束外中断用下面的指令:结束外中断用下面的指令:第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序
33、设计六、中断优先级和中断嵌套中断优先级和中断嵌套 中断源事先安排一个中断优先级次序,当多个中断源同时申请中断时,中断源事先安排一个中断优先级次序,当多个中断源同时申请中断时,CPU先比先比较它们的优先级,然后从优先级高到低的次序来依次处理各个中断源的中断请求。较它们的优先级,然后从优先级高到低的次序来依次处理各个中断源的中断请求。IBMPC规定中断的优先级次序为:规定中断的优先级次序为:可屏蔽中断的优先权又分为八级,在正常的优先级方式下,优先级次序是可屏蔽中断的优先权又分为八级,在正常的优先级方式下,优先级次序是 8259A的中断命令寄存器的的中断命令寄存器的6位和位和7位能控制各中断请求端的
34、优先级次序。在发出一个位能控制各中断请求端的优先级次序。在发出一个EOI命令时,命令时,7位位(R)和和6位位(SL)有四种组合,其含义如下:有四种组合,其含义如下:第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计 外中断的优先级次序一般在正常优先级方式下(外中断的优先级次序一般在正常优先级方式下(R0,SL0),),但在但在必要的情况下,设置中断命令寄存器能改变必要的情况下,设置中断命令寄存器能改变IR0IR7的优先级次序。的优先级次序。例如,例如,IR0IR7原为正常的优先级次序,现在要使原为正常的优先级次序,现在要使IR4成为最低级的中断请求,成为最低级的
35、中断请求,则给端口则给端口21H送命令码:送命令码:11100100即即Rl,SL1,EOI1L2L1L0100,这样,各中断优先级就依次右循环到这样,各中断优先级就依次右循环到IR4为最低优先级的位置上:为最低优先级的位置上:如果再送一个命令码:如果再送一个命令码:10100000,则优先级次序再向左循环一个位置,成为,则优先级次序再向左循环一个位置,成为 正在运行的中断处理程序,又被其它中断源中断,这种情况叫做正在运行的中断处理程序,又被其它中断源中断,这种情况叫做中断嵌套中断嵌套。IBMPC机没有规定中断嵌套的深度机没有规定中断嵌套的深度(中断程序又被中断的层次中断程序又被中断的层次),
36、但在实际使用但在实际使用时,多重的中断嵌套要受到堆栈容量的限制时,多重的中断嵌套要受到堆栈容量的限制,所以在编写中断程序时,一定要,所以在编写中断程序时,一定要考虑有足够的堆栈单元来保存多次中断的断点及各寄存器的内容。考虑有足够的堆栈单元来保存多次中断的断点及各寄存器的内容。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计注意:注意:一个正在执行的中断处理程序,在开中断一个正在执行的中断处理程序,在开中断(IF1)的情况下,能被优先级高于的情况下,能被优先级高于它的中断源中断,但如果要被同级或低级的中断源中断,则必须发出它的中断源中断,但如果要被同级或低级的中断
37、源中断,则必须发出EOI命令,清除正在命令,清除正在执行的中断请求,才能响应同级或低级的中断。执行的中断请求,才能响应同级或低级的中断。假定在主程序的执行过程中,假定在主程序的执行过程中,IR2和和IR4的中断请求同时发生,而后的中断请求同时发生,而后IR1的中断请求又的中断请求又到达,最后到达,最后IR3的中断请求也到达的中断请求也到达。中断执行次序如下:中断执行次序如下:首先,首先,CPU响应优先级高响应优先级高的的IR2转去执行转去执行IR2的中的中断处理程序。进入断处理程序。进入IR2处理处理程序后,程序后,IF被置为被置为1。当。当IRl的中断请求到达后,因的中断请求到达后,因IRl
38、的优先级高于的优先级高于IR2,CPU就立即中断就立即中断IR2的程序,的程序,转去执行转去执行IRl的处理程序。的处理程序。在在IR1处理程序中处理程序中CPU指令发出了指令发出了EOI命令,结束了命令,结束了IR1的中断请求。返回的中断请求。返回IR2处理程序后,处理程序后,同样由于发出同样由于发出EOI命令清除了命令清除了IR2的中断请求,所以在较低级的中断请求的中断请求,所以在较低级的中断请求ER4到达后,即到达后,即转向处理转向处理IR4的中断请求。在的中断请求。在IR4处理程序的执行过程中,处理程序的执行过程中,IR3的中断请求到达,当判断的中断请求到达,当判断IF已被置为已被置为
39、1,则又中断了,则又中断了IR4的程序,转去执行的程序,转去执行IR3的程序。在的程序。在IR3程序中,也发出了开中程序中,也发出了开中断指令断指令(STI)和中断结束命令和中断结束命令(EOI),最后最后IRET指令使其返回到指令使其返回到IR4程序,程序,IR4在返回在返回IR2之前也发出了之前也发出了EOI命令,结束了命令,结束了IR4的中断请求。的中断请求。IR2中断请求在前面已被清除,所以中断请求在前面已被清除,所以IR4执行完后,执行完后,IR2继续执行直到返回主程序。继续执行直到返回主程序。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计七、中断处
40、理程序中断处理程序 对于外部中断过程,主程序为中断所做的准备工作和硬件对于外部中断过程,主程序为中断所做的准备工作和硬件(包括包括CPU和外设接口和外设接口)自自动完成的动作动完成的动作:对一般指令,只要一条指令的对一般指令,只要一条指令的执行周期结束执行周期结束即可响应中断。对以下指令特殊控制:即可响应中断。对以下指令特殊控制:1 1、对加重复前缀的串指令对加重复前缀的串指令(如如REP MOVSB)REP MOVSB)要作为一条指令处理,但不是把串操作全部重要作为一条指令处理,但不是把串操作全部重复执行完,而是执行一次重复后,串指令即可响应中断。复执行完,而是执行一次重复后,串指令即可响应
41、中断。2 2、对于对于MOVMOV指令和指令和POPPOP指令,指令,如果处理对象为段寄存器时,那么本指令执行完后,执行完下一条执行才能响应中断请如果处理对象为段寄存器时,那么本指令执行完后,执行完下一条执行才能响应中断请求。求。3 3、对于开中断指令对于开中断指令STISTI和中断返回指令,也要在这些指令执行完后,再执行一条指和中断返回指令,也要在这些指令执行完后,再执行一条指令才响应中断。令才响应中断。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计中断处理子程序的步骤中断处理子程序的步骤:(1)保存寄存器内容保存寄存器内容 (2)如允许中断嵌套,则开中断如
42、允许中断嵌套,则开中断(STI)(3)处理中断处理中断 (4)关中断关中断 (5)送中断结束命令送中断结束命令(EOI)给中断命令寄存器给中断命令寄存器 (6)恢复寄存器内容恢复寄存器内容 (7)返回被中断的程序返回被中断的程序(IRET)八、中断处理程序举例中断处理程序举例例例 编写一个中断处理程序,要求在主程序运行的过程中,每隔编写一个中断处理程序,要求在主程序运行的过程中,每隔10秒钟响铃秒钟响铃一次,同时在屏幕上显示出信息一次,同时在屏幕上显示出信息“The bell is ring”,连续响连续响5次退出。次退出。原理:原理:在系统定时器在系统定时器(中断类型为中断类型为8)的中断处
43、理程序中,有一条中断指令的中断处理程序中,有一条中断指令INT 1CH,时时钟中断每发生一次钟中断每发生一次(约每秒中断约每秒中断l82次次),都要调用一次中断类型,都要调用一次中断类型1CH的处理程序。在的处理程序。在ROM BIOS中,中,1CH的处理程序只有一条的处理程序只有一条IRET指令,实际上它并没有做任何工作,只指令,实际上它并没有做任何工作,只是为用户提供了一个中断类型号。如果用户有某种定时周期性的工作需要完成,就可是为用户提供了一个中断类型号。如果用户有某种定时周期性的工作需要完成,就可利用系统定时器的中断间隔,用自己设计的处理程序来代替原有的利用系统定时器的中断间隔,用自己
44、设计的处理程序来代替原有的1C程序。程序。第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计程序:程序:dseg segment count dw 5;控制连续响铃控制连续响铃5次次 mess db the bell is ring,0dh,0ah,$;在屏幕上显示的字符串在屏幕上显示的字符串dseg endscseg segment assume cs:cseg,ds:dsegmain proc farstart:mov ax,dseg mov ds,ax mov al,1ch;保存保存1Ch原中断向量进入堆栈中原中断向量进入堆栈中 mov ah,35h int
45、 21h push es push bx push ds;把响铃过程设置为把响铃过程设置为1Ch中断向量中断向量 mov dx,offset ring mov ax,seg ring mov ds,ax mov al,1ch mov ah,25h int 21h pop ds第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计 in al,21h;允许定时器中断允许定时器中断 and al,11111110b out 21h,al sti;允许允许CPU响应中断响应中断 mov di,20000;主过程的时间延迟,以便在该时间延迟内进行定时中断处理主过程的时间延迟,
46、以便在该时间延迟内进行定时中断处理delay1:mov si,30000delay2:dec si jnz delay2 cmp di,0 jz exit dec di jnz delay1 pop dx;恢复原来的中断向量恢复原来的中断向量 pop ds mov al,1ch mov ah,25h int 21h mov ax,4c00h int 21hmain endp第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计ring proc near push ds;保存寄存器内容保存寄存器内容 push ax push cx push dx mov ax,dse
47、g mov ds,ax sti;允许允许CPU响应中断响应中断 cmp count,0 jz exit dec count mov dx,offset mess;显示字符串信息,字符串必须以显示字符串信息,字符串必须以$结束结束 mov ah,09h int 21h mov dx,100;发声控制发声控制 in al,61h and al,11111100bsound:xor al,02h out 61h,al 第一章第一章 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计 mov cx,1400wait1:loop wait1 dec dx jnz sound exit:c
48、li pop dx pop cx pop ax pop ds iretring endp cseg endsend startIBM PC系列计算机的键盘是一个智能键盘,键盘内有一片Intel 8048(或8049)单片机(处理器),负责对整个键盘上的字符键、功能键、控制键和组合键进行管理。键盘I/O敲键8048 向8259A发出IRQ1中断请求将所敲键的扫描码送8255 60H端口(IF=1)主机响应主机响应IRQ1调用调用09中断类型服务程序,从中断类型服务程序,从8255 60H端口接收扫描码并转换为ASCII码键盘缓冲区键盘缓冲区键盘中断响应流程用户程序用户程序利用DOS功能调用BIO
49、S中断调用 当在键盘上“按下”或“放开”一个键时,如果这时允许键盘发出中断请求并且IF=1,就会产生09H类型的硬件中断,CPU将执行INT 09H指令,转入BIOS键盘中断服务程序处理用户的键盘输入。扫描码和ASCII码60H输入端口:D7=1 按键已放开,称为断码D7=0 键已按下,称为通码,D6-D0位是按键的扫描码。键盘上的每一个键都对应惟一的扫描码,扫描码与键盘按键对应关系如表5-5所示。BIOS和DOS键盘中断功能 BIOS中断调用(INT 16H)和DOS系统调用(INT 21H)都提供了键盘中断功能,从键盘缓冲区获取键入字符的扫描码或ASCII码返回给用户应用程序。第一章第一章
50、 基础知识基础知识第八章第八章 输入与输出程序设计输入与输出程序设计例例 要求改变键盘中断向量,实现下列目的:要求改变键盘中断向量,实现下列目的:(1)从键盘上接收扫描码,并在屏幕上显示扫描码的十六进制;从键盘上接收扫描码,并在屏幕上显示扫描码的十六进制;(2)将扫描码存入缓冲区内,在有限时间内,当缓冲区满时,给出将扫描码存入缓冲区内,在有限时间内,当缓冲区满时,给出buffer overflow信息,当缓冲区不满时,给出信息,当缓冲区不满时,给出buffer not overflow信息信息.(3)缓冲区的大小为缓冲区的大小为16字节。字节。dseg segment addr_point d
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。