《《汇编语言程序设计》第9章.ppt》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》第9章.ppt(21页珍藏版)》请在三一文库上搜索。
1、第9章 输入/输出程序设计 输入/输出指令 输入输出控制方式 中断 BIOS中断调用,9.1 输入/输出指令,9.1.1 IO端口寻址 当设备通过接口与主机相连时,CPU可以通过接口地址来访问I/O设备。通常将I/O设备码视为地址码,对I/O地址码的编址可采用存储器编址和I/O端口编址两种方式。 1存储器编址方法 存储器编址也叫统一编址,就是将I/O地址看作是存储器地址的一部分。 2I/O端口编址方法 I /O端口编址也称为不统一编址,就是指I/O地址和存储器地址是分开的,所有对I/O的访问必须有专用的I/O指令。,9.1.2 输入/输出指令,1输入指令 格式: IN OPERAND1,OPE
2、RAND2 其中:操作数OPERAND1是AL或AX,操作数OPERAND2是输入端口地址。 输入指令IN是把端口的一个字节或字传送给AL或AX。 2输出指令 格式: OUT OPERAND1,OPERAND2 其中:OPERAND1是输出端口地址,OPERAND2是AL或AX,输出指令OUT把AL或AX中的内容输出到端口。 3. 端口地址的寻址方式 用上两条指令时,有直接和间接两种寻址方式来确定端口地址。 (1) 直接端口寻址 输入/输出指令的端口地址可以是直接给出,此时指令为双字节,第二字节即为一个具体的8位二进制数,可对0-255个8位端口寻。 (2) 间接端口寻址 间接端口寻址是采用寄
3、存器DX的内容来指定端口地址,此寻址方式的指令是单字节指令。因为DX是16位寄存器,所以这种寻址方式可对0-65535个16位端口进行寻址。当端口号大于255时,就应采用间接端口寻址。,返回,9.2 输入输出控制方式,9.2.1 程序控制方式 程序控制方式是在用户程序的控制下实现主机(CPU)与外设交换信息,对哪个端口何时进行输入/输出操作,都在程序中反映出来。具体实现时又有立即传送和程序查询两种方法。 1立即传送方式 采用这种方法时,应该确定外设已经准备好,因此不再询问外设是否准备情况,在程序中需要输入/输出时,就向指定端口进行输入输出操作。 2程序查询方式 若CPU与外设交换信息时,根据外
4、设的工作状态来决定是否进行交换,这就是程序查询方法,这时CPU常常要查询外设的某些标记,然后再作出决定,就是程序查询方式。,9.2.2 中断控制方式,程序控制方式的立即传送方法,不能根据设备实时状况操作,而程序查询方式使这种问题得以解决,但工作时CPU与外设相当串联工作,占用CPU大量时间,因此工作效率不可恭维。如果在外设已准备好的情况下,通知CPU,这时CPU才停下原来的工作与外设实施数据交换,此次信息交换完成后CPU在继续自己的原有工作,按此想法就产生了中断工作方式。 CPU启动外设后仍继续执行原程序,在第K条指令执行结束后,CPU响应了外设的请求,中断了现行程序,转至中断服务程序,等处理
5、完后又返回到原程序断点处,继续从第K+1条指令往下执行。这种方式中断了原程序的运行,所以称为程序中断方式。,9.2.3 直接存储器存取方式,如果外设能直接与主存交换信息而不占用CPU,CPU的资源利用率显然又可进一步提高,这就出现了直接存储器存取的DMA(DirectMemoryAccess)方式。 DMA的数据块传送操作可以分为3个主要步骤: (1)预处理阶段:由CPU执行几条输入输出指令,测试设备状态;向DMA控制器的设备地址寄存器中送入设备号,并启动设备;向内存地址计数器送入起始地址;向字计数器中送入交换的数据字的个数。 (2)正式传送阶段:外设准备好发送数据(输入)或接收数据(输出)时
6、,发出DMA请求,由DMA控制器向CPU发出总线使用权的请求;CPU在本机器周期执行完毕后响应该请求并使CPU的总线驱动器处于高阻状态,然后与系统总线相脱离,DMA控制器接管数据总线和地址总线的控制,并向内存提供地址;在内存与外围设备之间进行数据交换,每交换一个字则地址计数器和字计数器减1,当计数值到0时,DMA操作结束并向CPU提出中断申请。 (3)DMA后处理工作:一旦DMA的中断请求得到响应,CPU将停止主程序的执行,转去执行中断服务程序进行DMA操作的后处理。包括校验送入内存的数据是否正确;决定使用DMA方式传送数据还是结束传送;测试传送过程中是否发生错误。,返回,9.3 中断,9.3
7、.1 中断概念 1中断概念 计算机在执行程序的过程中,在出现异常情况或特殊请求时,计算机停止现行运行程序,转向对这些异常情况或特殊请求的处理,处理结束后再返回到现行程序的间断处,称之为计算机上的“中断”。 2中断的应用场合 (1) 及时处理计算机中的紧急事件 突发故障在用户程序中是无法反映的,但它的出现可导致运行结果出错,甚至出现意想不到的后果,为了及时处理这些故障,应该采用中断方式。 (2) 协调主机与外设工作速度 大部分外设的工作速度均低于CPU,采用程序查询方式,会占用了CPU的宝贵时间。采用中断控制方式,可以很好的解决这一问题。 (3) 实时控制,9.3.2 中断源、中断类型码和中断优
8、先级,1中断源 引起中断的原因或来源称为中断源(Interrupt source)。 (1) 外部中断 不是因为CPU内部原因产生的中断,称为外部中断。而外部中断又分为非屏蔽中断NMI和可屏蔽中断INTR两种。 (2) 内部中断 由CPU内部产生的中断,称为内部中断。按引发情况可分为3类。例如除法运算出错、执行软中断指令、单步中断等。 2中断类型码 PC机为每一个中断源分配一个号码,称为中断类型码。这些中断类型码在PC机中是唯一的,有的是系统统一规定的,有的是由用户指定中断类型码。,3中断优先级 在某时如只有一个中断源提出中断请求,若它是非屏蔽中断源,那么CPU就会立即响应它的请求;若它是可屏
9、蔽中断源,只要IF=1,CPU也会立即响应它的请求。但是,如果在同一时刻有几个中断源同时提出中断请求,CPU只能先响应1个中断源,如果CPU响应了一个中断源的中断请求后,在执行中断处理程序的时候,又有一个中断源提出中断请求,CPU能否响应这个新的中断请求,这就引出了中断优先级问题。,9.3.3 中断矢量表 不同的中断来自不同的中断源,因此有着不同的处理任务,PC机有256个不同的中断,对每一个中断源都要设计一个中断处理程序,而且每一个中断程序都有自己的入口地址,将256个中断程序的入口地址放到一起,就形成了一个表,称之为中断矢量表。PC机的中断矢量表是在在内存最小地址的1k字节(绝对地址为:0
10、0000H003FFH)空间建立的,由此表确定了中断类型码与该中断源所对应的中断处理程序之间的一一对应联系。图9.12给出中断矢量表的安排,表内存放有256个中断处理程序入口地址。每个入口地址由4个字节组成,两个低字节存放入口地址的偏移量,两个高字节存放它的段基值。中断响应以后,表中对应的4个字节的内容分别被送人IP和CS,完成程序转移。表中中断类型0、类型1、类型2等表示这个入口地址对应的中断类型码。如果已知现在响应中断的中断类型码,就可以从中断矢量表中找到该中断源的处理程序入口地址。设中断类型码为N,则有: 中断矢量地址=中断类型号*N 也就是(4*N,4*N十1)IP;(4*N+2,4*
11、N十3) CS 这样就把中断处理程序的入口地址的偏移量和段基值分别送人IP和CS,然后到此地址执行该中断的服务子程序。,9.3.4 中断过程,一个完整的中断过程,要先后经历中断请求、中断响应、中断处理及中断返回等4步骤。 1中断请求 这是引起中断的第1步。中断源产生中断请求的条件,对不同的中断源是不一样的。 2中断响应 CPU在每执行一条指令的后期,都要查询是否有中断请求。若有,就按照优先顺序给予响应或不响应。查询中断请求按优先级从高到低的顺序进行。如果CPU响应,就识别并读出得到响应的中断源的类型码。 3中断处理 由于每个中断处理的任务不同,因此具体中断处理不可能一样,但是也存在一些共性。,
12、简单的说中断处理一般可由四个部分组成,即:现场保护、具体中断处理、现场恢复以及中断返回指令。 4中断返回 每一个中断处理子程序的最后要使用中断返回指令IRET以退出中断,返回原断点处。该指令是无操作数指令,其功能是:首先从堆栈中弹出中断断点地址,分别送人IP和CS,然后恢复标志寄存器内容。,9.3.5 软中断及有关的中断指令,软中断属于内部中断,软中断(Soft Interruptions)指令的格式为: INT n 其中n为中断类型号。 PC机的软中断分为BIOS中断、DOS中断和自由中断三部分。 1BIOS 中断(10H-1FH) 固化在ROM中,称为ROM BIOS,常用中断有: INT
13、 10H-屏幕显示 INT 13H-磁盘读写 INT 16H -键盘输入 2DOS中断(20H-3FH) 其中22H、23H、24H号是 DOS专用中断,21H、20H、25H、26H、27H、2FH 为用户可调用中断。 3. 自由中断(40H-FFH) 自由中断主要供系统和用户应用程序扩充使用。,返回,9.4 BIOS中断调用,BIOS是Basic Input/Output System的缩写,是固化在PC机ROM中的基本输入输出系统,它提供系统加电自检、引导装入、主要I/O设备的处理程序以及接口控制等功能模块,一般以中断处理程序的形式存在。BIOS可以处理所有的系统中断,如键盘、显示器、磁
14、盘、打印、日期与时间等。BIOS是模块化的结构形式,每个功能模块的入口地址都在中断矢量表中。在1k中断矢量表中,共有256个中断调用的入口地址。对这些中断调用是通过软中断指令INT来实现的,软中断指令的操作数就是中断类型码。 使用BIOS功能调用,给程序员编程带来很大的方便,程序员不必了解硬件I/O接口的特性,可直接用指令设置参数,然后中断调用BIOS中的程序,所以利用BIOS功能编写的程序可读性好,易于移植。有时为了提高处理效率,应用程序也可以通过输入输出指令直接操纵外设接口控制外设,但这种情况下程序员要熟悉相关的硬件特性,而且应用程序的设计比较复杂,这是BIOS不方便之处。,9.4.1 键
15、盘输入中断调用,键盘中断调用(1NT 16H)现有9个子功能,其中0、1和2号功能较常用。键盘调用01H-03H子功能见下表。,在AL中各状态位意义如下,显示器输出控制中断调用的中断类型号为10H,总共有00H-1CH的子调用,通过这些子功能子程序的调用,可以在屏幕指定位置上以字符方式或图形方式显示。 在子程序的调用中00H、02H、03H、05H、06H、07H、08H、09H、0AH、0CH、0DH和0CH是基本的调用。 1视频模式 00H号子调用是指定视频模式,PC机显卡有文本和图形两种显示模式。 文本显示方式,是指以字符为单位显示的方式,字符通常是指字母、数字、普通符号和一些特殊符号(
16、如矩形块等)。在这种显示方式下,显示缓冲存储区中存放的是字符的ASCII码和对应的显示属性,每个字符占用两个字节的空间。文本模式可以显示256种不同字符,如在3号文本显示模式下,显示器的屏幕被划分成80列25行,因此一屏最多可以显示80x25(2000)个字符。 图形显示方式中,显示缓冲存储区中存放的是“像素”点的信息,每个像素对应屏幕上的一点位置,它的值为“0”或者“1”,为“0”就不在屏幕上打点,为“1”则在屏幕上打点。,9.4.2 显示器输出控制中断调用,2字符的属性 字符的显示属性是字符显示时的特性,用一个描述颜色的字节信息来规定。文本方式的显示属性字节,字符单色文本显示和彩色文本显示
17、的属性字节略有区别,对于单色显示,位6、5、4或位2、1、0三位全为0是表示黑色,全是1时表示黑色白色,对于彩色显示是由RGB这3位颜色组合给出的颜色。其中BL为0表示前景字符不闪烁,为1表示前景字符闪烁;I为0表示前景字符为一般强度,为1表示前景字符为高强度。单色文本方式的显示属性字节取值和采色(16色)文本方式的颜色组合请看书中表。 3调用格式 各子功能调用格式为: MOV AH,功能号 ;其他调用参数 INT 10H ;功能调用 其他调用参数的一般规则是: 要显示的字符或像素值通常在AL中; X坐标(列号):图形方式在CX中,字符方式在DL中; Y坐标(行号):图形方式在DX中,字符方式
18、在DH中; 显示的页号在BH中。,9.4.3 时间中断调用,INT 1AH称为系统定时器和实时时钟(RTC)服务,包括11个子功能调用,其中常用的是00和01号子功能,下面主要介绍这两个功能调用。 1读取时间计数器当前值(00H) 调用前:AH=00H 子功能调用返回时: CX=时间计数器的高位字 DX时间计数器的低位字 AL=0:未计满24小时 AL=1:已计满24小时 时间计数器约54.926ins计数一次,所以可按下列公式计算出当前的时间: 时:时间计数器的值(CX:DX)65543;时的余数=时间计数器的值MOD 65543 分:时的余数/1092;分的余数=时的余数MOD 1092
19、秒:分的余数1821 2设置时间计数器的当前值(01H) 子功能调用前:AH=01H CX=时间计数器当前值高位字 DX=时间计数器当前值低位字 按下列公式计算出当前时间值: CX:DX=(时*65543)十(分*1092)十(秒*18.21),返回,9.4.4 中断调用程序举例 1. 键盘 【例9.5】将用户按的键盘显示出来,当按下FHIFT键后结束运行,请编写程序。 SHIFT_L=02H; SHIFT_R=01H STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK BEGIN:
20、 MOV AH,02H ;取键盘状态字节 INT 16H TEST AL,SHIFT_L+SHIFT_R ;判断是否按下SHIFT键 JNZ EXIT ;按下,结束程序 MOV AH,01H ;判断是否有键可读 INT 16H JZ BEGIN ;没有,转去继续读键 MOV AH,00H ;读键 INT 16H MOV DL,AL ;显示所读键 MOV AH,02H INT 21H JMP BEGIN ;继续读键 EXIT: MOV AH,4CH INT 21H CODE ENDS END BEGIN,9.4.4 中断调用程序举例 2显示输出 【例9.6】在字符显示方式下显示College o
21、f Computer Science 置640x 200图形方式 LOP1: LEA BX,CHAR PUSH BX MOV DL,COL MOV CX,58,LOP2: MOV AH,2 MOV DH,ROW INC DL INT 10H POP BX MOV AL,BX INC BX PUSH BX PUSH CX MOV AH,0AH MOV BH,0 MOV CX,1 INT 10H POP CX LOOP LOP2 POP BX QUIT: MOV AH,4CH INT 21H CODE ENDS END START,【例9.8】每隔5.5S从键盘读一个字符并将其ASCII码送入内存缓冲区,共200个字符。 CHAR DB 200 DUP(?) STR: MOV CX, 200 LEA BX, CHAR STI LOP_1: MOV AH,1 PUSH CX MOV CX,0 MOV DX,0 INT 1AH ;时间中断调用 LOP_2: MOV AH,0 INT 1AH CMP DL,200 JNZ LOP_2 MOV AH,0 INT 16H MOV BX,AL INC BX POP CX LOOP LOP_1 HLT ;停止程序,3时间中断应用,
链接地址:https://www.31doc.com/p-2154229.html