汇编语言第8章_第1页
汇编语言第8章_第2页
汇编语言第8章_第3页
汇编语言第8章_第4页
汇编语言第8章_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编语言程序设计汇编语言程序设计第1页第八章第八章 输入输出程序设计输入输出程序设计8.1工作原理工作原理8.2数据的输入数据的输入/输出方式输出方式8.3输入输入/输出应用实例输出应用实例 外部设备是以实现人机交互和机间通信为目的一些机电设备,计算机系统通过硬件接口以及I/O程序对外部设备进行控制,使其能协调地、有效地完成输入输出工作。 CPU MEM I/O I/O I/O I/O 显 示 器 打印 机 串行口 并行口 磁盘适配器 汇编语言程序设计汇编语言程序设计第2页8.1 工作原理工作原理8.1.1 I/O端口地址端口地址 I/O端口是端口是CPU与输入输出设备的交换数据的场与输入输出

2、设备的交换数据的场所,通过所,通过I/O端口,处理机可以接受从输入设备输入端口,处理机可以接受从输入设备输入的信息;也可向输出设备发送信息。在计算机系统的信息;也可向输出设备发送信息。在计算机系统中,为了区分各类不同的中,为了区分各类不同的I/O端口,就用不同的数字端口,就用不同的数字给它们进行编号,这种对给它们进行编号,这种对I/O端口的编号就称为端口的编号就称为I/O端口地址。端口地址。 计算机的外部设备和大容量存储设备通过接口计算机的外部设备和大容量存储设备通过接口连接到系统上,每个接口由一组寄存器组成,这些连接到系统上,每个接口由一组寄存器组成,这些寄存器都分配有一个称为寄存器都分配有

3、一个称为I/O端口的地址编码。计算端口的地址编码。计算机的机的CPU和内存就是通过这些端口和外部设备进行和内存就是通过这些端口和外部设备进行通信的。通信的。汇编语言程序设计汇编语言程序设计第3页 I/O接口部件中一般有三种寄存器:一是用作数接口部件中一般有三种寄存器:一是用作数据缓冲的据缓冲的数据寄存器数据寄存器;二是用作保存接口状态的;二是用作保存接口状态的状态状态寄存器寄存器;三是用来保存发出的命令以控制接口和设备;三是用来保存发出的命令以控制接口和设备的的命令寄存器命令寄存器。 80 x86微机中微机中 I/O端口编址在一个独立的地址空端口编址在一个独立的地址空间,这个间,这个I/O空间

4、允许设置空间允许设置64K个个8位端口,位端口,8086实际实际只用上了只用上了1K个端口,端口地址范围为个端口,端口地址范围为 000H-3FFH汇编语言程序设计汇编语言程序设计第4页8.1.2 I/O系统的工作原理系统的工作原理 I/O系统最基本的功能包括下列几点系统最基本的功能包括下列几点: 接受接受CPU的命令产生输入输出系统所需的的命令产生输入输出系统所需的时序及控制信息,时序及控制信息, 完成输入、输出的操作。完成输入、输出的操作。 与与CPU进行数据传输。进行数据传输。 与外部设备进行数据通信。与外部设备进行数据通信。 对传输的数据进行缓冲存储及传送格式和对传输的数据进行缓冲存储

5、及传送格式和传送方式的转换。如串行与并行的转换,传送方式的转换。如串行与并行的转换,8 位与位与16位、位、32位、数据格式的转换等。位、数据格式的转换等。 对传输的数据进行错误检查。对传输的数据进行错误检查。汇编语言程序设计汇编语言程序设计第5页每种输入输出设备都要通过一个硬件接口或控制器每种输入输出设备都要通过一个硬件接口或控制器和和CPU相连。接口和控制器都能用相连。接口和控制器都能用IN ,OUT指令与指令与外部设备交换信息。这些信息包括控制、状态和数外部设备交换信息。这些信息包括控制、状态和数据三种不同性质的信息,它们必须按不同的端口地据三种不同性质的信息,它们必须按不同的端口地址分

