《汇编语言程序设计》-相伟-电子教案 第8章

上传人:E**** 文档编号:89401808 上传时间:2019-05-24 格式:PPT 页数:69 大小:165.50KB
返回 下载 相关 举报
《汇编语言程序设计》-相伟-电子教案 第8章_第1页
第1页 / 共69页
《汇编语言程序设计》-相伟-电子教案 第8章_第2页
第2页 / 共69页
《汇编语言程序设计》-相伟-电子教案 第8章_第3页
第3页 / 共69页
《汇编语言程序设计》-相伟-电子教案 第8章_第4页
第4页 / 共69页
《汇编语言程序设计》-相伟-电子教案 第8章_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《《汇编语言程序设计》-相伟-电子教案 第8章》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》-相伟-电子教案 第8章(69页珍藏版)》请在金锄头文库上搜索。

1、21世纪高等院校规划教材,汇编语言程序设计,相 伟 主编 徐小平 李珍香 副主编,中国水利水电出版社,第八章 输入输出与中断,本章学习目标,通过本章学习,读者应该掌握以下内容: 输入输出及输入输出控制方式 中断技术 DOS与BIOS中断调用,8.1 输入输出,一般来说,I/O接口的需要解决以下问题: 速度匹配 信号电平匹配 信息格式及类型转换 时序匹配,8.1.1 输入输出概述,1CPU与I/O设备之间交换的信息类型 数据信息 状态信息 控制信息,2端口的编址方式 I/O端口与存储器统一编址 I/O端口单独编址,8.1.2 输入输出指令,1. IN指令 用来从指定的端口地址中取数据送入累加器里

2、。 IN AL,PORT IN AX,PORT IN AL,DX IN AX,DX,2OUT指令 用来把累加器的内容送往指定的外设端口中。 OUT PORT,AL OUT PORT,AX OUT DX,AL OUT DX,AX,例如: IN AL ,40H ;(40H)AL OUT 80H,AL ;AL(80H) MOV DX,379H IN AL,DX ;(379H)AL,1无条件传送方式,例8-1 假设有一个包含8个开关的输入接口电路,其端口地址为80H,读取开关数据并存入BUF单元。 则程序段为: LEA BX,BUF IN AL,80H MOV BX ,AL,例8-2 假设有一个包含8

3、个LED的输出接口电路,其端口地址为82H,编写程序显示TAB缓冲区中的20个数据,每个数据的显示间隔是5s。 则程序段为: LEA SI,TAB MOV CX,20 LP: MOV AL,SI INC SI OUT 82H,AL CALL DELAR5s LOOP LP,2查询传送方式,CPU在与外部设备交换数据时,很难保证输入设备已经准备好了数据,或者是输出设备已经处在可以接收数据的状态。因此,一般要在外部设备准备就绪并且I/O接口已经做好数据传送的情况下,才能进行数据传送,这种传送方式成为查询传送方式。,例8-3 假设有一个输入接口电路,其状态端口地址为SADDR1,状态字的D0位为1表

4、示数据准备好,数据端口地址为DADDR1,现以查询方式输入COUNT1个数据,输入的数据存放在BUF缓冲区。 则实现查询输入数据的程序段为: LEA BX,BUF MOV CX,COUNT1 LP: IN AL,SADDR1 TEST AL,01H JZ LP IN AL,DADDR1 MOV BX,AL INC BX LOOP LP,例8-4 假设有一个输出接口电路,其状态端口地址为SADDR2,状态字的D1位为1表示外设空闲,数据端口地址为DADDR2,现以查询方式将TAB缓冲区中的COUNT2个数据输出。 则实现查询输出数据的程序段为: LEA BX,TAB MOV CX,COUNT2

5、LP: IN AL,SADDR2 TEST AL,02H JNZ LP OUT DADDR2,AL INC BX LOOP LP,3中断传送方式,采用中断方式后, CPU首先执行主程序,等待中断的发生。当输入设备将数据准备好,或者输出设备空闲时,便通过I/O接口向CPU发申请中断。CPU在每执行完一条指令之后都会检查是否有中断请求,只要满足中断响应条件,CPU就暂停执行当前的程序,转向执行中断处理程序,进行数据传送,等传送完成后,CPU返回到被中断的程序,继续进行原来的工作。,4DMA方式,DMA方式是由DMA控制器来实现对存储器的直接访问,控制存储器和I/O设备之间的数据传送的。DMA方式克

