资源预览内容
第1页 / 共50页
第2页 / 共50页
第3页 / 共50页
第4页 / 共50页
第5页 / 共50页
第6页 / 共50页
第7页 / 共50页
第8页 / 共50页
第9页 / 共50页
第10页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第六章 输入/输出与中断,输入和输出设备是计算机系统的重要组成部分,程序、原始数据和各种现场采集到的信息,要通过输入装置输入至计算机,计算结果或各种控制信号输出给各种输出装置,以便显示、打印和实现各种控制动作。计算机系统通过硬件接口以及I/O控制程序对外围设备进行控制,使其能协调有效地完成输入输出工作。由于汇编语言能直接控制硬件的特点,就成了编写高性能I/O程度最有效的程序设计语言。 本章重点: I/O程序结构及其设计方法 本章难点:程序设计技巧(多编程),一、 I/O端口 每种外部设备常有三类信息:控制 CPU 外设 用不同端口 状态 外设 CPU 地址表示 数据 外设 CPU 端口与接口不是一个概念,端口是计算机与外围设备进行通信的部分,是用地址来识别的,一个外设由一个接口与计算机连接,但需要数个端口地址以区分外设的控制命令寄存器、状态寄存器和数据寄存器。CPU用地址来选择外设进行数据的输入和输出。 在80X86微机中,I/O端口与存储器地址完全分开,编址在一个独立的地址空间中,这个I/O空间允许设置64K个8位端口或64K个16位端口,除了专用及保留的单元之外,都可接设备端口。端口地址为0000HFFFFH,其中前256个端口可以直接在指令中指定,端口地址为00HFFH;当端口号大于FFH时,只能先把端口地址放到DX寄存器中。,第一节 输入/输出,I/O端口不分段,直接把输入/输出指令中给出的端口地址送地址总线。I/O端口与存储单元采用独立编址,在地址总线上可能出现相同的I/O端口地址和存储单元地址,一个地址码可以是存储器某一单元的地址,也可以是某一输入输出端口的地址,因此,8086CPU用专门的控制线M/IO来区分现在地址总线上的地址是I/O端口地址还是存储单元地址。 在1K个端口地址中,有些已被系统占用,有些被已配置的输入输出的I/O接口占用,一些被保留作开发使用,还有一些是留给用户使用的。表61列出了部分端口地址的配置。,二、I/O指令,格式:IN AL/AX,PORT/DX 功能:(AL)/(AX)(PORT)/(DX) OUT PORT/DX,AL/AX (AL)/(AX)(PORT)/(DX) 这两条指令用于将外部设备与CPU进行信息传送。外部设备是用端口地址表示操作数:8位立即数(PORT256)或通过DX寄存器间接给出的端口地址(65536个)(接口的地址线)。 CPU由AL(字节)/AX(字)表示传送的信息(数据线)。 例:IN AL,61H 例:MOV DX,378H MOV AL,41H OUT DX,AL,三、I/O的传送方式,外设与CPU之间进行数据、状态和控制三种信息传送,这些信息以四种方式进行传送。 1.无条件传送 当外设的数据传送是定时的,即外设与CPU同步的情况下,CPU不需要查询外设的状态,而直接用IN或OUT指令实现CPU与指定的外设寄存器之间的信息传送。如当输入信息是开关量时,开关已设定,只要用输入指令,肯定会读入开关的状态。无条件传送是最简单的数据传送方式,它所需要的硬件和软件都是最节省的,但这种方式必须在已知并确信外设已处于准备就绪的情况下才能使用,否则就会出错。,2.查询传送 当外设比CPU工作速度低得多的情况下,在输入时,CPU要查询外设是否就绪,若就绪,才能读入数据,否则,继续等待,直到数据准备好了才能进行数据的输入。输出数据之前,CPU要查询外设是否“忙”,若“忙”,则等待,直到其空闲,才能输出一个数据。查询传送方式的流程图如图6-1和图6-2所示。 -1、2两种方式有的教材统称为“直接传送”,3.直接存储器传送(DMA) 直接存储器传送方式适用于高速I/O设备,如磁盘、数模转换器等设备,这些设备传输字节或字的速度非常快,因此用硬件在外设与内存之间直接进行数据交换而不通过CPU。 其传送大致过程是:先用软件把数据在高速外设中存放的起始位置、数据在内存中存放的起始位置、传送数据的个数等参数送到外设相应的寄存器中,然后启动外设,当外设就绪就向CPU发直接传送请求信号,CPU让出总线控制权,高速外设在DMAC的控制下交换数据,数据交换完毕,DMAC交回总线控制权。,DMA控制器,4.中断传送 在查询传送方式中,CPU与外设串行工作,外设在进行I/O操作时,CPU并未进行其它的工作而是处于长时间反复查询的等待状态。为提高CPU的效率,采用中断方式,中断的特点是CPU与外设并行工作,即CPU启动外设之后,不再等待外设工作的完成,而是执行另一个程序。输入时,当外设就绪,主动向CPU发出中断请求,让CPU为其服务,CPU接到请求后,暂时中断现行程序的运行,转去执行处理相应的中断服务程序,完成所需的数据输入,当处理结束后,CPU又返回到被中断程序的断点处继续往下执行原来中断了的程序;在输出时,当外设空闲时,向CPU发出中断请求,CPU暂停当前程序的执行,转去执行相应中断服务程序,完成所需的数据输出,然后再返回去执行原来中断了的程序。这种方式避免了CPU反复查询外设的状态而浪费时间,节省大量的CPU时间,又可以使多台外围设备与CPU并行工作。,四、I/O程序设计举例 通过I/O程序说明使用I/O指令直接在端口级上输入输出的方法。 例61: 假设在计算机第1个并行口上接有一台打印机,设计程序打印如下字符串:Print character program 本程序是采用查询传送方式传送数据。在打印机接口中,数据寄存器的端口地址为378H,状态寄存器的端口地址为379H,控制寄存器的端口地址为37AH,它们各位的功能如图所示:,状态寄存器 7 6 5 4 3 2 1 0 忙位(0=忙) 打印出错(0=出错) 应答(0=可接受) 联机状态(1=联机) 纸出界(1=出界) 控制寄存器 7 6 5 4 3 2 1 0 工作方式 选通(1=输出数据) (0=禁止中断方式) 自动换行(1=换行) 0=初始化(1=正常) 选择位(1=接通),实现子程序打印的流程如图所示:,程序清单如下: DATA SEGMENT BUF DBPRINT CHARACTER PROGRAM,0DH,0AH DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE BEGIN:MOV AX,DATA MOV DS,AX LEA SI,BUF L1: MOV AL,SI CALL P1 CMP AL,0AH JZ EXIT INC SI JMP L1 EXIT: MOV AH,4CH INT 21H,P1 PROC NEAR P1 ENDP PUSH DX CODE ENDS PUSH AX END BEGIN PUSH AX MOV DX,379H W1: IN AL,DX TEST AL,80H JZ W1 POP AX MOV DX,378H ;打印机数据寄存器端口 (DX) OUT DX,AL ;待打印字符 数据寄存器 MOV DX,37AH ;打印机状态寄存器端口 (DX) MOV AL,0DH ;控制字 (AL) OUT DX,AL ;发选通信号 MOV AL,0CH OUT DX,AL POP AX POP DX RET,测试状态寄存器(379H)第7位,为0即打印机忙,不能打印数据.循环测试直到第7位为1,表明打印机空闲,程序就取一个字符送到打印机的数据寄存器,并由控制寄存器发出一个选通信号(37AH的第0位),控制打印机打印输出。,第二节 中 断,中断:使CPU暂停正在执行的程序而转去处理临时发生的事件,处理完后再返回到被中断程序的断点处继续执行。 中断技术的应用非常广泛,如现代计算机系统中多道程序的分时运行、实时控制、人机通信、计算机故障处理、对I/O设备的管理等均使用中断技术。有了中断功能,就可以使CPU和多个外设同时工作;对于实时控制,现场的各个参数和信息可在任何时间发出中断申请,要求CPU处理,CPU就可马上响应加以处理;计算机在运行过程中,往往会出现事先预料不到的情况,或出现一些故障,如电源突跳、存储出错、运算溢出等等,计算机就可以利用中断系统自行处理,而不必停机。采用中断技术便于充分发挥计算机的所有软、硬件功能,提高计算机的工作效率和实时处理能力。,一、 中断源和中断向量表,1中断源:引起中断的事件或能发出中断申请的来源。 它们可能是来自外围设备的I/O请求,也可能是计算机的一些异常事故或其他内部原因,还有可能是为调试程序而设置的中断源等。中断源可分为外部中断源和内部中断源。 (1)外部中断源:来自CPU的外部,由NMI(不可屏蔽中断源)和INTR(可屏蔽中断源)引起的中断。 NMI由硬件故障引起,不受标志位IF的影响。NMI有电源掉电、存储器出错或总线奇偶检验错等,这些错误及时响应和处理。 INTR由外设请求中断产生,CPU是否响应取决于IF的状态。 STI:IF=1,开中断,CPU能响应外设的中断请求; CLI:IF=0,关中断,CPU不响应外设的中断请求。 (2)内部中断源:内部中断源来自CPU的内部,不受IF的限制,有除法错、溢出错、INT n指令和单步中断四种。 优先级由高到低顺序为:除法出错,INTO,INT n,NMI,INTR,单步中断,2中断向量表 中断向量:各中断服务程序的入口地址(首地址)。 中断向量表:将各入口地址以中断类型号n的顺序建立成一个表,存放在内存的最低1K字节(物理地址为00000H003FFH)中。 每个中断向量占用4个字节:IP,CS。因此,中断向量表可以容纳256个中断向量,对应的中断类型号为0255(或00HFFH)。 0000:0000 * * * * * * * * * *。 IP CS IP CS INT 0 INT 1 -n号中断程序的入口地址在0:4n0:4n+3中,便于调用。 例:INT 16H 的入口首地址是?,二、中断指令,、中断指令 INT n ;调号中断 IRET ;中断返回 中断操作步骤: 1)将FLAGS、CS、IP依次入栈,并将IF和TF清零。 2)计算中断向量地址4*n。 3)(4n) IP,(4n+2) CS,转去执行中断服务程序。 )中断返回,将栈顶内容弹出依次送IP、CS及标志寄存器。 例:INT 1AH,、新增中断功能(窃取系统中断) )根据新增加的中断指令的入口、出口参数及功能编制中断服务程序; )在中断向量表中找一个空闲的中断类型号n; )将新编制的中断服务程序的入口地址送入中断向量表4*n4*n+3 四个字节中。 此后,便可以使用“INT n”实现n号中断,执行新增加的中断服务程序。 在设置中断向量时,为了避免直接使用中断向量的绝对地址,往往使用DOS功能调用(INT 21H)存取中断向量。,)设置中断向量: (AH)=25H (AL)= 中断类型号 (DS):(DX)= 中断向量入口地址 执行:INT 21H 功能:将(DS):(DX)中的中断向量入口地址放置到AL指定的中断类型的中断向量表中。 )取中断向量: (AH)= 35H (AL)= 中断类型号 执行:INT 21H 功能:将AL指定的中断类型的中断服务程序的入口地址从中断向量表中取到(ES):(BX)中。,三、中断过程 一个完整的中断过程一般有:中断请求、中断优先级判定、中断响应、中断处理和中断返回五个步骤。,第四节 中断服务程序设计,一、 中断服务程序设计基本方法 中断程序设计分为主程序设计和中断服务程序设计两部分。 1主程序设计 如果主程序在运行过程中允许响应中断,则主程序在响应中断前应做好对中断系统的初始化工作,包括CPU、中断控制器8259A和通用外设接口的初始化三部分工作。 CPU:设置堆栈指针(SS和SP),设置中断向量和开放中断。 中断控制器8259A:选择工作方式,修改中断屏蔽寄存器的内容。 (20H口地址) (21H口地址,=0允许中断) 通用外设接口:选择接口的工作方式和设置接口的中断开放位等。 初始化工作后,可安排主程序,在中断过程中主程序中要完成三个工作:中断向量的设置;设备中断屏蔽字的设置;开中断。,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号