6、别传送。址分别传送。控制信息控制信息 输出到输出到I/O接口,通知接口和设备要做什么接口,通知接口和设备要做什么动作。如控制外设的启动与停止。动作。如控制外设的启动与停止。状态信息状态信息从从I/O接口输入到接口输入到CPU,表示,表示I/O设备当前所设备当前所处的状态。如输入设备的准备好处的状态。如输入设备的准备好(ready)信号,输出信号,输出 设备的忙设备的忙(busy)信号。信号。数据信息数据信息是是I/O设备和设备和CPU真正要交换的信息,这些真正要交换的信息,这些数据信息根据不同的传送方式,如串行数据,并行数数据信息根据不同的传送方式,如串行数据,并行数据等。据等。汇编语言程序设

7、计汇编语言程序设计第6页1、程序查询方式、程序查询方式CPU运行输入输出程序循环对输入输出设备的状态运行输入输出程序循环对输入输出设备的状态寄存器进行查询,看是否准备就绪,如果准备就寄存器进行查询,看是否准备就绪,如果准备就绪就处理这个输入或输出,否则循环等待或查询绪就处理这个输入或输出,否则循环等待或查询其他设备。何时对何设备进行输入或输出操作完其他设备。何时对何设备进行输入或输出操作完全受全受CPU控制。控制。 I/O设备与主机之间进行数据交换有多种方式,设备与主机之间进行数据交换有多种方式, 80 x86的输入输出方式有概括起来可以分为:的输入输出方式有概括起来可以分为: 程序直接控制方

8、式、程序中断方式、直接存储程序直接控制方式、程序中断方式、直接存储器访问器访问(DMA)方式和通道传输方式方式和通道传输方式(IOP)。汇编语言程序设计汇编语言程序设计第7页 程序直接控制程序直接控制I/O传送方式中又分无条件传传送方式中又分无条件传送方式和程序查询传送方式两种。前者适送方式和程序查询传送方式两种。前者适用于外设各种动作时间固定、条件已知的用于外设各种动作时间固定、条件已知的场合下,而后者则适用于场合下,而后者则适用于CPU和外设工作和外设工作不同步的情况。不同步的情况。 由于外设和由于外设和CPU的工作速度差别很大,所的工作速度差别很大,所以大多数情况采用的是程序查询传送方式

9、。以大多数情况采用的是程序查询传送方式。 汇编语言程序设计汇编语言程序设计第8页程序查询传送方式的查询输入工作过程:程序查询传送方式的查询输入工作过程:(1) 从状态端口读入状态信息;从状态端口读入状态信息;(2) 测试测试Ready位:若不为位:若不为1则转则转(1)操作,循操作,循环等待;若为环等待;若为1则向下运行;则向下运行;(3) 从数据端口读入数据到从数据端口读入数据到AX寄存器。寄存器。程序查询传送方式的查询输出工作过程:程序查询传送方式的查询输出工作过程: (1) 从状态端口读入状态信息;从状态端口读入状态信息; (2) 检查检查Busy位:若为位:若为1,则转,则转(1)操作

10、,循环操作,循环等待;若为等待;若为0则向下运行;则向下运行; (3) 从缓冲区取数据输出。从缓冲区取数据输出。汇编语言程序设计汇编语言程序设计第9页 外围设备不是被动地等待外围设备不是被动地等待CPU来为它服务,当输入设备来为它服务,当输入设备已经把数据准备就绪,或输出设备已经空闲时,要主动已经把数据准备就绪,或输出设备已经空闲时,要主动向向CPU发出服务请求;发出服务请求;CPU每执行完一条指令后都要测每执行完一条指令后都要测试有没有外围设备的中断服务请求,如果有,则要暂停试有没有外围设备的中断服务请求,如果有,则要暂停当前正在执行的程序,先去为外围设备服务,等服务完当前正在执行的程序,先

11、去为外围设备服务,等服务完成后再继续执行原来的程序,程序中断方式用于连接低成后再继续执行原来的程序,程序中断方式用于连接低速外围设备。速外围设备。 程序中断方式有以下特点:程序中断方式有以下特点:(1) CPU与外围设备能够并行工作。与外围设备能够并行工作。(2) 能够处理例外事件,例如,电源掉电、非法指令、地址能够处理例外事件,例如,电源掉电、非法指令、地址越界、数据溢出、数据校验错、页面失效等。越界、数据溢出、数据校验错、页面失效等。(3) 数据的输入和输出都要经过数据的输入和输出都要经过CPU,要在程序的控制下完,要在程序的控制下完成从输入设备中读数据到内存或从主存输出到设备。成从输入设