6、服了程序查询方式和中断方式的弊端,用DMA控制器来控制存储器和I/O设备之间的数据传送时,并不经过CPU,传输过程中CPU不占用总线,这样,传输时就不需要保存断点等额外操作了。另外,整个控制数据块传送的过程,包括地址增量和计数器减量的操作,都是由硬件控制完成的,而不像前面提到的方式要依靠软件编程来实现,因而大大缩短了数据传送的控制时间,提高了整个系统的处理效率。,8.2 中断,在微型计算机系统中,广泛地采用了中断技术,如BIOS中断、DOS中断、中断控制器8259A管理的外部中断等。,8.2.1 8086/8088CPU的中断源,中断是由于CPU的内部原因或外部请求而引发的。引发中断请求的来源

7、称为中断源。 8086/8088CPU最多有256个中断源,这些中断源根据来自CPU的内部还是外部分为两大类:内部中断源和外部中断源。 8086/8088CPU的中断源分类如图8-4所示。,1外部中断,外部中断是由来自CPU外部的硬件电路产生的中断,又称硬件中断。外部中断分不可屏蔽中断NMI和可屏蔽中断INTR。, 不可屏蔽中断NMI,所谓不可屏蔽中断是指该中断请求不能通过软件的方式对其屏蔽,一旦出现NMI中断请求,CPU必须立即响应。因此,对系统能否正确运行有重大影响的中断请求可以作为NMI中断请求信号。如在IBM-PC机中,有以下三种情况是作为不可屏蔽中断请求信号的,即:系统板上的动态RA

8、M奇偶校验错误、I/O通道扩展板上的存储器奇偶校验错误、协处理器8087的中断请求。, 可屏蔽中断INTR,所谓可屏蔽中断是指该中断请求信号可以通过软件的方式对其屏蔽。一旦出现可屏蔽中断请求,CPU是否响应,取决于CPU 中的中断标志位IF:当IF=1时,CPU响应中断;当IF=0时,CPU不响应中断。IF的值可以通过软件来设置:指令STI使IF=1,称为CPU开中断;指令CLI使 IF=0,称为CPU关中断。,2内部中断,内部中断是由CPU在执行程序时产生的中断,又称软件中断。内部中断不受IF状态位的影响,即:不论IF=0,还是IF=1,都不影响内部中断的响应。, 除法错中断,在除法运算时,

9、若除法为0或商超出了寄存器所能表示的范围,就产生一个类型码为0的中断。 例如: MOV DX,0002H MOV AX,3578H MOV BX,2 DIV BX, 单步中断,在使用DEBUG调试程序时,常常使用T命令单步执行程序,这样每执行一条指令,就显示出当前各个寄存器的值、每个状态标志位的状态以及下一条要执行的指令。其实T命令就是利用了单步中断。 单步中断是指在TF=1时,CPU每执行一条指令,自动产生一个类型码为1的中断。, 断点中断,断点中断是类型码为3的中断,与单步中断一样,主要用于程序调试。在程序中设置断点,就是插入一条断点指令INT 3,程序执行到断点时便产生中断,显示出当前各

10、个寄存器的值、每个状态标志位的状态以及下一条要执行的指令。, 溢出中断,溢出中断是类型码为4的中断。若程序在执行某条指令时,使OF=1,则紧跟着的下一条INTO指令(中断溢出指令),便会产生溢出中断。 溢出中断处理程序只有一条IRET指令,因而可由用户对其进行功能扩充。, 软中断INT n,指令格式: INT n 其中n称为中断类型码,n的取值范围是0FFH或0255。 CPU在执行INT指令时,就产生一个软中断,转去调用中断处理程序,完成预设的功能。如执行下列指令使程序返回DOS。,3中断优先级,8086/8088CPU规定的各个中断源的优先级按由高到底分配如下: 除单步中断之外的内部中断包

