




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章输入/输出程序设计学习目的:1)掌握计算机接口的概念2)掌握CPU如何和外部设备接口交换信息各种方法,以及CPU控制外部设备正常运转的基本原理.3)理解接口设计的大致过程和方法.4)掌握端口访问指令的功能、使用方法、寻址方式5)能够理解简单的接口控制程序。6)掌握必要的DOS调用和BIOS调用,并且能够在程序设计中正确使用。第十章输入/输出程序设计110.1计算机接口的基本构成和工作原理由于计算机的外部设备种类丰富,处理速度差异较大,设备中使用的信号标准也各不相同,如果使用CPU直接对外部设备进行控制将使计算机系统本身的设计变得非常复杂。为了方便的管理外部设备,协调外部设备和CPU间速度的差异,消除外部设备和CPU之间信号标准的差异,产生了接口的概念。10.1计算机接口的基本构成和工作原理2(1)接口的概念接口,顾名思义,为了使两种本来互相不匹配的事物能够相互沟通而产生的一种中介。(例如,翻译就起到这种作用)。计算机接口,由特定的电路结构来实现,具有两面性,如下图所示:(1)接口的概念3计算机接口:接收总线发来的地址信号。接收总线发来的控制信号和数据;向总线发送状态信号和数据设备接口:把设备的输入信号转换为二进制数据。把CPU输出的二进制数据转换为设备信号。协调外部设备和CPU的速度差异端口:接口电路中一组存储单元,CPU可以使用指令访问。包括状态端口,控制端口,输入或输出数据端口。CPU和接口交换信息的枢纽。外部设备计算机系统总线控制状态数据地址计算机接口:设备接口:端口:外部设备计算机系统总线控制状态数4通常所说的“设备接口”、“计算机接口”等名称都是泛指接口,没有区别二者的具体含义。从设计角度上讲,设备接口部分的电路设计是针对具体设备的,如果设备的信号机制和工作机理比较复杂,那么相应设备接口的设计也就变得困难,调试过程也比较繁琐。计算机接口(总线接口)的设计相对简单,按照具体计算机系统给定的总线标准来设计,选择所要使用的各种控制信号、地址信号、数据信号,然后设计相应的电路。端口是连接设备接口、计算机接口的枢纽,其设计必须考虑两方面的可操作性和适应性。通常所说的“设备接口”、“计算机接口”等名称都是泛指接口,没5接口内经常使用的端口状态端口:一般是只读的端口,为CPU提供接口当前的工作状态,以便CPU判断当前应该针对接口做一些什么操作.控制端口:一般是只写的端口,CPU通过设置控制端口,可以设定接口的工作方式,向接口发送各种操作命令.数据输入端口:如果设备具有输入功能,那么通过把输入数据存放在输入端口,等待CPU来读取.数据输出端口:如果设备具有输出功能,那么CPU把输出数据传送到输出端口作为接口的输出数据.在实际应用中,各类端口可能会在物理上重叠.接口内经常使用的端口6(2)接口的设计过程1)设计设备接口、总线接口的逻辑电路图,选择所需要的芯片,包括端口的分析和设计。(这里只是确定接口电路的逻辑结构)2)设计接口电路的实际电路图,主要针对接口板卡中具体的线路布局。(这时板卡的实际形状、走线细节、各个芯片在板卡中的实际位置,都已经完全确定)。可以参见后面的图例。3)根据实际电路图制作板卡样品,在板卡样品上插上或者焊接上对应的芯片。(实际的接口电路已经制作完成)(2)接口的设计过程7四川大学计算机学院汇编语言课件ch1084)编制针对端口的接口控制程序,该程序要能够完成接口电路的基本数据输入、输出功能。(简单的驱动程序已经编写完成)5)把板卡样品插入总线插槽,运行接口控制程序,调试板卡硬件以及控制程序本身,如果程序有错误,那么修改程序;如果接口电路的设计有问题,那么非常麻烦,需要回到设计的第一步重新开始整个设计过程。4)编制针对端口的接口控制程序,该程序要能够完成接口电路的基9(3)8086/8088CPU中访问端口的指令1)I/O端口的编址空间I/O端口和寄存器、内存单元具有相同的特性,同属于存储单元,用于存放二进制信息。只是这三种存储单元所在的物理位置不同,寄存器位于CPU内部,内存单元位于内部存储器内部,I/O端口位于接口电路当中。(3)8086/8088CPU中访问端口的指令10一般来说,在各种计算机系统中,寄存器具有独立的编址空间。在8086汇编语言中,对寄存器地址的引用和对内存单元地址的引用有着明显的差别,这种差别反映了二者具有不同的编址空间。对于I/O端口来说,有统一编址和独立编址两种方式,可能在不同的计算机系统中,使用不同的编址方式。一般来说,在各种计算机系统中,寄存器具有独立的编址空间。11统一编址方式是指内存单元和I/O端口共存于同一个地址空间内。这种方式需要牺牲一部分内存地址作为I/O端口的地址,I/O端口和内存单元不会出现重复的地址。如果采用这种编址方式,访问内存单元和I/O端口没有任何区别,使用的指令、寻址方式、地址表示形式可以完全一致,唯一的区别就是具体逻辑地址的差异。统一编址方式是指内存单元和I/O端口共存于同一个地址空间内。12独立编址方式是指I/O端口的地址和内存单元的地址在不同的两个地址空间。这种编址方式中,内存单元地址和I/O端口地址毫不相干,二者可能出现重复的地址。访问内存单元和I/O端口需要使用不同的指令,不同的控制信号,由不同的指令来区别这两个完全不同的地址空间。独立编址方式是指I/O端口的地址和内存单元的地址在不同的两个13在8086/8088系统中,I/O端口主要采用独立编址方式。控制信号方面,使用RD信号表示读操作、使用WR信号表示写操作,同时使用M/IO信号区别两个地址空间,该信号等于1时,表示访问内存单元,等于0时表示访问I/O端口。指令方面,访问端口和访问内存单元使用两套不同的指令,访问内存单元的指令执行时会使M/IO信号为1,访问I/O端口的指令执行时会使该信号为0。在8086/8088系统中,I/O端口主要采用独立编址方式。14说8086主要采用独立编址方式,是因为有特殊情况存在。一般来说,在接口中具有独特功能的存储单元是经典的端口。在接口中拥有连续地址的大块存储单元一般没有被看作端口(例如显示存储器)。这种位于接口中的大块存储部件被看作内存单元的一种。在8086中,对于显存的访问和普通内存的访问没有区别,采用统一编址方式。在访问显存的时候,需要牺牲一部分内存空间。说8086主要采用独立编址方式,是因为有特殊情况存在。152)访问端口的指令读端口指令:把端口数据读入CPU的寄存器中。INAL,XXHINAX,XXH上面这种格式为直接寻址方式,XXH是端口地址,范围为0到255。2)访问端口的指令16INAL,DXINAX,DX间接寻址方式,端口地址由DX寄存器的内容给出,变化范围为0到65535。8086系统中,最多可以访问65536个端口。INAL,DX17写端口指令:把CPU寄存器中的数据送到端口保存。直接寻址方式:OUTXXH,ALOUTXXH,AX间接寻址方式:OUTDX,ALOUTDX,AX8086系统中,端口寻址方式只有直接寻址和间接寻址两种,比内存单元的寻址方式少得多。注意,8086系统中对端口访问没有段基值的概念,生成物理地址时固定使用0作为段基值,因为端口空间为64K,正好是一个段的大小.写端口指令:把CPU寄存器中的数据送到端口保存。1810.2接口的控制方式(1)程序控制方式编制程序对接口进行控制.在这种控制方式下,计算机与外设之间的信息交换完全在程序的控制下进行,在什么时刻与什么样的端口交换数据完全由应用程序决定.程序控制方式按照其数据传送特征,又可以分为两种类型.10.2接口的控制方式191)无条件传送方式不需要了解接口是否已经准备好而直接进行数据交换的方式.这种控制方式假定接口总是已经准备好数据交换,对于输入设备,假定它始终存在输入数据;对于输出设备,假定它始终能够接收输出数据.这种接口控制适用于高速的外部设备(反应速度比CPU块),或者简单设备.1)无条件传送方式20这种方式是CPU主动进行数据交换,什么时刻以什么方式进行数据交换,完全由CPU执行的程序来决定,接口完全是被动的.四川大学计算机学院汇编语言课件ch10212)程序查询方式这种方式在CPU从接口读取输入数据或者把输出数据发送到接口之前必须先检查接口是否已经准备好.这种查询过程是通过查询接口中状态端口来完成的,使用循环程序结构,不断从状态端口读取数据,判断当前状态是否为“准备好”.如果设备始终没有准备好,那么CPU就不断执行这段循环查询程序;如果已经准备好,那么从数据输入端口读入所需要的数据.2)程序查询方式22这种接口控制方式仍然是CPU主动进行数据交换,接口只是提供一些状态信息给CPU的处理过程提供参考,何时采用何种方式交换数据仍然由CPU决定.这种方式适合于慢速设备(处理速度总是比CPU慢,例如键盘、鼠标).查询过程有如下两种:这种接口控制方式仍然是CPU主动进行数据交换,接口只是提供一23设备是否准备好数据交换NY用这种循环结构进行数据交换,CPU只能针对当前接口进行操作,其他任何操作都不能执行,除非退出这个接口控制程序。设备是否数据交换NY用这种循环结构进行数据交换,24设备是否准备好进行其他处理,或者执行其他程序(如果操作系统支持)进行数据交换NY用这种循环结构进行数据交换,CPU可以有一定的时间处理其他过程甚至执行其他程序,但是这是以延缓数据交换为代价的。设备是否进行其他处理,进行数据交换NY用这种循环结构进行数据25这里举一个实际的例子,包括了无条件传送和程序查询两种接口控制方式,分别针对两个特性不同的硬件设备。例.假设有一个4*4的小键盘,和一个1*2的7段LED显示器,要求设计大致的硬件逻辑并编程实现如下功能:按下一个数字键后,对应数字显示到低位LED上,低位LED原来的显示内容移到高位LED(如图)这里举一个实际的例子,包括了无条件传送和程序查询两种接口控制260123456789ABCDEF0123456789ABCDEF27硬件逻辑:(1)键盘设计:按照最简单的原理设计一个4*4的键盘,其工作原理如下图所示。硬件逻辑:284bit4bit4bit4bit1111(0)(1)(2)(3)(0)(1)(2)(3)(0)(1)(2)(3)101111111101(0)(1)(2)(3)高4低430H,只写低4高430H,只读444bit4bit1111(0)(1)(2)(3)(029端口操作解释:1)写入操作(针对控制端口)向30H端口写入0FFH(全1):检测每一个键是否出现“按下”的状态。向30H端口写入02H(高4:0000,低4:0010):检测第1列键中是否出现“按下”的状态。向30H端口写入22H(高4:0010,低4:0010):检测第1行和第一列键中是否出现“按下”状态。端口操作解释:302)读入操作(针对状态兼数据输入端口)读取30H号端口的信息,可以检测键盘中有无“按下”的键,通过检测高4位和低4位中“0”的位置,可以确定具体哪一个键被按下。注意键盘的使用限制:任何时刻至多只能有一个键处于“按下”状态,否则无法判断具体被按下键的位置(只针对这里设计的键盘)。2)读入操作(针对状态兼数据输入端口)31(2)LED显示器:硬件逻辑设计如下图所示。四川大学计算机学院汇编语言课件ch1032译码器译码器7bits7bits4bits4bits4bits4bits8bits,31H,读/写高4低4显示由译码器的7位输出控制,1表示对应发光管发光,0表示对应发光管熄灭。译码器的7位输出称为显示代码译码器把4bits表示的1位16进制数转换为对应的显示代码译码器译码器7bits7bits4bits4bits4b33012345601436“2”的显示代码:01011011,可以考虑没有译码器时把十六进制数转换为对应显示代码的方法.七段显示器无法区别“8”和“B”,必须添加更多的发光管012345601436“2”的显示代码:0101101134端口访问解释:向31H号端口写入8位数据,低4位数值为低位LED显示器所要显示的一位16进制数,高4位数值对应高位LED显示器所要显示的一位16进制数。从31H号端口读入8位数据,低4位和高4位分别为当前两位LED显示器所显示的一位16进制数。端口访问解释:35接口控制方式分析:(1)键盘控制:由于键盘的输入数据不是任何时候都有的,需要判断当前是否有键按下,显然适合使用程序查询方式进行控制。(2)LED显示控制:LED显示器是简单的设备,它总是可以立即显示CPU送来的数据,总是处于“准备好”的状态,适合使用直接传送方式进行控制。接口控制方式分析:36技术细节:如果读取30H号端口,检测到其中出现了为“0”的数据位,对应键盘的状态可能有两种:1)键盘抖动:电路上信号的抖动、键盘的物理抖动、按键的手指抖动,这些都是抖动现象,特征是信号不稳定,“0”数据位持续的时间较短,一般是几个MS或者几十个MS。2)按键:用户确实按下了键盘中的某一个键,特征是信号稳定,“0”数据位持续的时间较长,一般是几百个MS。解决方法:第一次检测到30H端口的“0”数据位以后,延时0.2S(200MS)左右,再一次检测30H端口中的“0”数据位是否存在,如果仍然存在,解释为“按键”状态,可以从30H端口读取键盘的扫描代码;如果不存在“0”数据位,那么解释为“抖动”现象,应该继续循环重新检测键盘的状态。技术细节:37程序段如下: MOV AL,0FFH OUT 30H,ALLOP1: IN AL,30H CMP AL,0FFH JZ LOP1 NOP ;这里只是象征性延时 NOP ;延时一般可用循环实现 NOP IN AL,30H CMP AL,0FFH JZ LOP1程序段如下:38 XOR BL,BL PUSH AX AND AL,0FH MOV CX,3 SHR AL,1LOP2: JNC L1 INC BL SHR AL,1 LOOP LOP2 XOR BL,BL39L1: POP AX MOV CL,4 ROL AL,CL AND AL,0FH MOV CX,3 SHR AL,1LOP3: JNC L2 ADD BL,4 SHR AL,1 LOOP LOP3L1: POP AX40L2: IN AL,31H MOV CL,4 ROL AL,CLAND AL,0F0H AND BL,0FH OR AL,BL OUT 31H,AL JMP LOP1L2: IN AL,31H41可见,在执行上面程序时,CPU没有空闲时间执行其他程序,始终在循环检测键盘是否有键按下.可以想象这样一种工作方式,小键盘上有键按下时才去执行上述程序中的处理(接收键码,把数据送到七段显示器显示);没有键按下时CPU就可以执行其他程序.这种工作方式称为中断工作方式,可以避免CPU对设备接口的循环等待,大幅度提高计算机系统的工作效率.可见,在执行上面程序时,CPU没有空闲时间执行其他程序,始终42(2)中断控制方式(A)中断的概念两个人正在交谈,突然来了一个电话,接电话的过程就是一个中断过程(它打断了谈话),电话打完后,两个人继续交谈,谈话的恢复就是一个中断返回过程.在计算机系统中,也存在着这样的概念,CPU正在执行一个程序,外部设备需要CPU读取输入数据或者发送输出数据,或者外部设备出了故障,需要CPU执行设备控制程序(中断服务程序)进行相应的处理,此时就会产生中断.(2)中断控制方式43(B)中断服务程序和中断向量表中断服务程序是系统提供的一段服务程序,针对某种设备接口的特定处理,或者一段完成系统功能的调用.每一个中断服务程序都有自己的起始地址,包括段基值和偏移量.要执行中断服务程序就首先需要知道它的起始地址.在内存中从0地址开始的1K存储空间中,存放的是中断向量表.任何其他数据和程序都不能占用这部分空间.中断向量表中按顺序存放着各个中断服务程序的起始地址,称为中断入口地址,每一个入口地址占用4个字节的空间.总共有256个中断入口地址,这也是8086/8088系统所能直接支持的最大中断数目。(可以通过8259芯片级连的方式扩充中断数目).(B)中断服务程序和中断向量表44(B)中断源和中断类型号引起中断的原因称为中断源(InterruptSource),中断源分为如下几种:内中断:来自CPU内部的中断.a)执行INT指令引起的中断,也就是DOS或者BIOS中断调用b)CPU内部错误引起的中断,例如除法错误引起的0型中断.c)TF标志位引起的单步中断.(B)中断源和中断类型号45外中断:来自CPU外部,一般是来自设备接口的中断.a)非屏蔽中断NMI(Non-MaskableInterrupt):通过NMI控制信号线传送的中断信号,不受IF标志控制,如果出现这种中断,CPU在执行完当前指令以后,立即转入中断服务程序.这类中断一般用于处理紧急的设备故障,例如:电源掉电.b)可屏蔽中断INTR:通过INTR控制信号线传送的中断信号,可以由IF标志控制是否屏蔽,除了这一点区别,其处理过程和NMI中断一致.一般是外部设备请求进行数据交换.外中断:来自CPU外部,一般是来自设备接口的中断.46中断类型号(简称中断号):就是中断源的编号,如果是软件中断,由INT指令的参数N给出中断类型号;如果是硬件中断,那么由设备接口或者CPU内部相应硬件提供对应的中断类型号.在执行中断服务程序前,CPU会自动根据中断类型号换算对应的中断服务程序入口地址.中断类型号(简称中断号):就是中断源的编号,如果是软件中断,47(C)中断的过程中断过程大致分成如下几个步骤:1.中断请求:设备在需要CPU执行中断服务程序时,通过控制总线(状态线)向CPU提出中断请求,发中断请求信号INTR.2.中断响应:CPU决定何时响应设备发出的中断请求,当前指令执行完毕后(注意,中断不能打断指令的执行),向设备接口发送中断响应信号INTA.设备接口收到INTA信号以后向数据总线发送8位中断号(低8位).(C)中断的过程48收到中断号以后,按顺序把标志寄存器、CS、IP等寄存器的内容压入堆栈,把IF、TF标志置0,然后执行如下过程:CPU按照如下过程把中断号n转换为中断入口地址.IP<=(4*n,4*n+1)CS<=(4*n+2,4*n+3)实际上,是把中断向量表中的第n个中断入口地址取出来送到IP和CS中.最后程序流程转到中断入口。收到中断号以后,按顺序把标志寄存器、CS、IP等寄存器的内容493.中断处理中断处理的过程也就是执行中断服务程序的过程。4.中断返回中断返回通过执行IRET指令实现,从堆栈中恢复IP、CS、标志寄存器的内容,返回到被中断程序继续执行。3.中断处理50d)中断服务程序的编制和使用继续使用前面的例子,对4*4的键盘和1*2的LED显示器编制中断服务程序,使用中断控制方式来控制CPU和接口间的数据交换.由于要使用中断控制,必须在键盘的硬件逻辑中加入中断信号生成的逻辑模块.d)中断服务程序的编制和使用514bit4bit4bit4bit1111(0)(1)(2)(3)(0)(1)(2)(3)(0)(1)(2)(3)101111111101(0)(1)(2)(3)高4低430H,只写低4高430H,只读8位到数据总线生成中断请求8输入1输出与门INTR0有效8位中断类型号8位去数据总线低8位INTA0有效三态门444bit4bit1111(0)(1)(2)(3)(052把键盘接口的中断类型号分配为61H,避免与已经有的系统中断冲突.中断类型号的分布情况可以参见教材表10-3。有一些是用户可以使用的,有一些则是系统保留的。注意:实际设计硬件时,必须注意端口地址、中断类型号的分配,尽量不与其他硬件接口相冲突,最好设计为可以使用指令设置的端口地址和中断类型号,这样可以使硬件接口的适用性更强。把键盘接口的中断类型号分配为61H,避免与已经有的系统中断冲53中断服务程序相对于查询方式控制程序的特点:不需要循环查询接口的状态端口,因为一旦有中断发生,一定有数据输入(这里是有键按下)。只需要直接从数据端口读取数据即可。由于LED显示器的显示总是和键盘的输入联系在一起的,所以不需要编制单独的控制程序,对它的控制直接合并到对键盘进行控制的中断服务程序中即可。中断服务程序相对于查询方式控制程序的特点:54中断服务程序主体如下:(抖动由硬件解决) STI ;一般允许处理其他中断 IN AL,30H XOR BL,BL PUSH AX AND AL,0FH MOV CX,3 SHR AL,1LOP2: JNC L1 INC BL SHR AL,1 LOOP LOP2中断服务程序主体如下:(抖动由硬件解决)55L1: POP AX MOV CL,4 ROL AL,CL AND AL,0FH MOV CX,3 SHR AL,1LOP3: JNC L2 ADD BL,4 SHR AL,1 LOOP LOP3L1: POP AX56L2: IN AL,31H MOV CL,4 ROL AL,CL AND AL,0F0H AND BL,0FH OR AL,BL OUT 31H,AL ;向8259芯片发送EOI中断结束命令 ;8259P0是8259命令端口的编号 MOV AL,20H MOV DX,8259P0 OUT DX,AL ;中断返回 IRETL2: IN AL,31H57中断服务程序的载入由于随时可能产生中断,所以中断服务程序一定是在操作系统刚开始运行的时候就已经被装入到内存随时准备被调用。中断服务程序是常驻内存程序的一种。把中断服务程序装入内存的过程称为载入过程。BIOS中断服务程序是固化在BIOS芯片中的,所以不需要载入过程。中断服务程序的载入58DOS中断服务程序或者其他操作系统提供的中断服务程序都需要载入过程,在操作系统刚开始运行的时候执行这个过程,把相应的中断服务程序装入到内存中,并且按照装入的中断入口地址修改中断向量表。只有正确的载入了中断服务程序并且正确的设置了中断向量表,中断服务程序才可能被正确的执行。所有用户编制的中断服务程序,也必须经历这样一个载入过程才能正确运行。DOS中断服务程序或者其他操作系统提供的中断服务程序都需要载59载入中断服务程序需要使用另外一个程序来完成,称为中断初始化程序。但是为了方便起见,通常把初始化程序和中断服务程序写成同一个程序。一般来说,中断服务程序作为中断程序的主体,中断初始化程序作为中断程序的框架。用户自己实现的中断服务都必须有这样一个初始化过程,否则中断服务仍然无法启用。在这个例子中,中断初始化程序(中断程序的框架)如下:载入中断服务程序需要使用另外一个程序来完成,称为中断初始化程60 DATA SEGMENT ;8259芯片命令端口号 8259P0 EQU 40H ;8259芯片中断屏蔽端口号 8259P1 EQU 41H …… DATA ENDS STACK1 SEGMENT STACK DW 30H DUP(0) STACK1 ENDS DATA SEGMENT61 CODE SEGMET
ASSUME CS:CODE,DS:DATA,SS:STACK1INT61H: ..….;中断服务程序START: MOV AL,0FFH OUT 30H,AL ;初始化键盘扫描 ;下面是设置中断入口地址 ;修改中断向量表 MOV AL,61H MOV AH,25H MOV DS,SEG INT61H MOV DX,OFFSET INT61H INT 21H CODE SEGMET62 ;消除8259上的中断屏蔽,允许中断 MOV AL,0 MOV DX,8259P1 OUT DX,AL STI ;CPU内部允许中断 ;下面使程序驻留内存,并且返回DOS MOV AX,3100H MOV DX,$-INT61 INT 21H CODE ENDS END START ;消除8259上的中断屏蔽,允许中断63使用中断调用,避免程序对接口的循环查询操作,采用接口主动提出请求进行数据交换的方式,使CPU的工作效率大幅度提高。在现有的计算机设备中,除了数据传输速度极快,数据传输量极大的设备以外,多数设备采用中断工作方式和CPU进行数据交换。一般来说,中断服务程序都是由相应硬件接口的开发厂商提供的,它们为操作系统提供方便的中断调用。用户也可以使用这些中断调用来完成特定的硬件功能。使用中断调用,避免程序对接口的循环查询操作,采用接口主动提出64(3)DMA控制方式(直接存储器存取方式)和程序控制、中断控制不同,DMA控制方式对接口采用全硬件的控制机制,不执行任何程序。原理:一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据),它会先向CPU发送DMA请求信号,CPU收到该信号后,会按DMA信号的优先级和提出DMA请求的先后顺序响应DMA信号。CPU对某个设备接口响应DMA请求时,会让出总线控制权,提出请求的设备接口可以通过总线直接进行数据传送(不通过CPU),数据传送完毕后,设备接口会向CPU发送DMA结束信号,交还总线控制权。注意:DMA请求信号可能会打断一条指令的执行,使它暂时停止执行,数据传送完毕后才恢复该指令的执行。(3)DMA控制方式(直接存储器存取方式)6510.3DOS系统功能调用操作系统为了使用户能够更方便的使用硬件设备,使用户在不了解硬件具体工作原理的情况下也能够使用硬件设备,都会提供丰富的系统功能调用。通过使用系统功能调用,用户不需要了解接口的工作原理,不需要熟悉接口中各个端口的功能和使用方法,只需要传递系统调用需要的入口参数,按照规定取得出口参数,就可以完成几乎所有的硬件操作。在汇编语言这个开发平台上,系统功能调用是以中断服务程序的形式给出来的。用户通过使用INT指令执行系统调用。10.3DOS系统功能调用66系统调用就是中断当中的软中断,它的程序组织形式就是中断服务程序,中断服务程序入口地址也是存放在中断向量表当中。系统调用分为两个层面,低层为BIOS调用,高层为DOS调用。DOS调用建立在BIOS调用的基础之上。四川大学计算机学院汇编语言课件ch1067由于早期的硬件设备种类比较单一,所以底层的、常用的硬件接口控制程序(硬中断服务程序、BIOS系统调用)都被固化在BIOS芯片中。抽象级别更高的,使用更方便的硬件控制程序(DOS调用)由操作系统实现。如果是用户自己设计的硬件接口,相应的设备驱动程序(包括硬中断服务程序、系统调用),都只能通过中断向量表中未被使用的中断类型号。由于早期的硬件设备种类比较单一,所以底层的、常用的硬件接口控68下面介绍一些常用的DOS调用(主要介绍INT21H):(一)有关键盘输入和字符显示的DOS调用下面介绍一些常用的DOS调用(主要介绍INT21H):69(1)单字符输入1)01H号子功能MOV AH,01H ;指定功能号INT 21H ;系统调用从键盘读取一个字符,执行INT指令后,只要用户不按键,那么始终等待,用户按下一个键以后,系统调用把该键对应的ASCII码送到AL保存,并且送到显示器显示,然后退出系统调用,返回主程序.(1)单字符输入7001H号子功能可以检测CTRL+C键,如果用户在系统调用执行时按下CTRL+C,那么系统调用会终止主程序,返回操作系统.能够实现单字符输入的还有21H号DOS调用的06H、07H、08H号子功能。07H:和01H号子功能大致相同,只是不回显键入的字符,也不检测CTRL+C键。08H:和01H号子功能大致相同,要检测CTRL+C键,但是不回显键入的字符。01H号子功能可以检测CTRL+C键,如果用户在系统调用执行7106H:这个子功能既能用于键盘输入,又能用于显示输出。初始化入口参数时,把DL寄存器的内容置为0FFH,表示输入功能。它会先检测键盘的输入缓冲区(队列,09H硬中断服务程序把接收到的键码按先后顺序存放于此)是否有输入数据,如果有输入数据,取出队首的字符并送到AL保存;如果没有输入数据,把0保存到AL。06H子功能不会等待用户按键,适合用于键盘状态的检测。06H:这个子功能既能用于键盘输入,又能用于显示输出。初始化72单个字符输入的例子:参见教材P229的例10.4.1(2)字符串输入0AH号子功能:从键盘上接收一个字符串,保存到入口参数指定的缓冲区中,并在显示器上同步回显用户输入的字符串。用户在缓冲区的第0个字节给出输入字符串的最大字符数,如果在输入时已经达到规定最大字符数,该子功能会停止接收键入,并等待用户键入最后的回车键。在执行0AH子功能时,只要按下回车键就表示字符串输入完毕。单个字符输入的例子:参见教材P229的例10.4.173字符串输入完毕后,系统调用会把实际输入的字符数填入缓冲区的第1个字节。注意:输入字符串内容是从缓冲区的第2个字节开始存放的,见教材P230的图10-5。从键盘输入字符串可以通过单个字符输入的功能调用和循环程序结构结合实现;也可以通过0AH子功能调用来实现。例子:参见教材P230的例10.4.2字符串输入完毕后,系统调用会把实际输入的字符数填入缓冲区的第74(3)清除键盘缓冲区0CH号子功能:清除键盘缓冲区,然后执行(AL)指定的子功能(可以为01H、06H、07H、08H、0AH)。使用这个子功能主要是为了在执行其他子功能前消除以前的键盘输入。例如:MOV AH,0CHMOV AL,01HINT 21H清除键盘缓冲区以后执行01H号子功能,从键盘接收一个新的按键。(3)清除键盘缓冲区75(4)检验键盘状态0BH:检验键盘的当前状态,如果有键被按下,把0FFH保存到AL;如果没有键被按下,把00H保存到AL。如果需要查询键盘的状态,或者以查询方式控制键盘,可以使用这一个子功能。下面是一个等待按键的子程序:LOP: MOV AH,0BH INT 21H INC AL JNZ LOP RET (4)检验键盘状态76(5)显示单个字符02H:用户把需要显示的ASCII码存放到DL中,功能号02H送入AH中,然后调用21H号DOS系统调用,就可以在当前光标位置显示这个字符。这个子功能在执行时要检测CTRL+BREAK按键,如果在执行子功能时,用户已经按下了CTRL+BREAK,那么它会结束主程序,返回操作系统。MOV AH,02HMOV DL,要显示的ASCII码INT 21H(5)显示单个字符7706H:如果入口参数DL中存放的不是0FFH,而是一个ASCII码,那么它将在当前光标位置显示这个字符。这个子功能不检测CTRL+BREAK按键。MOV AH,06HMOV DL,要显示的ASCII码INT 21H字符显示的例子:教材P231例10.4.306H:如果入口参数DL中存放的不是0FFH,而是一个ASC78(6)显示字符串09H:显示指定位置的字符串,字符串一定要以‘$‘符号结尾.MOV AH,09HLEA DX,STRING1INT 21H默认STRING1字符串在DS指向的段中.(6)显示字符串79例从键盘输入一个字符串,大写字母变小写字母,小写字母变大写字母,然后显示出来.DATA SEGMENTMAXLEN DB 20ACTLEN DB ?STRING1 DB 21 DUP(0)NLCR DB 0AH,0DH,'$'DATA ENDSSTACK1 SEGMENT STACK DW 30HSTACK1 ENDS例从键盘输入一个字符串,大写字母变小写字母,小写字母变大写80CODE SEGMENTASSUMESS:STACK1,CS:CODE,DS:DATABEGIN: MOV AX,DATA MOV DS,AX MOV AH,0AH LEA DX,MAXLEN INT 21H MOV BL,ACTLEN XOR BH,BH MOV STRING1[BX],'$'CODE SEGMENT81 MOV CL,ACTLEN XOR CH,CH MOV SI,0LOP: MOV AL,STRING1[SI] CMP AL,41H JAE CON1 JMP NEXT1CON1: CMP AL,5AH JBE CON2 JMP NEXT1CON2: ADD STRING1[SI],20H JMP NEXT2NEXT1: CMP AL,61H JAE CON3 JMP NEXT2CON3: CMP AL,7AH JBE CON4 JMP NEXT2CON4: SUB STRING1[SI],20HNEXT2: INC SI LOOP LOP MOV CL,ACTLEN82 MOV AH,09H LEA DX,NLCR INT 21H MOV AH,09H LEA DX,STRING1 INT 21H MOV AH,4CH INT 21HCODE ENDSEND BEGIN MOV AH,09H83(二)基于文件操作的磁盘功能调用(1)基于FCB(FileControlBlock)的磁盘功能调用1)FCB的概念是由DOS操作系统维护的一种数据结构,用户程序通过修改FCB中特定的字段,结合相应的DOS系统调用,可以完成建立文件、打开文件、读文件记录、写文件记录、关闭文件等基本的文件操作。FCB的数据组织可以参照教材P233表10-4。(二)基于文件操作的磁盘功能调用842)使用FCB进行文件操作的原理把文件看作由数据块组成的序列,每个数据块包含128个文件记录。文件记录的大小在FCB相关字段定义。把文件记录看作最小的文件操作单位,每次读写文件的操作都是以文件记录为单位进行的。数据缓冲区:由用户程序定义,并通过特定系统调用向操作系统声明的内存空间。数据缓冲区的空间至少要大于等于一个文件记录的大小。执行读操作时,系统调用从文件中读出的文件记录自动保存在数据缓冲区;执行写操作时,系统调用会自动把数据缓冲区中的文件记录写入文件。2)使用FCB进行文件操作的原理85通过FCB中“当前块号”、“当前记录号”,系统调用可以确定当前读写操作在文件中的位置,读写操作完毕以后,系统调用会自动修改FCB中的这些参数。使用FCB对文件进行读写操作可以分为顺序存取、随机存取、随机分块存取三种方式。四川大学计算机学院汇编语言课件ch10863)使用FCB建立文件、打开文件、关闭文件,以及建立文件缓冲区的方法首先应该在数据段定义FCB,并在相关字段填上正确的内容;同时在数据段定义数据缓冲区。四川大学计算机学院汇编语言课件ch1087在当前目录建立一个新文件(16H号子功能,教材P234上面):MOV AH,16HMOV DX,SEG FCBRECMOV DS,DXMOV DX,OFFSETFCBRECINT 21H进行系统调用之前,必须正确初始化两个入口参数,FCB的段基值必须保存在DS,偏移量必须保存在DX。而且必须保证FCB中“文件名”、“文件扩展名”等字段已经正确初始化。出口参数:如果(AL)=00H,表示新文件已经建立成功;如果(AL)=0FFH,表示磁盘空间不够,新文件没有被建立。在当前目录建立一个新文件(16H号子功能,教材P234上面)88在当前目录打开一个已经存在的文件(0FH号子功能,教材P237下面):MOV AH,0FHMOV DX,SEG FCBRECMOV DS,DXMOV DX,OFFSET FCBRECINT 21H入口参数:和建立文件的16H号子功能一致,需要提供FCB的段基值和偏移量。出口参数:如果FCB中“文件名”、“文件扩展名”指出的文件存在,文件打开成功,(AL)=00H;如果文件不存在,打开失败,(AL)=0FFH。文件打开成功后,0FH号子功能会修改FCB中的相应内容,例如文件长度、当前块号、当前记录号等等。在当前目录打开一个已经存在的文件(0FH号子功能,教材P2389关闭一个文件(10H号子功能,教材P235上面):MOV AH,10HMOV DX,SEG FCBRECMOV DS,DXMOV DX,OFFSET FCBRECINT 21H入口参数:和前面的系统调用一致,需要提供FCB的段基值和偏移量。出口参数:如果文件正确关闭,(AL)=00H;如果文件不能关闭(例如,关闭文件前改变了当前目录,或者改变了当前驱动器),(AL)=0FFH。注意:使用FCB对文件进行操作时,只能使用当前目录,不能使用相对目录或者绝对路径。关闭一个文件(10H号子功能,教材P235上面):90建立数据缓冲区(1AH号子功能):MOV AH,1AHMOV DX,SEG DTAMOV DS,DXMOV DX,OFFSET DTAINT 21H入口参数:把数据缓冲区的段基值送到DS,首地址偏移量送到DX。出口参数:无。一定要保证数据缓冲区的空间至少能够装入一个记录(记录的大小由FCB中相应字段定义,该字段由用户程序维护)。数据缓冲区一旦建立,以后使用FCB进行文件操作时都是使用这个缓冲区,除非重新建立新的数据缓冲区。建立数据缓冲区(1AH号子功能):914)使用FCB的顺序存取方式向文件中读写记录。写记录(15H号子功能,教材P234下面):MOV AH,15HMOV DX,SEG FCBRECMOV DS,DXMOV DX,OFFSET FCBRECINT 21H功能:按照FCB中指定的当前块号、当前记录号,确定写操作的位置,把数据缓冲区中首地址开始的一个记录空间写入文件,并把修改FCB中当前块号、当前记录号、文件长度等字段。入口参数:把FCB的段基值、偏移量分别送到DS和DX。4)使用FCB的顺序存取方式向文件中读写记录。92出口参数:(AL)=00H:写记录成功(AL)=01H:磁盘满,写记录失败(AL)=02H:数据缓冲区空间不够,写记录失败出口参数:93读记录(14H号子功能,教材P237下面):MOV AH,14HMOV DX,SEG FCBRECMOV DS,DXMOV DX,OFFSET FCBRECINT 21H功能:按照FCB中指定的当前块号、当前记录号,确定读操作的位置,把数据缓冲区中首地址开始的一个记录空间写入文件,并把修改FCB中当前块号、当前记录号等字段。入口参数:把FCB的段基值、偏移量分别送到DS和DX。读记录(14H号子功能,教材P237下面):94出口参数:(AL)=00H:读记录成功(AL)=01H:当前读操作的位置在文件尾,读记录失败(AL)=02H:数据缓冲区空间不够,读记录失败(AL)=03H:已经读取到文件的最后一个记录(可能并没有读取到一个完整记录,在数据缓冲区中用0填补没有数据的记录空间)出口参数:95使用顺序存取方式读写文件的例子:教材P235例10.4.4四川大学计算机学院汇编语言课件ch10965)以FCB的随机存取方式读写文件使用这种方式读写文件不需要顺序的访问每一个记录,只需要给出当前要访问的相对记录号,就可以任意指定文件中的读写位置。用户程序在读写文件记录时,需要在FCB中指定“随机记录号”字段的内容(该字段是由用户程序维护的)。系统调用在使用“随机记录号”对文件进行访问时会先把它转换为块号、块内记录号的格式(顺序存取方式使用的存取位置格式),然后再进行具体的读写操作。5)以FCB的随机存取方式读写文件97随机方式读文件(21H号子功能):MOV AH,21HMOV DX,SEGFCBRECMOV DS,DXMOV DX,OFFSETFCBRECINT 21H执行上面程序片段之前,需要使用系统调用声明数据缓冲区的位置;需要初始化FCB中的相关数据,特别需要给出正确的随机记录号。入口参数、出口参数和顺序方式读文件的14H子功能完全一致。随机方式读文件(21H号子功能):98随机方式写文件(22H号子功能):MOV AH,22HMOV DX,SEGFCBRECMOV DS,DXMOV DX,OFFSETFCBRECINT 21H入口参数、出口参数和顺序方式写文件的15H号子功能完全一致。随机方式写文件(22H号子功能):996)以随机分块存取方式读写文件这种文件读写方式和随即存取方式很相似,所不同的是它能一次读取或写入多个记录(注意,这里的数据缓冲区空间要设置得足够大)。读操作通过27H号子功能实现,写操作通过28H号子功能实现,比随机存取方式多一个入口参数:需要把读取或写入的记录个数送到CX保存。其他方面,随机分块存取方式和随机存取方式几乎完全相同。6)以随机分块存取方式读写文件100(2)基于文件句柄的磁盘功能调用使用FCB对文件进行操作时,只能针对当前目录下的文件,而且需要维护FCB中的部分数据,使用不是很方便.在DOS2.0以后的DOS版本,都提供基于文件句柄的磁盘功能调用,只要给出文件的完整路径,通过系统调用创建、打开文件后,得到文件句柄,就可以针对任意指定的文件进行读写操作,而且不需要维护FCB。使用句柄对文件进行操作,已经和高级语言中文件的操作方法很接近。(2)基于文件句柄的磁盘功能调用1011)有关参数的解释(DOS调用的入口、出口参数)A)ASCIIZ字符串用于保存所操作文件的完整路径,是一个普通的字符串,但是它一定以0字节结尾。PATHNAME DB ‘C:\MASM\TEST\TEST.DAT’,0在创建或打开文件时需要ASCIIZ字符串作为入口参数。1)有关参数的解释(DOS调用的入口、出口参数)102B)文件属性用于定义文件的特征,用一个字节来表示,每一个数据位对应一种特征(参见教材P240下面)。在创建新文件的时候需要指明文件属性,把它作为入口参数。一个文件可以同时拥有多种属性,只要在创建文件时把文件属性字节中相应的数据位置1即可。B)文件属性103C)文件句柄是一个16位的二进制编号,操作系统中当前所有被打开文件都有这样一个编号(相当于被打开文件的身份证)。通过文件句柄,操作系统可以找到关于该文件的所有信息,包括文件类型、存取方式、文件指针等等(这些信息是由操作系统维护的)。用户程序不需要知道文件的详细信息,只需要给完成读写操作的系统调用提供文件句柄作为入口参数,就可以完成对应文件的读写操作。在创建文件、打开文件的系统调用中,文件句柄是出口参数。C)文件句柄104在操作系统中,总是存在一些特殊的设备文件(一些标准输入、输出设备被看作是文件),只要操作系统还在运行,这些文件总是打开的。操作系统提供这些设备文件的句柄,用户程序可以直接使用这些句柄对标准输入、输出设备进行读写操作,通过文件读写的方式完成数据的输入和输出。具体的特殊文件句柄参见教材P241在操作系统中,总是存在一些特殊的设备文件(一些标准输入、输出105D)存取代码在打开文件或者移动文件指针时,需要指明存取代码作为入口参数。(AL)=00H:只读方式(AL)=01H:只写方式(AL)=02H:读写方式D)存取代码106E)错误代码在执行某一个基于句柄的系统调用时,如果出现了错误,系统调用会把CF标志置1,并且把错误代码送到AX保存。如果没有错误,系统调用会把CF标志置0。具体错误代码的含义可以参见教材P241下面。E)错误代码1072)使用ASCIIZ字符串指定的路径创建文件,并且获得该文件的句柄(3CH号子功能)MOV AH,3CHMOV CX,20HLEA DX,PATHNAMEINT 21HJC CERRORMOV HANDLESAV,AX默认PATHNAME在DS指向的段中。文件句柄一定要妥善保存,因为以后的文件操作都是使用句柄来实现,不再使用ASCIIZ字符串。2)使用ASCIIZ字符串指定的路径创建文件,并且获得该文1083)使用ASCIIZ字符串指明的文件路径打开文件,并且取得该文件的句柄(3DH号子功能)MOV AH,3DHMOV AL,00HLEA DX,PATHNAMEINT 21HJC OERRORMOV HANDLESAV,AX默认PATHNAME在DS指向的段中。3)使用ASCIIZ字符串指明的文件路径打开文件,并且取得1094)使用文件句柄读文件中的数据(3FH号子功能)MOV AH,3FHMOV BX,HANDLESAVMOV CX,512LEA DX,DATAAREAINT 21HJC RERRORCMP AX,0JE ENDFILE默认数据缓冲区DATAAREA在DS指向的段中出口参数解释:如果CF=1,那么读操作失败,(AX)为错误码;如果CF=0,读操作成功,(AX)不为0,则解释为实际读入的字节数(可能小于或等于入口参数(CX)指定的字节数),(AX)=0,那么没有读入任何数据,已经到了文件尾。4)使用文件句柄读文件中的数据(3FH号子功能)1105)使用文件句柄向文件中写入数据(40H号子功能)MOV AH,40HMOV BX,HANDLESAVMOV CX,256LEA DX,DATAAREAINT 21HJC WERRORCMP AX,256JNE WFERROR默认数据缓冲区DATAAREA在DS指向的段中出口参数解释:如果CF=1,表示写操作失败,(AX)为错误代码;如果CF=0,表示写操作成功,(AX)为实际写入文件中的字节数(可能等于或小于入口参数(CX)指定的字节数),如果实际写入字节数小于要求写入的字节数,可能是磁盘空间满所造成的,程序中需要当作一种错误来处理。5)使用文件句柄向文件中写入数据(40H号子功能)1116)使用文件句柄关闭文件(3E号子功能)MOV AH,3EHMOV BX,HANDLESAVINT 21H出口参数解释:CF=1表示关闭文件失败,(AX)中的错误代码解释失败原因;CF=0表示文件正常关闭。6)使用文件句柄关闭文件(3E号子功能)112有了上面这些基本操作,使用句柄对文件进行读写操作已经可以实现。通过使用其他的一些子功能,可以使基于句柄的文件操作变得更加丰富。41H:删除文件42H:移动文件指针43H:检测或者改变文件属性有关这方面的系统调用可以参见教材P366的附录三。但是这些资料很不全面,如果需要具体应用,还要查找其他相关书籍。使用句柄方式操作文件的例子:教材P243的例10.4.5有了上面这些基本操作,使用句柄对文件进行读写操作已经可以实现113(三)打印功能调用这里仅介绍打印单个字符的打印功能(05H号子功能)。MOV AH,05HMOV DL,ASCII码或者控制字符INT 21H除了可以打印标准的ASCII码字符以外,05H号子功能还可以处理针对打印过程的控制字符(控制以后的打印格式等等,可能并没有实际打印某个字符)。具体的控制字符可以参见教材P247的表10-5和表10-6。例子:教材P247的例10.4.6(三)打印功能调用114第十章BIOS系统调用部分通常所说的BIOS(BaseInputOutputSystem)是系统主板上一块8K容量的ROM(ReadOnlyMemory),基本硬件接口对应的中断服务程序和相关的底层系统调用都固化在这块芯片中。由于空间有限,BIOS中的汇编语言程序都设计得短小精干,十分巧妙。DOS操作系统中有一个名叫IBMBIO.SYS系统文件,是BIOS的扩展部分它保存了扩展硬件接口的部分中断服务程序和相关的系统调用,在计算机系统启动时,操作系统会把它加载到内存中。第十章BIOS系统调用部分115到了WINDOWS时代,硬件越来越复杂,种类越来越丰富,使用BIOS中的标准中断服务程序和系统调用远远不能满足需求。仅限于扩充一个IMBBIO.SYS也是远远不够的。一般由硬件生产厂商提供驱动程序,WINDOWS操作系统会把驱动程序中的必要部分加载到内存,用驱动程序中的中断入口地址替换中断向量表中原本指向BIOS中断服务程序的中断入口。BIOS的作用越来越小,但是在系统刚启动那一阶段,所执行的检测基本硬件、使用基本硬件的系统调用,仍然在BIOS中,因为那个阶段操作系统还未加载到系统中。BIOS在计算机系统中仍然具有一些不可替代的作用。到了WINDOWS时代,硬件越来越复杂,种类越来越丰富,使用116(1)键盘调用(16H号调用)有关键盘的中断调用中,除了BIOS中09H号中断服务程序直接访问键盘接口中的端口外,其余的无论是DOS调用还是BIOS调用,都是以内存中的键盘缓冲区为访问对象。四川大学计算机学院汇编语言课件ch101171)00H号子功能功能:等待按键,把所按键的ASCII码(由显卡解释的显示编码)和扫描码(反映按键物理位置的键盘编码)分别返回到AL和AH中。使用方法:MOV AH,0INT 16H注意:该调用不带回显,BIOS调用目标非常基础和明确,针对键盘的调用就只针对键盘,不会针对其它设备。BIOS调用是面向设备的,DOS调用是面向应用的。1)00H号子功能1182)01H号子功能功能:检测键盘缓冲区有无数据,如果没有数据,把ZF标志置1;如果有数据,把ZF标志置0,并且把队首的ASCII码返回到AL中。使用方法:MOV AH,01HINT 16H特别注意,该调用返回键盘缓冲区的队首ASCII码后,并不把它从键盘缓冲区清除掉,如果使用循环结构取按键的ASCII码就有可能出错误。2)01H号子功能119例如:LOP1:MOV AH,01H INT 16H JZ LOP1 MOV DL,AL MOV AH,02H INT 21H JMP LOP1始终只能取到第一个按键的ASCII码,因为该字符在键盘缓冲区始终未能被清除。例如:120正确的写法:LOP1:MOV AH,01H INT 16H JZ LOP1 MOV AH,00H INT 16H MOV DL,AL MOV AH,02H INT 21H JMP LOP1第0号子功能会在读取队首ASCII码之后清掉该字符。正确的写法:1213)02H号子功能功能:返回键盘状态字节,存放到AL中。状态字节各个数据位的含义参见教材P249下面的图。使用方法:MOV AH,02HINT 16H关于键盘BIOS调用的例子参见教材P249的例10.5.13)02H号子功能122(2)有关显示的BIOS调用1)显示器的工作原理(补充内容)显象管通过电场或者磁场来控制阴极射线管发射的电子流方向,使电子流击中屏幕的不同部位,形成完整的图像显示。电场控制是通过电容来实现的,如下图所示:(2)有关显示的BIOS调用123控制电子流水平方向偏转角度控制电子流垂直方向偏转角度控制通过电场实现假定电子流正常方向是垂直于显示平面向外虚线框为假定的显示范围,圆圈表示没有任何电场时,电子流击中的部位控制控制电子流垂直方向偏转角度控制通过假定电子流虚线框为假定124电子流的偏转也可以通过磁场来控制,具体使用的器件是两个电感,一个用于控制水平方向的偏转角度,一个用于控制垂直方向的偏转角度。如下图所示:四川大学计算机学院汇编语言课件ch10125四川大学计算机学院汇编语言课件ch10126只要控制电容上的电荷量或者控制电感线圈的电流大小,就可以实现任意的角度控制。电子流垂直方向的角度控制称为帧扫描控制(逐行扫描的显示器中)或者场扫描控制(隔行扫描的显示器中);水平方向的角度控制称为行扫描控制。针对两个方向上的角度控制,显示器内部提供了两种控制信号:帧扫描信号和行扫描信号,具体可能是电压,也可能是电流,这取决于具体显示器本身的设计,这里不作具体解释。只要控制电容上的电荷量或者控制电感线圈的电流大小,就可以实现127帧(场)扫描信号帧(场)扫描过程(正程)帧(场)扫描回程,电子流会被消隐信号阻碍,不能到达屏幕行扫描信号,也包含正程和回程帧(场)扫描信号和行扫描信号的频率必须配合恰当,一个帧扫描正程或回程必须包含整数个行扫描全程(包括正程和回程),否则得不到正确的显示。00帧(场)扫描信号帧(场)扫描过程(正程)帧(场)扫描回程,行128逐行显示的扫描过程:逐行显示的扫描过程:129逐行扫描过程:后期出现的显示器基本上都是这种扫描方式,一次垂直扫描显示一幅完整的图像。由于人眼需要25帧/秒的帧扫描速度才能感觉到图像的连贯性,所以这种显示器使用的电子器件较为先进,一般采用电容控制,扫描速度很快。四川大学计算机学院汇编语言课件ch10130隔行扫描过程:早期的显示器或者电视机都采用这种扫描方式,一帧图像需要两次连续的垂直扫描过程(场扫描)才能完成,一次用于扫描显示图像的奇数行,一次用于扫描显示偶数行。如果能够达到25场/秒的速度,由于奇偶行交替扫描,利用电子流打击屏幕后发光点不会立即消失的特征,给人一种“假连贯”的感觉,实际上是有闪烁现象的。隔行扫描过程:早期的显示器或者电视机都采用这种扫描方式,一帧131显示器的扫描频率是由显卡直接控制的,采用自动跟踪技术,由显卡发出帧扫描和行扫描的同步信号,显示器则自动跟踪接收到的同步信号,调整帧扫描和行扫描的频率。四川大学计算机学院汇编语言课件ch10132显卡发出的扫描同步信号扫描信号(帧或行都是如此)显卡发出的扫描同步信号扫描信号(帧或行都是如此)133帧扫描和行扫描频率的确定是通过设置显卡中的帧扫描控制端口和行扫描控制端口来实现。一般只需要把表示扫描频率的整数写入控制端口就可以改变扫描频率。显示器所能支持的扫描(刷新)频率和显卡里能设置的扫描频率是两回事情,但是显示器总是依靠跟踪显卡发出的扫描同步信号来进行扫描过程的。帧扫描和行扫描频率的确定是通过设置显卡中的帧扫描控制端口和行134显示器所能支持的最高扫描频率是由自身所使用电子器件的性能决定的,一般出厂时都附有技术指标。如果超过最高扫描频率,则可能对显示器中的某些元件造成永久性的损坏。显卡所能支持的最高扫描(刷新)频率是由显卡本身的处理速度决定的,它能自己检查当前所要设置的扫描频率是否为自己支持的,如果不支持,它会拒绝设置。显示器所能支持的最高扫描频率是由自身所使用电子器件的性能决定135在目前的很多显示器中,显示器的扫描过程完全是通过跟踪显卡发出的扫描同步信号来实现的,没有自主权。试想一下这样的情况,显卡的性能忧于显示器,它能支持比当前所使用显示器更高的扫描频率。如果通过操作系统或自己编制的应用程序向显卡的扫描控制端口写入了显示器不支持的高扫描频率。那么显示器会强行跟踪这种高频率的扫描同步信号,处于超负荷的工作状态,可能会损坏显示器中的部分元件(损坏时间不一定)。直接针对显卡编制程序的时候需要特别小心。在目前的很多显示器中,显示器的扫描过程完全是通过跟踪显卡发出136分辨率:指所显示图形或图像的精细程度,显示器当前把屏幕分为多少行,每行分为多少个像素。像素:简单的解释,就是电子流在屏幕上打击后留下的发光点,是组成图像的基本单位,当然有时不是这样解释。和扫描频率一致,显示器和显卡所能支持的最大分辨率可能不相同。分辨率:指所显示图形或图像的精细程度,显示器当前把屏幕分为多137对于灰度显示器,控制电子流打击屏幕的速度,就可以控制所显示图像中每个像素的亮度,通过电场控制可以实现,电场的方向和电子流的发射方向相反。对于彩色显示器,它有三个电子喷枪,分为红、蓝、绿三种基本颜色,称为三原色。三个电子枪在屏幕上打出三个彩色亮点,呈“品”字形状,把它看作一个象素。控制三原色的不同亮度组合,可以生成各种颜色的像素,如果三原色中的每种颜色有X个亮度等级,那么总共可以表达的颜色数目是X的三次方个。对于灰度显示器,控制电子流打击屏幕的速度,就可以控制所显示图138无论所显示的是灰度图像还是彩色图像,像素值都是按照行列顺序存放在显存中。根据显示模式的不同,一个像素可能只占用一个字节,也可能占用多个字节。对于隔行显示器来说,显卡必须使用隔行显示模式,一帧图像中的像素分奇偶场分别存放在显存中的特定位置。无论所显示的是灰度图像还是彩色图像,像素值都是按照行列顺序存139显示存储器访问仲裁逻辑地址线数据线控制线CPU的访问来自系统总线显示逻辑的访问来自显卡内部普通显存工作原理显示存储器访问地址线数据线控制线CPU的访问显示逻辑的访问普140显示存储器0访问仲裁逻辑地址线数据线控制线CPU的访问来自系统总线显示逻辑的访问来自显卡内部双帧切换技术显示存储器1显示存储器0访问地址线数据线控制线CPU的访问显示逻辑的访问141文本方式下,字符显示原理:每一个字符的图像模板(X*Y的点阵)被按照一定的顺序固化在显卡的ROM芯片中,要显示一个字符时,显卡的字符显示逻辑会按照给定的ASCII码(图像模板的编号)在ROM中查找对应的图像模板,然后用该模板控制显示器中阴极射线管发射的电子流,从而显示出字符的形状。只有文本方式下的字符显示在是这样的显示原理,如果是在图形显示方式下,那么实际上是应用程序把字符作为小图像在显示。WINDOWS等图形界面的操作系统,都自己构造了字符的图像模板,并且提供了多种字体,并没有使用显卡提供的基本图像模板。文本方式下,字符显示原理:142上面所说的显示过程都是针对像素显示器,基于图像的显示原理,但是它也可以用于显示图形。还有另一种显示器,称为矢量显示器,这种显示器很少,一般用于专业的图形显示,基于图形显示的原理。矢量显示器的扫描机制和像素显示器是一致的,没有帧扫描和行扫描的概念,它的扫描过程是由所显示的图形来决定的。相关细节可以查阅课外资料。上面所说的显示过程都是针对像素显示器,基于图像的显示原理,但1432)BIOS的显示调用(10H号系统调用)设置显示模式(00H号子功能)功能:设置当前的显示模式。使用方法:MOV AH,00HMOV AL,显示模式编号INT 10H关于显示编号与具体显示模式的对应可以参见教材P372中有关00H号子功能的说明。例子:教材P251上面2)BIOS的显示调用(10H号系统调用)144读取当前显示模式编号(0FH子功能)功能:取得当前显示模式编号存放在AL中,当前显示模式对应的列数存放在AH中,当前显示页面的编号存放在BH中。在文本显示模式下,才有显示页面的概念。显存中有多个页面,当前显示在屏幕上的只是其中一个,一般只使用第0个页面。有时可以通过切换显示页面来快速的改变所显示内容。使用方法:MOV AH,0FHINT 10H主要用途:在应用程序改变显示模式前,需要先保存原有的显示模式,以便应用程序退出时恢复以前的显示模式。读取当前显示模式编号(0FH子功能)145置光标类型(01H号子功能)功能:光标最大由16行像素(编号为0到15)组成,通过指定光标的起始行和结束行,可以确定光标的粗细,方位(靠上或靠下)。使用方法:MOV AH,01HMOV CH,光标起始行号(低3位表示)MOV CL,光标结束行号(低3位表示)INT 21H注意:只有在文本显示模式下,才有光标的概念。置光标类型(01H号子功能)146置光标位置(02H):功能:设置光标当前位置,也就是下一次字符显示的位置,仅在文本显示模式下可用。使用方法:MOV AH,02HMOV BH,页号(当前页号可用0FH子功能获得)MOV DH,行号MOV DL,列号INT 10H置光标位置(02H):147读光标位置(03H)功能:获取指定显示页面中当前的光标位置,仅在文本方式下可用。出口参数:光标行号保存在DH中,列号保存在DL中,光标起始行保存在CH中。使用方法:MOV AH,03HMOV BH,页号INT 10H注意:每一个页面都有一个光标位置,字符显示一般总是在当前页面的光标位置进行的。读光标位置(03H)148设置当前显示页面(05H)功能:改变当前所显示的页面,可以在文本显示模式下立即改变显示内容。使用方法:MOV AH,05HMOV AL,页面编号INT 10H设置当前显示页面(05H)149清屏或文本上卷(06H)功能:在文本模式下清除某个矩形范围内的显示内容,或者在某个矩形范围内对文本实行上卷操作。使用方法:MOV AH,06HMOV AL,上卷行数(为0时表示清除)MOV BH,卷入行属性MOV CH,矩形范围左上角行号MOV CL,矩形范围左上角列号MOV DH,矩形范围右上角行号MOV DL,矩形范围右上角列号INT 10H清屏或文本上卷(06H)150清屏或文本下卷(07H)功能:在文本模式下清除某个矩形范围内的显示内容,或者在某个矩形范围内对文本实行下卷操作。使用方法:MOV AH,07HMOV AL,下卷行数(为0时表示清除)MOV BH,卷入行属性MOV CH,矩形范围左上角行号MOV CL,矩形范围左上角列号MOV DH,矩形范围右上角行号MOV DL,矩形范围右上角列号INT 10H清屏或文本下卷(07H)151写像素(0CH)功能:在图形显示模式下,对指定像素坐标写入像素值(一个字节,如果是灰度图像,表示亮度,如果是256色彩色图像,表示颜色)。使用方法:MOV AH,0CHMOV DX,行号MOV CX,列号MOV AL,像素值INT 16H写像素(0CH)152读像素(0DH)功能:在图形显示模式下,获取指定坐标
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《数图形的学问》(教案)四年级上册数学北师大版
- 五年级上册数学教案-3.2 除数是小数的除法 第二课时-西师大版
- 五年级下册数学教案-4 异分母分数加减法 ︳西师大版
- 《三角形的内角和》(教学设计)-2024-2025学年青岛版四年级数学下册
- (高清版)DB45∕T 808-2021 城镇建筑有线电视网络建设技术规范
- 2025年吉林省吉林市单招职业倾向性测试题库新版
- 2024年智能压力校验仪项目投资申请报告
- 历史-云南省三校2025届高三2月高考备考联考卷(六)试题和答案
- 2025年度荒山荒沟土地承包与林业生态补偿机制合同
- 2025年度工程尾款支付与质量保证协议书
- 颅脑横断层解剖09课件
- 2023年同等学力申硕英语真题
- 2023年04月广东深圳市市场监督管理局许可审查中心招考聘用医疗器械注册审评员(员额)笔试参考题库附答案解析
- 安捷伦N9020A频谱仪操作说明
- 【读写策略】回延安朗读指导
- 孟氏骨折与盖氏骨折
- 我的妹妹-教学设计教案
- GB/T 30512-2014汽车禁用物质要求
- 五年级上册语文阅读理解附答案
- 小学一年级硬笔书法入门25839教学内容
- 心理测量学(全套教学课件)
评论
0/150
提交评论