12、备中读数据到内存或从主存输出到设备。2、程序中断方式、程序中断方式汇编语言程序设计汇编语言程序设计第10页3、直接存储器传送(、直接存储器传送(DMA)方式)方式DMA (Direct Memory Access)直接存储器存取方式,直接存储器存取方式,也称为成组数据传送方式。也称为成组数据传送方式。主要是用于一些高速的主要是用于一些高速的I/O设备。它由专用的设备。它由专用的DMA控制器控制器(Intel 8237A)担任。担任。DMA控制器一般包括四个寄存器:控制寄存器、控制器一般包括四个寄存器:控制寄存器、状态寄存器、地址寄存器和字节计数器,这些寄状态寄存器、地址寄存器和字节计数器,这些

13、寄存器在数据传送之前应进行初始化。存器在数据传送之前应进行初始化。汇编语言程序设计汇编语言程序设计第11页发送内存地址发送内存地址 DMA响应响应DMA请求请求 传送一个字节数据传送一个字节数据 地址寄存器增地址寄存器增1字节寄存器减字节寄存器减1字节计数器字节计数器0?否否传送结束传送结束 是是DMA传送传送流程图流程图汇编语言程序设计汇编语言程序设计第12页4、通道传输方式、通道传输方式(IOP) 通道是一个独立与通道是一个独立与CPU的专管输入输出控制的的专管输入输出控制的机构,它控制设备与内存直接进行数据交换。它机构,它控制设备与内存直接进行数据交换。它有自己的通道指令,这些指令受有自

14、己的通道指令,这些指令受CPU启动,并在启动,并在操作结束时向操作结束时向CPU发中断信号。发中断信号。 通道方式是使用通道来控制内存或通道方式是使用通道来控制内存或CPU和外围设和外围设备之间的数据传送。通道是一个独立与备之间的数据传送。通道是一个独立与CPU的专的专管输入输出控制的机构,它控制设备与内存直管输入输出控制的机构,它控制设备与内存直接进行数据交换。它有自己的通道指令,这些指接进行数据交换。它有自己的通道指令,这些指令受令受CPU启动,并在操作结束时向启动,并在操作结束时向CPU发中断信发中断信号。该方式的优点是进一步减轻了号。该方式的优点是进一步减轻了CPU的工作负的工作负担,

15、增加了计算机系统的并行工作程度。缺点是担,增加了计算机系统的并行工作程度。缺点是增加了额外的硬件,造价昂贵。增加了额外的硬件,造价昂贵。 汇编语言程序设计汇编语言程序设计第13页I/O指令指令IN AL,portNIN AL,DX IN AX,portNIN AX,DXOUT AL,portNOUT AL,DXOUT AX,portNOUT AX,DXportN为为0255(00HFFH)之间的端口号,用端口直之间的端口号,用端口直接寻址接寻址,当端口号大于当端口号大于255时必须用时必须用DX间接寻址间接寻址;端口数据为端口数据为8位时,用位时,用AL,端口数据为端口数据为16位时用位时用A

16、X。汇编语言程序设计汇编语言程序设计第14页例1: IN AX,28H MOV DATA_WORD,AX例2: IN AL,27H TEST AL,00000100B JNZ ERROR;把一个字从端口0028和0029传送; 到存储器的DATA_WORD单元中。;测试某状态寄存器(端口地址为27H); 的第2位是否为1,若为1,则转移到; ERROR处理。例3: MOV DX,126H IN AL,DX OR AL,80H OUT DX,AL;利用某接口的命令寄存器(端口地址为; 126H)的第7位来控制成组数据传送。 汇编语言程序设计汇编语言程序设计第15页8.2数据的输入数据的输入/输出

17、方式输出方式8.2.1 直接直接I/O方式方式 这是一种最简单的程序控制方式。这种方式无需这是一种最简单的程序控制方式。这种方式无需询问外部设备是否准备好(也就是说假设外部设询问外部设备是否准备好(也就是说假设外部设备一直处于准备好状态),当程序需要输入或输备一直处于准备好状态),当程序需要输入或输出时,就向指定端口进行输入或输出操作。采用出时,就向指定端口进行输入或输出操作。采用这种方式所需硬件是较少的,软件设计也比较简这种方式所需硬件是较少的,软件设计也比较简单,输入输出操作完全取决于程序的安排,对外单,输入输出操作完全取决于程序的安排,对外设的情况不予考虑。设的情况不予考虑。下面我们通过