11、括除法错中断、断点中断、溢出中断、软中断,它们的优先级最高,NMI的优先级次之,INTR的优先级比NMI的优先级低,单步中断的优先级最低。,8.2.2 中断向量表 1中断类型码,中断类型码代表一个中断,它相当于在CPU和中断服务程序之间建立了一座桥梁,CPU通过中断类型码在中断向量表中找到要执行的中断处理程序的入口地址。因此,无论哪一种中断源都必须有明确的中断类型码,当一个中断源发生中断请求时,要么CPU按照与该中断源的事先约定由硬件自动形成中断类型码,要么由该中断源的接口电路提供中断类型码,要么在软中断指令中直接提供中断类型码。,8086/8088CPU获取中断类型码的方法如下:, 除法错中

12、断、单步中断、断点中断、溢出中断的中断类型码依次为0、1、3、4,由CPU自动生成。 不可屏蔽中断NMI的中断类型码为2,由CPU自动生成。 可屏蔽中断INTR的中断类型码,通常由中断控制器8259A提供。 软中断指令INT n的中断类型码就是n,由指令直接提供。,2中断向量表,CPU响应中断后,获得中断类型码,通过中断类型码取得中断处理程序的入口地址,转去执行中断处理程序。为此,8086/8088CPU在内存地址00000H003FFH共1KB的存储区间内,建立了中断类型码与对应的中断处理程序入口地址之间的对应表,该表称为中断向量表。如图8-5所示。,表中存放了256个中断源的中断处理程序的

13、入口地址,每个入口地址占用4个字节单元,其中低地址的2个字节单元里存放入口地址的偏移地址,高地址的2个字节单元里存放入口地址的段地址,所以中断向量表共占有4*256=1024个字节单元,即1KB存储空间。偏移地址和段地址按照低字节存放在低地址、高字节存放在高地址的原则存储。,假如某中断源使用的中断类型码是60H,则该中断源对应的中断处理程序的入口地址需要存放在地址为60H*4=00180H开始的4个连续字节单元中,即在00180H字单元中存放偏移地址,在00182H字单元中存放段地址。当CPU执行软中断指令INT 60H时,自动将00180H字单元中的偏移地址取出赋给IP,将00182H字单元

14、中的段地址取出赋给CS,使CPU执行的下一条指令地址为中断处理程序的开始地址。,3中断向量表的初始化, 通过编程直接对中断向量表写入 通过25H号系统功能调用间接对中断向量表写入, 通过编程直接对中断向量表写入,假如用户自定义软中断使用的中断类型码是60H,软中断处理程序为INT60。则下列程序段可实现中断向量表的初始化: PUSH DS MOV AX,0 MOV DS,AX MOV SI,0180H MOV AX, OFFSET INT60 MOV SI, AX MOV AX, SEG INT60 MOV SI+2,AX POP DS, 通过25H号系统功能调用间接对中断向量表写入,25H号

15、功能用来设置中断向量,调用方法如下: 入口参数: AH=25H AL=中断类型码 DS:DX=中断处理程序的入口地址 出口参数: 无 功能:将DS:DX存放的中断处理程序的入口地址,存入中断向量表中与AL指定的中断类型码相对应的存储区域。,同样,假如用户自定义软中断使用的中断类型码是60H,软中断处理程序为INT60。则通过DOS系统功能调用INT 21H实现中断向量表初始化的程序段如下: PUSH DS MOV AX,SEG INT60 MOV DS,AX MOV DX,OFFSET INT60 MOV AH,25H MOV AL,60H INT 21H POP DS,4中断向量的保存与恢复

16、,取中断向使用系统功能的35H号功能,调用方法如下: 入口参数: AH=35H AL=中断类型码 出口参数:ES:BX=中断处理程序的入口地址 功能:将AL中指定的中断类型码所对应的中断处理程序的入口地址,取出存入ES:BX寄存器中。,假如用户自定义软中断使用的中断类型码是60H,则保存原中断向量并在中断结束后恢复原中断向量的程序段如下: MOV AH,35H MOV AL,60H INT 21H PUSH ES PUSH BX POP DX POP DS MOV AH,25H MOV AL,60H INT 21H,8.2.3 软中断程序设计, 中断调用指令INT 格式:INT n 功能:转中断处理程序执行,该中断处理程序对应的中断类型码为n。 具体地说,INT的执行过程如下: a) 保护现场:(FLAGS)、(CS)、(IP)依次入栈。 b) 清除IF、TF,使IF=0、TF=0,禁止外部中断和

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号