汇编语言程序设计-第八章_输入输出程序设计.ppt_第1页
汇编语言程序设计-第八章_输入输出程序设计.ppt_第2页
汇编语言程序设计-第八章_输入输出程序设计.ppt_第3页
汇编语言程序设计-第八章_输入输出程序设计.ppt_第4页
汇编语言程序设计-第八章_输入输出程序设计.ppt_第5页
免费预览已结束,剩余54页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章 输入输出程序设计,河南师范大学计算机与信息技术学院,2,2019/2/6,本章内容提要,河南师范大学计算机与信息技术学院,3,2019/2/6,8.1 i/o设备的数据传动方式,河南师范大学计算机与信息技术学院,4,2019/2/6,8.1.1 cpu与外设,与cpu进行数据交换的,除了存储器外,还有输入输出设备(统称为外设)。,输入in和输出out指令,可以从外设读取数据和向外设提供数据。,由于外设种类繁多,其工作原理、数据格式、操作时序等各异,所以在处理器与外设之间还有一个协调两者数据传送的逻辑电路,称为输入输出(i/o)接口电路。,处理器并不直接操纵外设,而是通过i/o接口来控制外设。,河南师范大学计算机与信息技术学院,5,2019/2/6,i/o接口电路中的寄存器,i/o接口电路呈现给程序员的,是各种可编程寄存器。,这些寄存器可以分成三类:,数据寄存器它保存和处理与外设间交换的数据; 控制寄存器处理器通过它对外设进行控制,也称命令寄存器; 状态寄存器外设的当前工作状态通过它向处理器提供。,在涉及外设操作的输入输出程序中,各种寄存器以i/o地址(端口)体现;对应三类寄存器分别称为:数据端口、控制端口、状态端口。,河南师范大学计算机与信息技术学院,6,2019/2/6,cpu与外设数据传送方式,程序直接控制传送方式,程序查询i/o方式,中断传送方式,直接存储器存取(dma)方式,河南师范大学计算机与信息技术学院,7,2019/2/6,8.1.2 直接存储器存取(dma)方式,主要由硬件dma控制器实现其传送功能。,dma(direct memory access)方式,也称为成组数据传送方式。,主要用于一些高速的i/o设备。如磁带、磁盘、a/d等设备。,传送数据时,每个字节一到达端口,就直接从接口送到存储器;同样,接口和它的dma控制器也能直接从存储器取出字节并把它送到i/o设备去。,河南师范大学计算机与信息技术学院,8,2019/2/6,dma工作原理,dma控制器(intel 8237a)一般包括四个寄存器: 控制寄存器 状态寄存器 地址寄存器 字节计数器,在信息传送前,应初始化这些寄存器。 地址寄存器要传送的数据块首地址; 字节寄存器要传送的数据长度(字节数); 状态寄存器控制字,指出数据是输入还是输出,并启动dma操作。,每个字节传送后,地址寄存器加1,字节计数器减1。,河南师范大学计算机与信息技术学院,9,2019/2/6,dma传送步骤,由系统完成以下步骤:,dma控制器向cpu发出hold信号,请求使用总线。 cpu发出响应信号hold给dma控制器,并将总线让出,这时cpu放弃了对总线的控制,而dma控制器获得了总线控制权。 传输数据的存储器地址(在地址寄存器中)通过总线发出。 传输的字节数通过数据总线进行传送。 地址寄存器加1,以指向下一个要传送的字节。 字节计数器减1。 如字节计数器非0,转向第3步。 否则,dma控制器撤销总线请求信号hold,传送结束,河南师范大学计算机与信息技术学院,10,2019/2/6,8.2 程序直接控制i/o方式,河南师范大学计算机与信息技术学院,11,2019/2/6,8.2.1 i/o端口,80x86中,i/o端口独立编址,允许设置64k(65535)个8位端口,或32k(32768)个16位端口。,cpu和内存通过i/o端口与外设进行通信。,表8.1列出了部分端口地址(十六进制)。,河南师范大学计算机与信息技术学院,12,2019/2/6,8.2.2 i/o指令,in/out指令,即可传送字节又可传送字,使用的寄存器必须是al或ax。,直接寻址:寻址0255号端口。,间接寻址:所有端口,使用dx寄存器。,in ax , 28h mov data_word , ax,in al , 27h test al , 00000100h jnz error,mov dx , 126h in al , dx ;端口126h or al , 80h ;第7位控制成组数据传送 out dx , al,河南师范大学计算机与信息技术学院,13,2019/2/6,8.2.3 i/o程序举例,例8.1 发声子程序sound,例8.2 查询方式 打印字符程序prt_char,例8.3 查询方式 控制数据输入,河南师范大学计算机与信息技术学院,14,2019/2/6,8.3 中断传送方式,河南师范大学计算机与信息技术学院,15,2019/2/6,中断的相关概念,中断是cpu和外设进行数据传送的有效办法。它可以避免因反复查询外设状态而浪费的时间,从而提高cpu的效率。,中断是一种使cpu中止正在执行的程序而转去处理特殊事件的操作。,中断源引起中断的事件。,外部中断(硬件中断)由外设控制器或协处理器引起的中断。,内部中断(软件中断)由程序中安排的中断指令int产生的中断,或由cpu的某些错误结果产生的中断。,8080/8088的中断源如图8.3所示。,河南师范大学计算机与信息技术学院,16,2019/2/6,8.3.1 8086的中断分类,软件中断,硬件中断,河南师范大学计算机与信息技术学院,17,2019/2/6,1. 软件中断,软件中断又称内中断。,它通常由三种情况引起:,由中断指令int引起;,由于cpu的某些错误引起;,为调试程序(debug)设置的中断。,河南师范大学计算机与信息技术学院,18,2019/2/6,(1)中断指令int引起的内中断,cpu执行完一条int n指令后,会立即产生中断,并调用系统中相应的中断处理程序来完成中断功能,n指出中断类型号。,int指令可以指定00ffh中的任何类型号。,除系统占用的类型号之外,用户还可利用为用户保留的类型号扩充新的中断处理功能。,int n 、into、除法错中断都不能被禁止,而且比任何外部中断的优先级都高。,河南师范大学计算机与信息技术学院,19,2019/2/6,(2)处理cpu某种错误的中断,除法错中断:int 0 在执行除法时,如果除数为0或商超过了寄存器所能表达的范围,则产生一个类型为0的中断。,溢出中断:into 中断类型号为4 若溢出标志of=1,则产生溢出中断;否则,不产生中断,cpu继续运行原程序。 该中断的处理程序,主要是打印出一个错误信息,在处理结束后,不返回原程序继续执行,而是把控制权交给操作系统。 如: add ax , value into ;测试加法溢出,河南师范大学计算机与信息技术学院,20,2019/2/6,(3)为调试程序(debug)设置的中断,单步中断:为寻找程序中的问题,进行单步工作(一次只执行一条指令)。类型号为1。 当单步标志位tf1时,每条指令执行后,cpu会自动产生单步中断。 使用单步中断可以逐条指令地跟踪程序的流程,观察cpu每执行一条指令后,各个寄存器及有关存储单元的变化,从而指出和确定产生错误的原因。,断点中断:将程序分段,为每段设置一个断点。中断类型号为3。 当cpu执行到断点时便产生中断,可以检查各寄存器及有关存储单元的内容。 断点可以设置在程序的任何的地方。,河南师范大学计算机与信息技术学院,21,2019/2/6,2. 硬件中断,硬件中断又称外中断。,硬件中断主要有两种来源:,非屏蔽中断(nmi)为电源错、内存或i/o总线的奇偶等异常事件的中断保留的。中断类型号为2。 可屏蔽中断来自各种外设的中断。由外设的请求引起的中断。,可屏蔽中断受中断标志if控制; 非屏蔽中断和if位无关。,河南师范大学计算机与信息技术学院,22,2019/2/6,可屏蔽中断,从外设发出中断请求到cpu响应中断,有两个控制条件起决定性作用:,该外设的中断请求是否屏蔽由中断屏蔽寄存器(imr)控制。 cpu是否允许响应中断由标志寄存器(flags)中的中断允许位if控制。,河南师范大学计算机与信息技术学院,23,2019/2/6,中断屏蔽寄存器,中断屏蔽寄存器的端口地址是21h,如图8.4所示。,中断屏蔽寄存器可分别控制某个可屏蔽中断源。,在编写中断程序时,应在主程序的初始化部分设置好中断屏蔽寄存器,以确定允许用中断方式工作的外部设备。,;系统重设键盘中断 in al , 21h mov al , 11111101b out 21h , al,河南师范大学计算机与信息技术学院,24,2019/2/6,控制cpu的中断允许标志if,cpu是否响应中断还与中断允许标志if有关。,if=0,cpu禁止响应任何外设的中断(关中断);,if=1,允许cpu响应外设的中断请求(开中断)。,中断允许标志if是控制所有可屏蔽中断的。,当任何类型的中断发生时,当前的flags要入栈保存,然后清除if位,进入中断处理程序,如果允许在一个中断处理程序的执行过程中发生硬中断,则必须用一条sti指令开中断。,当中断返回时,恢复了原flags的值,其中if=1,则允许硬中断再次发生。,sti 设置中断允许位(if=1) cli 清除中断允许位(if=0),河南师范大学计算机与信息技术学院,25,2019/2/6,中断命令寄存器,在一次中断处理结束之前,还应给8259a的可编程中断控制器的中断命令寄存器发出中断结束命令(eoi:end of interrupt),否则以后将屏蔽掉对同级中断或低级中断的处理。,中断命令寄存器的i/o端口地址为20h(如图8.4所示)。,在中断处理过程中,也可利用eoi命令清除当前中断请求,以响应同级或低级中断。,;结束硬件中断 mov al , 20h out 20h , al,河南师范大学计算机与信息技术学院,26,2019/2/6,8.3.2 中断向量表,每个中断都有一个中断类型号。,80x86可处理256种类型的中断,类型号为00ffh。,中断向量表就是各类型中断处理程序的入口地址表。,存储器的最低1.5kb,从00005ffh为系统占用,其中,最低的1kb,从0000003ffh存放中断向量表。,256个中断向量,每个中断向量占4个字节。,每类中断向量的地址中断类型号4。,图8.5给出了中断向量表。 表8.2给出了中断向量表地址分配。 图8.6展示了中断操作步骤。,河南师范大学计算机与信息技术学院,27,2019/2/6,中断操作步骤,中断操作步骤:,取中断类型号; 计算中断向量地址; 取中断向量,偏移地址送ip,段地址送ds; 转入中断处理程序; 中断返回到int指令的下一条指令。,河南师范大学计算机与信息技术学院,28,2019/2/6,为中断类型n设置中断向量,mov ax , 0 mov es , ax mov bx , n*4 mov ax , offset inthand mov es:word ptrbx , ax mov ax , seg inthand mov es:word ptrbx+2 , ax inthand: iret,用户可以利用保留的中断类型号扩充自己需要的中断功能, 对新增加的中断功能要在中断类型表中建立相应的中断向量。,河南师范大学计算机与信息技术学院,29,2019/2/6,使用dos功能调用(21h)存取中断向量,例8.4 使用dos功能调用存取中断向量,河南师范大学计算机与信息技术学院,30,2019/2/6,8.3.3 中断过程,当中断发生时,由中断机构自动完成下列操作:,取中断类型号n; 标志寄存器(flags)内容入栈; 当前代码段寄存器(cs)内容入栈; 当前指令指针寄存器(ip)内容入栈; 禁止硬件中断和单步中断(if=0 , tf=0); 从中断向量表中取4n的字内容送ip,取4n+2的字内容送cs; 转中断处理程序。,如图8.7的中断过程示意图。,河南师范大学计算机与信息技术学院,31,2019/2/6,8.3.4 中断优先级和中断嵌套,8086规定的中断优先级次序为: 优先级 高 软件中断(除法错,into ,int) 非屏蔽中断(nmi) 可屏蔽中断(intr) 低 单步中断,可屏蔽中断的优先权分为八级,正常情况下,优先级次序是: ir0 , ir1 , ir2 , ir3 , ir4 ,ir5 , ir6 , ir7,定时器 打印机 优先级高 低,河南师范大学计算机与信息技术学院,32,2019/2/6,8259a的中断命令寄存器控制优先级,8259a的中断命令寄存器的第6、7位控制各种中断请求的优先级次序。,r sl 0 0 正常优先级方式 0 1 清除由l2l0指定的中断请求 1 0 各中断优先级依次左循环一个位置 1 1 各中断优先级依次循环到由l2l0指定的中断 请求到达最低优先级位置上,;使优先级次序再左循环一个位置 mov al , 10100000 out 20h , al ;ir6 , ir7 , ir0 , ir1 , ir2 ,ir3 ,ir4 , ir5,河南师范大学计算机与信息技术学院,33,2019/2/6,中断嵌套,中断嵌套:正在运行的中断处理程序,又被其他中断源中断的情况。,80x86没有规定中断嵌套的深度(中断程序又被中断的层次),实际受堆栈容量的限制。,一个中断处理程序,在开中断的情况下,可以被优先级高于它的中断源中断。,只有发出了eoi命令,清除正在执行的中断请求,才可以响应同级或低级的中断。,如图8.8所示:正常优先级方式下,优先级中断和中断嵌套发生时的处理过程。,河南师范大学计算机与信息技术学院,34,2019/2/6,8.3.5 中断处理程序,主程序为响应中断所做的准备工作以及硬件(包括cpu和外设接口)自动完成以下动作:,河南师范大学计算机与信息技术学院,35,2019/2/6,中断响应的特殊情况,注意:设备发到cpu的中断请求信号在时间上是随机的,只要未被屏蔽的设备本身的状态是准备好或空闲的,它就会向cpu请求中断,如果此时cpu正在执行一条指令,那么要等到这条指令执行完后,才响应中断。,加封锁的指令(如lock mov ax , bx)应看作一条指令;,对加重复前缀的指令(如rep movsb)要作为一个整体来处理,执行一次重复串指令即可响应中断;,对mov、pop指令,如果处理对象是段寄存器,那么执行完本条指令后,接着再执行一条指令才响应中断。,对sti和iret指令,也要在该指令执行完后,再执行一条指令才响应中断。,河南师范大学计算机与信息技术学院,36,2019/2/6,中断处理子程序,中断处理子程序的编写步骤:,保存寄存器内容; 如允许嵌套,则开中断(sti); 处理中断; 关中断(cli); 送中断结束命令(eoi)给中断命令寄存器; 恢复寄存器内容; 返回被中断的程序(iret)。,注意:cpu产生一次中断,i/o设备只完成一个字节(或字)的输入输出,所以中断处理程序所用的指针变量或数据变量一般应设置存储单元来保存。,河南师范大学计算机与信息技术学院,37,2019/2/6,中断程序设计举例,例8.5 响铃 p300-303,例8.6 键盘输入、打印机输出 p303-310,例8.7 p310-313 除数为0的中断处理程序,河南师范大学计算机与信息技术学院,38,2019/2/6,练习与作业,练习: 8.5、8.6 提交作业: 8.12,河南师范大学计算机与信息技术学院,39,2019/2/6,i/o接口电路示意图,河南师范大学计算机与信息技术学院,40,2019/2/6,表8.1 i/o端口地址分配,河南师范大学计算机与信息技术学院,41,2019/2/6,例8.1 发声程序-1,这是一个最基本的控制扬声器发出声音的子程序。,通过i/o指令使设备控制寄存器(i/o端口地址为61h)的第一位交替为0和1,而端口61h的第1位和扬声器的脉冲门相连(见图8.1),当第1位由0变为1,延迟一会又由1变为0时,脉冲门就先打开后关闭,产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使之发出了声音。,61h端口的第0位和一个振荡器(2号定时器)相连,现在不用振荡器产生声音,所以把第0位置零。,河南师范大学计算机与信息技术学院,42,2019/2/6,例8.1 发声程序-2,;入口参数:声音频率bx=6000,发声延迟cx=1000。 sound proc near push ax push dx mov dx , cx in al , 61h and al , 11111100b trig: xor al , 2 out 61h , al mov cx , bx ;控制脉冲门开关 delay: ;的时间,河南师范大学计算机与信息技术学院,43,2019/2/6,例8.1 发声程序-3,loop delay dec dx jne trig pop dx pop ax ret sound endp,河南师范大学计算机与信息技术学院,44,2019/2/6,图8.1 设备控制器,通常一个外设的数据端口是8位的,而状态与控制信息只需一位或两位,所以不同外设的状态和控制位可共用一个端口。61h端口的0、1位是控制扬声器的,27位分别控制其他外部设备。,河南师范大学计算机与信息技术学院,45,2019/2/6,程序查询i/o方式,这种cpu与外设交换信息的方式称为查询方式或等待方式。,造成cpu必须查询等待的主要原因是许多外设工作速度比较低。,查询方式的优点:可以用程序安排几个输入输出设备的先后优先次序,最先查询的设备,其工作的优先级也最高。,查询方式的缺点:浪费了cpu的时间,而且由查询转向相应的处理陈许的时间较长,尤其是在设备比较多的情况下。,为了提高cpu的工作效率,可以采用中断方式传送数据。,河南师范大学计算机与信息技术学院,46,2019/2/6,例8.2 打印字符程序-1,采用查询方式的打印字符程序。程序通过反复读取并测试打印机的状态来控制输出。 数据寄存器的端口地址为378h,状态寄存器的端口地址为379h,控制寄存器的端口地址为37ah。 它们各位的含义如图8.2所示。,河南师范大学计算机与信息技术学院,47,2019/2/6,例8.2 打印字符程序-2,.model small .stack .data mess db printer is normal , 0dh , 0ah count equ $-mess .code .startup mov si , offset mess mov cx , count next: mov dx , 379h wait: in al , dx test al , 80h,河南师范大学计算机与信息技术学院,48,2019/2/6,例8.2 打印字符程序-3,je wait mov al , si mov dx , 378h out dx , al mov dx , 37ah mov al , 0dh out dx , al inc si loop next .exit 0 end,河南师范大学计算机与信息技术学院,49,2019/2/6,图8.2 打印机的状态寄存器和控制寄存器,河南师范大学计算机与信息技术学院,50,2019/2/6,例8.3 轮流查询-1,cpu要从3个设备轮流输入数据,proc1、proc2、proc3分别是设备1、设备2和设备3的数据输入程序,它们的状态寄存器的端口地址分别是stat1、stat2、stat3,这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论