18、下面我们通过I/O程序的例子,说明使用程序的例子,说明使用I/O指令指令直接在端口级上输入输出的方法。直接在端口级上输入输出的方法。汇编语言程序设计汇编语言程序设计第16页I/O程序举例程序举例例例8.2发声子程序发声子程序soundD7 6 5 4 3 2 1 D01/0 0端口61H放大器放大器&T2门门控控 and al,11111100btrig: xor al,2out 61h,almov cx,bxDelay:loop delaydec dxjne trigpop dxpop axretSound endpSound Proc Near push ax push dx mo

19、v dx,cx in al,61h与与1异或取反,与异或取反,与0异或不变异或不变设备控制寄存器端口61H汇编语言程序设计汇编语言程序设计第17页8.2.2查询查询I/O方式方式 上述直接上述直接I/O方式虽然比较简单,但使用上有局限方式虽然比较简单,但使用上有局限性,它不了解外设的实时情况,有些外部设备不性,它不了解外设的实时情况,有些外部设备不一定与计算机同步,或者不能及时响应计算机的一定与计算机同步,或者不能及时响应计算机的输入输出操作,从而很难保证操作的正确性。例输入输出操作,从而很难保证操作的正确性。例如,一个键盘输入设备,只有确认键盘上按了一如,一个键盘输入设备,只有确认键盘上按了

20、一个键,程序才能从连接键盘的端口读取信息,否个键,程序才能从连接键盘的端口读取信息,否则,读取的信息就可能来自前次按下的键,或者则,读取的信息就可能来自前次按下的键,或者是任意不定的信息。同样,对于输出操作也有类是任意不定的信息。同样,对于输出操作也有类似的情况,当需要输出一个信息时,必须确认上似的情况,当需要输出一个信息时,必须确认上次送到端口的信息已经被输出设备取走,否则就次送到端口的信息已经被输出设备取走,否则就要覆盖上次的信息。要覆盖上次的信息。 汇编语言程序设计汇编语言程序设计第18页 查询查询I/O方式就是为了避免上述缺点而设计的。当方式就是为了避免上述缺点而设计的。当主机需要输入

21、输出操作时,首先查询外部设备的主机需要输入输出操作时,首先查询外部设备的当前状态(例如输入设备是否已经有信息送到端当前状态(例如输入设备是否已经有信息送到端口,或者输出设备是否从端口取走上次的信息等口,或者输出设备是否从端口取走上次的信息等等),经确认后再用输入输出指令完成这一次的等),经确认后再用输入输出指令完成这一次的输入输出操作。查询输入输出操作。查询I/O方式适用于方式适用于CPU与外设不与外设不同步的情况。查询方式输入输出的示意流程如图同步的情况。查询方式输入输出的示意流程如图8.2所示。所示。 开始结束取设备状态信息输入或输出数据已准备好吗?YN开始结束取设备状态信息输入或输出数据

22、已准备好吗?YN汇编语言程序设计汇编语言程序设计第19页例例8.3从三个设备轮流输入数据从三个设备轮流输入数据;Round-robin polling dev1: in al,stat1 test al,00100000b jz dev2 call far ptr proc1dev2: in al,stat2 test al,00100000b jz dev3 call far ptr proc2dev3: in al,stat3 test al,00100000b jz no_input call far ptr proc3 no_input:.以上为以上为程序查询方式程序查询方式,其其优点

23、优点是可以用程序是可以用程序安排安排I/O的先后次序的先后次序,最最先查询的优先级最高先查询的优先级最高,缺点缺点是查询中是查询中,CPU大大多处于等待状态多处于等待状态,浪费浪费了了CPU资源资源.实时性也实时性也差差. 解决的办法是采用解决的办法是采用 中断传送方式中断传送方式.汇编语言程序设计汇编语言程序设计第20页8.2.3 中断中断(Interrupt) I/O方式方式中断中断是一种使是一种使CPU中止正在执行的程序而转去处理特中止正在执行的程序而转去处理特殊事件的操作殊事件的操作.引起中断的事件称为引起中断的事件称为中断源中断源, 中断类型中断类型可分为:可分为:外中断外中断(硬件

24、中断硬件中断),内中断内中断(软件中断软件中断)。中断逻辑中断逻辑INT n指令指令INTO 指令指令除法除法错误错误单步单步TF=1非屏蔽中断非屏蔽中断NMICPUIR0IR1IR2IR3IR4IR5IR6IR78259AINTR汇编语言程序设计汇编语言程序设计第21页8.2.3.1 8086的中断分类的中断分类1 软件中断2 硬件中断软件中断又称内中断,有三种: (1)中断指令INT(2)CPU内部的某些错误引起的中断(3)为DEBUG设置的中断(1)非屏蔽中断NMI(2)可屏蔽中断INTR(来自外部设备的中断 可屏蔽中断INTR: 外设向CPU提出中断请求,CPU是否响应还与标志寄存器F

25、LAG的IF位有关。 IF=1,允许中断 ,相应的指令为 STI ;开中断 IF=0,禁止中断 ,相应的指令为 CLI ;关中断汇编语言程序设计汇编语言程序设计第22页中断向量表中断向量表由由256项中断向量项中断向量对应对应256种中断类型,每项占种中断类型,每项占用用4B,高,高2B存放中断处理程存放中断处理程序的段地址,低序的段地址,低2B存放偏移存放偏移地址。各中断处理程序的段地址。各中断处理程序的段地址和偏移地址在中断向量地址和偏移地址在中断向量表中按表中按中断类型号中断类型号顺序存放。顺序存放。如如中断类型号中断类型号为为N的中断向量的中断向量地址为:地址为:4*N4N,4N+1存

26、放中断处理程序的存放中断处理程序的 偏移地址偏移地址(IP)4N+2,4N+3存放中断处理程序存放中断处理程序 的段地址的段地址(CS)0号中断处理程序入口地址号中断处理程序入口地址1号中断处理程序入口地址号中断处理程序入口地址2号中断处理程序入口地址号中断处理程序入口地址0FF号中断程序入口地址00000H00001H00002H00003H00004H00005H00006H00007H0000CH003FCH003FFH8.2.3.2中断向量表中断向量表汇编语言程序设计汇编语言程序设计第23页例:例:int 16H mov bx,al向量地址:向量地址:16H*4=58H00058H00

27、059H0005AH0005BH00000H00001H00002H00003H00004H00005H00006H00007H0号中断入口地址号中断入口地址1号中断入口地址号中断入口地址04H32H20HF4H向量表向量表IPCS3204F420中断处理程序F420:3204STIPUSH DSPOP DSIRET汇编语言程序设计汇编语言程序设计第24页表表8.2 为中断向量表地址分配表为中断向量表地址分配表 从表从表8.2可知,用户中断向量类型号为可知,用户中断向量类型号为60H67H之间之间设置用户中断向量的方式如下:设置用户中断向量的方式如下:XOR AX,AXMOV ES,AXMOV

28、 BX,N*4MOV AX,OFFSET INTUSERMOV ES:WORD PTR BX,AXMOV AX,SEG INTUSERMOV ES:WORD PTR BX+2,AXINTUSER : IRETXOR AX,AXMOV ES,AXMOV BX,N*4MOV AX,OFFSET INTUSERMOV ES:WORD PTR BX,AXMOV AX,SEG INTUSERMOV ES:WORD PTR BX+2,AXINTUSER : IRET;ES指向中断向量表;计算中断向量地址;取用户中断服务程序偏移地址;取用户中断服务程序段地址; 用户中断服务程序; 中断返回汇编语言程序设计汇

29、编语言程序设计第25页设置中断向量设置中断向量 把由把由AL指定的中断指定的中断类型的中断向量类型的中断向量DS:DX放在中断向量表中。放在中断向量表中。预置:预置:AH=25HAL=中断类型号中断类型号 DS:DX=中断向量中断向量执行:执行: INT 21H取中断向量取中断向量把由把由AL指定的中断类型的指定的中断类型的中断向量从中断向量表中中断向量从中断向量表中取到取到ES:BX中。中。预置:预置: AH=35HAL=中断类型号中断类型号DS:DX=中断向量中断向量执行:执行: INT 21H返回时:返回时:ES:BX=中断向中断向量量汇编语言程序设计汇编语言程序设计第26页例例8.4使用使用DOS功能调用功能调用,存取中断向量存取中断向

温馨提示

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

评论

0/150

提交评论