近代后期的小说与戏曲

上传人:沈*** 文档编号:64547733 上传时间:2022-03-21 格式:PPT 页数:86 大小:1.16MB
收藏 版权申诉 举报 下载
近代后期的小说与戏曲_第1页
第1页 / 共86页
近代后期的小说与戏曲_第2页
第2页 / 共86页
近代后期的小说与戏曲_第3页
第3页 / 共86页
资源描述:

《近代后期的小说与戏曲》由会员分享,可在线阅读,更多相关《近代后期的小说与戏曲(86页珍藏版)》请在装配图网上搜索。

1、第9章 文件操作与终端控制第第9章章 文件操作与终端控制文件操作与终端控制 9.1 磁盘操作磁盘操作 9.2 控制键盘的技术控制键盘的技术 9.3 字符方式下的屏幕控制技术字符方式下的屏幕控制技术 本章要点本章要点 习题九习题九 第9章 文件操作与终端控制 应用程序对磁盘文件的操作是通过应用程序对磁盘文件的操作是通过DOS功能调用来实现功能调用来实现的,调用时必须按各功能的要求设置好入口参数,再按的,调用时必须按各功能的要求设置好入口参数,再按DOS指定的形式进行调用。指定的形式进行调用。DOS提供的磁盘管理功能包括三个方提供的磁盘管理功能包括三个方面:一是关于文件内部所存放的数据,比如建立、

2、读、写等,面:一是关于文件内部所存放的数据,比如建立、读、写等,二是针对文件的外部属性,如查找文件的名称、日期,再就二是针对文件的外部属性,如查找文件的名称、日期,再就是目录管理的创建、删除功能等。是目录管理的创建、删除功能等。 9.1 磁盘操作磁盘操作第9章 文件操作与终端控制9.1.1 文件名与文件代号文件名与文件代号 文件名是文件的标识符号,对文件的取名方式是由操作系统规定的。一个完整的文件名由文件主名和文件扩展名两部分构成,两部分之间以圆点“.”分隔。汇编语言当然延用这一规定,并要求存放在内存中时在文件全名的后面加上一个值为0的字节,用来表示一个文件名到什么地方截止。源程序中的文件名通

3、常有两种来源,要么以变量初值的形式加以定义,要么从键盘读入一个符号串。作为文件名的符号串中还可以包含盘符和路径。比如, 程序中要使用C盘根目录中一个名为SAMPLE.DAT的文件,用变量定义的形式就写作:filename DB C:SAMPLE.TXT,0第9章 文件操作与终端控制 需要注意的是,如果是用DOS的10号子功能从键盘读入的符号串,最后一个符号是回车键(0DH),必须把这个回车键改为0才可以作为DOS功能调用时的文件名使用。 如果每次使用文件都以文件全名的形式进行,会有一些不利因素:一是会使操作系统多次重复处理相同的字符串,给操作系统带来不必要负担,处理速度慢、效率低;二是程序编写

4、时也有很多不便。为此,操作系统DOS提供了一种以文件代号指称文件的方式。 当应用程序向操作系统提出要使用某个文件时,必须进行打开文件或创建文件的操作,这时应用程序以文件名作为指称文件的方法,即向操作系统提供需要使用的文件的名称。操作系统代为完成打开或创建操作,如果成功,该文件将处于工作第9章 文件操作与终端控制状态(即打开状态),操作系统还将反馈一个字型数据给应用程序,作为这个文件的代号(又称句柄)。文件代号是由操作系统分配的,并且操作系统还会为每一个处于工作状态的文件建立代号与文件名的对应关系。非工作状态的文件尽管也存放在磁盘上,但没有相应的文件代号。 应用程序获得文件代号后,必须妥善保存,

5、因为对这个文件的所有后续操作都将以文件代号作为文件的指称形式,直到使用完毕。应用程序对已经操作完毕的文件应该做最后一个操作关闭。关闭文件的作用之一就是告诉操作系统收回该文件代号,并取消对应关系。操作系统对已收回的文件代号可以重新安排,让它与另一个文件建立对应关系。 第9章 文件操作与终端控制 DOS已经预定义了文件代号0到4与标准输入输出设备对应,即 0 标准输入设备,键盘; 1 标准输出设备,屏幕; 2 错误输出的标准设备,屏幕; 3 标准辅助设备; 4 标准打印设备。这5个文件代号长期处于打开状态,应用程序可以直接使用。对标准输入设备和标准输出设备的操作将在后面举例说明。在此需要进一步解释

6、的是,在汇编语言或操作系统看来,文件与标准输入输出设备都是数据流,两者的差别在于操作系统支持对文件的随机存取,而标准输入输出设备只能顺序存取。向标准输出设备写一段数据意味着把这些数据送到屏幕去显示,从标准输入设备读一段数据则是从键盘上读入一串符号。第9章 文件操作与终端控制9.1.2 对文件中的数据的操作对文件中的数据的操作9.1.2.1 DOS的文件操作功能的文件操作功能 对于文件的读和写两种操作,在出口参数中说明了当操作成功时,AX是实际读出或写入的字节数,这个值一定不超过应用程序调用相应子功能时所要求的字节数,即入口参数CX的值,但可能比CX小。对于“读”来说,AX值小于要求读入字节数意

7、味着已遇到文件结束符,再没有内容可读了;对于“写”,这种情况只有是磁盘已满,无法再写入。不论“读”还是“写”,在这种情况下文件是可操作的,是操作成功的特殊情况,甚至AX的值可以为0。第9章 文件操作与终端控制表9.1 DOS的代号式文件管理功能子功能号子功能号(AH) 功功 能能 入入 口口 参参 数数 出出 口口 参参 数数 3CH 创建 DS:DX = 文件名首字符逻辑地址CX = 文件属性 AX = 文件代号3DH 打开 DS:DX = 文件名首字符逻辑地址AL = 存取代码 AX = 文件代号 3EH 关闭 BX = 文件代号3FH 读 DS:DX = 数据缓冲区逻辑地址BX = 文件

8、代号CX = 读取的字节数 AX = 实际读取的字节数 40H 读DS:DX = 数据缓冲区逻辑地址BX = 文件代号CX = 写入的字节数 AX = 实际写入的字节数 42H 移动指针 (CX, DX) = 移动字节数,有符号双字 AL = 方式码BX = 文件代号 (DX, AX) = 新的指针位置第9章 文件操作与终端控制9.1.2.2 错误代码错误代码 各文件操作子功能的出口参数有一个共同点,就是以CF的设置情况表示操作是否失败。当CF的值是1(理解作逻辑值“真”)时,表示操作失败。这时在AX中还给出了错误代码作为出口参数,应用程序可以根据错误代码判断操作失败的原因,并做相应的处理。表

9、9.2中列出了常见的错误代码与含义。 第9章 文件操作与终端控制代码(Hex)错 误 原 因代码(Hex)错 误 原 因0001非法功能号0008内存不够0002文件未找到000C非法存取代码0003路径未找到000D非法数据0004同时打开的文件太多0010试图删除当前目录0005拒绝访问0011设备不一致0006非法文件代号 表表9.2 文件操作的错误代码文件操作的错误代码 第9章 文件操作与终端控制9.1.2.3 文件属性文件属性 文件属性是一个说明文件特性的字节。DOS规定一个文件可以拥有由“只读”、“隐藏”、“系统”和“归档”4种特性的任意组合而构成的文件属性。这4种具体的属性在属性

10、字节中各占一位,相应位的值是1表示文件具有该属性,否则没有该属性。“归档”属性用来说明一个文件是已经写入数据并关闭了的。属性字节的其余4位中又有两位具有专门的用途,其中之一用来表示磁盘上的一个目录项是不是子目录,另一位表示是不是卷标,剩下的两位在DOS中没有定义。综合起来,6个有特别用途的属性位分作3部分,分别用于文件、子目录、卷标。3个部分是相互排斥的,磁盘上的一个名称可以代表文件,可以代表子目录,也可以作为卷标,但只能是其中的一种。第9章 文件操作与终端控制属性字节的各个位与属性含义的对应关系见图9.1。 位号: 7 6 5 4 3 2 1 0只读隐藏系统卷标子目录归档图9.1 属性字节中

11、各属性位的分布 第9章 文件操作与终端控制9.1.2.4 文件操作示例文件操作示例 浏览是最常用的文件操作,需要把文件中的数据从头到尾读出。在成功地打开文件之后,必须先把文件的内容读到内存中,然后才能进行处理,这就要求在内存中开辟一定数量的缓冲区,用于存放读入的数据。但是,编程时无法预计要处理的文件的大小,因而也就不知道设置的缓冲区的容量是否合适。通常,只要操作系统允许,可以尽可能地建立大容量的缓冲区,一次读入较多的数据,以减少读盘次数。不论缓冲区设置有多大,其容量小于文件大小的可能性总是存在的,因此,必须考虑如果文件中的数据一次读不完时如何处理。第9章 文件操作与终端控制 【例9.1】从键盘

12、读入一个符号串作为文件名,如果文件存在,则显示其中的内容。 【解】 data SEGMENT str1 DB Input File Name : $ str2 DB 13,10, File not found. ,13,10, $ fn DB 80,81 dup(0) handle DW 0 buf DB 10000 DUP(0) data ENDS code SEGMENT ASSUME CS:code,DS:data第9章 文件操作与终端控制main: MOV AX,data MOV DS,AX LEA DX,str1 MOV AH,9 INT 21H ;先显示出提示信息Input Fil

13、e Name : INC AH LEA DX,fn INT 21H ;以DOS的10号子功能读入字符串,作为文件名 MOV BL,fn+1 XOR BH,BH第9章 文件操作与终端控制 MOV fn+BX+2,0 ;置文件名字符串的结束标记 LEA DX,fn+2 MOV AX,3D00H INT 21H ;打开文件 JNC opened ;打开成功转 MOV AH,9 LEA DX,str2 INT 21H ;提示File not found. JMP finish第9章 文件操作与终端控制opened: MOV handle,AX ;保存文件代号到变量handle中next: MOV BX

14、,handle ;取文件代号 MOV AH,3FH LEA DX,buf MOV CX,10000 INT 21H ;读10000个字符,若不足则按实际情况读入 MOV CX,AX ;实际读入字符数 MOV AH,40H MOV BX,1 第9章 文件操作与终端控制 INT 21H ;向1号文件(标准输出设备,屏幕)输出 CMP CX,10000 JE next ;读满缓冲区,而文件可能未读完,转 MOV BX,handle MOV AH,3EH INT 21H ;关闭文件finish: MOV AX,4C00H INT 21H RETcode ENDS END main第9章 文件操作与终端

15、控制 浏览实际上是对文件的顺序读取,DOS的代号式文件管理还支持对文件的随机访问。建立并使用索引以加快文件查找的速度,是文件管理中经常采用的一种方法。对一个已经建立了索引的文件进行查找操作,就可以先在索引中找到目标值,再根据索引提供的信息到主文件中的相应位置直接读出数据。 第9章 文件操作与终端控制 【例【例9.2】给定如下条件:】给定如下条件: (1)文件student.dbf中存放着1000个学生的信息,每条信息占用40个字节的存储空间,依次存放1个字型的学号、8个字符构成的字符串作为姓名、30个字符构成的字符串作为家庭住址。 (2)子程序lookup能够完成查找索引的功能。调用前以入口参

16、数AX中存放学号,调用后若该学号存在,CF会置0,且(CX,DX)存放该学号在主文件中的地址(即文件指针),学号不存在则CF 为1。 (3)文件student.dbf已经打开,文件代号存放在变量handle中。 (4)变量buf已在数据段中定义,用于存放读入的一个学生的信息。第9章 文件操作与终端控制【解】子程序的功能、入口参数及出口参数都很明确,子程序清单如下:search PROC NEAR PUSH BX PUSH CX PUSH DX PUSH DS CALL lookup ;调用已给出的子程序,在索引中查找 JC error ;找不到转,找到时(CX,DX)值刚好作为 移动文件 ;指

17、针的入口参数第9章 文件操作与终端控制 MOV BX,handle ;取文件代号 MOV AX,4200H INT 21H ;移动指针到正确位置 JC error ;文件操作出错转 MOV AX,SEG buf MOV DS,AX MOV AH,3FH LEA DX,buf ;DS:DX为读盘缓冲区首地址 MOV CX,40 ;读取的字节数 INT 21H第9章 文件操作与终端控制error: POP DS POP DX POP CX POP BX RETsearch ENDP第9章 文件操作与终端控制9.1.3 有关文件外部特性与目录的操作有关文件外部特性与目录的操作子功能号 (AH) 功

18、能 入 口 参 数 出 口 参 数 39H 建立子目录 DS:DX=路径字符串首地址 3AH 删除子目录 DS:DX=路径字符串首地址 3BH 改变当前目录 DS:DX=路径字符串首地址 41H 删除文件 DS:DX=待删除文件名字符串首地址 43H 置/取文件属性 DS:DX=文件名字符串首地址 AL=0 取文件属性 AL=1 置文件属性 CX=文件属性 取文件属性成功时,CX=文件属性 47H 取当前目录路径 DL=驱动器号 DS:SI=65 字节的数据缓冲区 成功时,缓冲区中被填写当前目录(含路径)字符串 57H 置/取文件日期和时间 BX=文件代号 AL=0 取文件的日期和时间 AL=

19、1 置文件的日期和时间 CX=时间,DX=日期 取日期和时间成功时, CX=时间,DX=日期 第9章 文件操作与终端控制 键盘是把外部信息及人对计算机的控制命令送入计算机内部的重要设备。有效地利用键盘可以使编制的软件给操作者提供方便快捷的操作方式,在适当的时候封锁键盘又可以使程序执行中不受来自键盘的中断的干扰。 有关键盘的中断有3个:DOS的21H号中断,提供功能较强的读键功能;BIOS的16H号中断,提供较低层次的服务;BIOS的9号中断,这是键盘硬中断,每当键盘上有键被按下,键盘都会通过接口向CPU提出9号中断请求。 9.2 控制键盘的技术控制键盘的技术第9章 文件操作与终端控制9.2.1

20、 9号中断与键盘工作原理号中断与键盘工作原理 键盘上的按键分为普通键和控制键两类。控制键包括Shift、Ctrl、Alt、CapsLock 等(见表9.4),其余为普通键。对于每个普通键,根据各键在键盘上的分布位置对键进行编码,得到键盘扫描码,每个键还有ASCII码。键盘送到接口中的数据既有键盘扫描码,也有ASCII码。 计算机启动后,在内存较低端(物理地址400H起,紧接在中断向量表的后面)有一段供BIOS使用的数据区,其中包括存放各控制键状态的键盘状态字节和存放普通键的32字节键盘缓冲区。当发生9号中断请求时,表明键盘有按键信息需要送到主机中,在没有被屏蔽的情况下,CPU将响应该中断, 第

21、9章 文件操作与终端控制执行一次9号中断服务程序,处理从键盘传来的信息。9号中断服务程序的功能主要有:如果是控制键被按下或松开,就把BIOS数据区中的键盘状态字节作相应调整;如果是普通键,则把按键的扫描码和ASCII码一起存入键盘缓冲区。键盘缓冲区是一个环型队列,共32字节,可以存放15个键的扫描码和ASCII码。读键时可以从队列首部取走键值,9号中断则把新的按键置入队列尾部。当键盘缓冲区已满,而键盘上还有普通键被按下时,键盘仍然会提出中断申请,但9号中断的服务程序中会忽略该按键,并使计算机的小喇叭发出“嘀”的一声,以表示缓冲区已满。 键盘状态字节在物理地址417H处,每一位代表一个控制键,为

22、1表示该键处于按下的状态,为0则是松开的。状态字节的各个位与控制键的对应关系见表9.4。 第9章 文件操作与终端控制表9.4 状态字节与控制键的对应关系 位号 76543210控制键InsertCapsLockNum LockScroll LockAltCtrl左shift右shift第9章 文件操作与终端控制9.2.2 16H号中断号中断10号子功能号子功能读普通键读普通键 这是最普通的读键方式,如果键盘缓冲区不空,则从缓冲区的环型队列首部取走一个按键,把按键的扫描码放到AH中,ASCII码放到AL中作为出口参数;如果键盘缓冲区是空的,则等待有效按键输入。第9章 文件操作与终端控制 21号子

23、功能号子功能不改变缓冲区的读键不改变缓冲区的读键 这也是一个用于读键的子功能,当键盘缓冲区中还存放有没取走的有效按键时,出口参数中ZF为0,AX中的值是键的扫描码与ASCII码,如果键盘缓冲区已空,则ZF 置1表示无键可读。1号子功能与0号有很大差别。首先,在缓冲区为空时,0号子功能将等待按键,1号子功能则不等待,而是以ZF置1表示,这是很多电脑游戏软件典型的读键方式。其次,如果缓冲区不空,0号子功能会取走该键,而1号子功能并不取走,只把它复制到AX中。 1号子功能往往与0号子功能配合使用,先调用1号子功能,判断是否有键按下,当键盘缓冲区不空时,就读出该键并做相应处理,否则跳过读键及处理功能。

24、第9章 文件操作与终端控制 32号子功能号子功能读控制键状态读控制键状态 直接从BIOS数据区中复制出键盘状态字节的值,放到AL中作为出口参数。 410H号子功能号子功能读键并清除键盘缓冲区读键并清除键盘缓冲区 读键的情况与0号子功能完全相同,10H号子功能在读完键后还会清除键盘缓冲区中剩余的所有按键数据。通常一个好的应用程序在要求操作员按键前,应该先用这个子功能清除掉键盘缓冲区,避免一些非正常按键的干扰。 第9章 文件操作与终端控制9.2.3 DOS的输入子功能的输入子功能17号子功能号子功能无回显输入无回显输入 这是直接调用前面所说的16H号中断的0号子功能。 28号子功能号子功能无回显输

25、入无回显输入 这个子功能与7号非常接近,只是对按键增加了Ctrl+Break的处理。 30BH号子功能号子功能判断按键状态判断按键状态 这个子功能用于判断键盘缓冲区是否为空,出口参数是: 当键盘缓冲区不空时,AL0FFH; 当键盘缓冲区为空时,AL0FFH。第9章 文件操作与终端控制 40CH号子功能号子功能清除键盘缓冲区后再读键入口参清除键盘缓冲区后再读键入口参数:数: AH0CH;AL清除缓冲区后再执行的功能号,可以是1、7、8。 出口参数:按AL中的功能号,与DOS的3个子功能出口参数对应相同。 这个子功能会先把键盘缓冲区清空,然后再根据AL中的值,执行DOS的1号、7 号或8号子功能。

26、第9章 文件操作与终端控制 9.2.4 封锁键盘的方法封锁键盘的方法 封锁键盘就是让键盘不能工作,使系统不能接收从键盘输入的数据。封锁键盘主要是为了使程序在执行的某一个阶段,不受来自键盘中断的干扰。由于键盘是以中断方式向主机输入数据的,并且键盘中断是可屏蔽外中断,如果能够屏蔽掉这样的中断,就可以达到封锁键盘的目的。屏蔽键盘中断有两种方法:一是把标志寄存器中的IF标志位清0,二是利用系统的中断控制器。第9章 文件操作与终端控制 如果因为需要封锁键盘而屏蔽掉所有可屏蔽外中断,就会导致系统中各个以中断方式工作的外设都被封锁,可能导致系统中的其它程序不能正常工作。利用中断控制器封锁键盘就不会有这种麻烦

27、。中断控制器是8088系统中用于管理可屏蔽外中断的部件,它占据了20H号和21H号两个端口。中断控制器是8088系统的一种外设,按直接方式与CPU进行数据交换,负责管理8号到0FH号中断。当系统启动后,21H号端口对应中断控制器中的中断屏蔽寄存器,可读可写,最低位对应8号中断,最高位对应0FH号中断,某一位置1表示对应的中断被屏蔽,为0则没有屏蔽。从21H号端口读出1字节数据,可以判断出各外设的屏蔽情况。对于单独封锁键盘的需求,可以向该端口写入1字节数据,该字节的次低位为1。下面是用于封锁键盘的程序段: 第9章 文件操作与终端控制 IN AL, 21H OR AL, 00000010B OUT

28、 21H, AL 当这几条指令执行后,系统将不再响应键盘中断,包括Ctrl Break和热启动操作。通常,在封锁键盘一段时间之后又需要把消除封锁,解除封锁的操作可以用下面的3条指令实现: IN AL, 21H AND AL, 11111101B OUT 21H, AL第9章 文件操作与终端控制计算机的绝大部分输出都是送到屏幕上。由屏幕与键盘构成的终端是人机交互的基本手段。键盘控制技术可以使程序在正确的时机,以正确的方式接收操作员送入的数据。问题的另一方面是,操作员如何知道应该在什么时候输入什么样的数据呢?这就需要程序能够在适当的时候,在屏幕适当的位置,以适当的形式显示出适当的信息,提示操作员如

29、何操作。 向屏幕输出的方法很多,常用的有DOS提供的输出子功能、BIOS提供的10H号中断服务子程序,以及直写屏方式。其中的DOS子功能包括2号和9号,已经在前面章节中讲述,这里介绍更灵活地控制屏幕的方法。 9.3 字符方式下的屏幕控制技术字符方式下的屏幕控制技术第9章 文件操作与终端控制9.3.1 屏幕与光标屏幕与光标 屏幕是最常用的输出设备,可以按不同的颜色显示各种字符和图形。在字符方式下,屏幕上的一行可以显示80个字符,共25行,每个显示字符可以有包括颜色在内的多种属性。一般情况下,屏幕上的所有字符都按黑底白字显示,没有显示字符的区域实际上是显示的ASCII值为20H的空格符。 光标在屏

30、幕上通常表现为闪烁的小短线或者闪烁的小方块,它用来指示下一个输出字符的位置。在使用DOS提供的两个子功能进行屏幕显示输出时,输出内容都送到光标所在位置,并且把光标逐次向后移动,光标总是移动到最后一个输出符号的后面。选择在适当的位置显示,一般是先把光标移动到需要显示字符的位置,然后用DOS或BIOS的子功能显示输出。在BIOS提供的10H号中断服务子程序中,就有移动光标的子功能。 第9章 文件操作与终端控制9.3.2 字符的属性字符的属性 在字符方式下,一个字符的属性包括它的前景色、背景色和闪烁状态,这些属性组合起来构成一个8位的字节型数据,称为字符的属性值。属性字节与各种属性的对应关系如图9.

31、2所示。 位号: 7 6 5 4 3 2 1 0图9.2 字符的属性字节 第9章 文件操作与终端控制 属性字节的闪烁位表示显示时是否让该字符闪烁,值为1表示闪烁,为0则不闪烁。背景色由3位组成,可以组合出8种颜色,前景色由4位组成,可以组合出16种颜色。前景色与取值的关系如表9.5所示,值为0到7的前8种颜色就是背景色。彩色显示器的各种颜色都是由红、绿、蓝3种基本颜色掺合而成的。背景色的3位及前景色的低3位分别对应这3种基本色,而前景色的最高位实际上是高亮度位。 第9章 文件操作与终端控制表9.5 颜色属性与取值的对应关系颜色 值(Bin) 颜色 值(Bin) 颜色 值(Bin) 颜色 值(B

32、in) 黑 0000 红 0100 灰 1000 浅红 1100 蓝 0001 紫 0101 浅蓝 1001 品红 1101 绿 0010 棕 0110 浅绿 1010 黄 1110 青 0011 灰白 0111 浅青 1011 白 1111 第9章 文件操作与终端控制9.3.3 字符方式的显示缓冲区字符方式的显示缓冲区 显示器是没有记忆能力的,它需要显示接口部件(即常说的显卡)不停地送出信号。显示器接口总是从内存的特定位置取出需要显示的数据,转换成相应的控制信号送往显示器。内存中用于存放显示数据的存储区称为显示缓冲区。Intel系列微型计算机及其兼容机在设计上都把显示缓冲区放在了同样的位置。

33、对于彩色显示器的字符显示方式,显示缓冲区安排在物理地址0B8000H处,共32K。由于屏幕上只能显示2000个字符,每个字符的ASCII码占1个字节,属性值占1个字节,因此一屏字符需要4000个字节的显示缓冲区。实际安排的32K缓冲区对于字符显示方式而言太多了,于是分成8份使用,每份4K,称为一个显示页。系统设计有相应的方法控制显示器接口从哪个显示页取数据显示,被选中送数据去显示的那个显示页称为当前显示页。 第9章 文件操作与终端控制图9.3 字符方式下显示缓冲区与屏幕位置的对应关系 显示缓冲区 偏移(Hex)0行0列字符ASCII值 0000显示屏 0001 0002 0003 009E 0

34、09F 0F9E 0F9F0行0列字符属性值0行1列字符ASCII值0行1列字符属性值0行79列字符ASCII值0行79列字符属性值24行79列字符ASCII值24行79列字符属性值第9章 文件操作与终端控制 所谓直写屏方式显示输出,就是把需要显示的字符及属性值直接送往显示缓冲区。这种输出方式速度快,不依赖于任何服务子程序,也不需要移动光标,是最简便、最灵活的显示输出方式。这种显示方式的缺陷在于与机器结构联系紧密,不同的机型对显示缓冲区的设置是不同的,因而编写出来的程序可移植性较差。比如,在配有彩色显示器的机器上编写的程序就不能拿到单色显示器上运行。 第9章 文件操作与终端控制9.3.4 BI

35、OS的的10H号中断服务程序号中断服务程序9.3.4.1 对光标的控制对光标的控制 1改变光标的大小改变光标的大小 很多编辑软件都支持“插入”和“改写”两种状态,并且除了在编辑屏幕的某个位置用文字说明当前处于哪一种状态之外,还很直观地用光标的大小来区分,在插入状态下光标是一条小短线,改写状态则是一个小方块。改变光标的形状是通过10H中断服务程序中的1号子功能实现的。 调用10H中断的1号子功能前,需要对入口参数规定的AH和CX寄存器赋值,AH中放1,是子功能号,CH和CL中是新定义的光标的起始线和结束线。通常CX被赋值为以下几种情况: 第9章 文件操作与终端控制CX0E0FH, 光标是在字符下

36、部的一条小短线;CX080FH, 光标是下半格的小方块; CX0102H, 光标是在字符上部的一条小短线;CX0FFFFH,消隐光标,即不显示闪烁的光标。第9章 文件操作与终端控制 2改变光标的位置改变光标的位置 通常光标的位置是随着每一次显示逐个向后移动的,但为了在屏幕的指定位置显示字符,就需要先把光标移到那儿,10H中断的2号子功能就用来移动光标。其入口参数是: AH2,子功能号; BH显示页的页号; DH光标移动到哪一行,屏幕顶端为第0行; DL光标移动到哪一列,屏幕左端为第0列。 第9章 文件操作与终端控制 3读光标位置读光标位置 当前屏幕上的光标在什么位置是显示时必须考虑的一个问题,

37、10H号中断的3号子功能可以提供这个数据,其入口参数与出口参数分别如下。 入口参数: AH3,子功能号; BH显示页的页号。 出口参数: DH/DL该显示页的光标所在行/列坐标; CH/CL该显示页的光标起始线/结束线。这个子功能不仅取得了指定显示页中的光标位置,还返回光标的形状,程序中可能会有这些特殊的需要。第9章 文件操作与终端控制9.3.4.2 清屏与卷屏清屏与卷屏 卷屏是DOS状态下的常见现象,也是实际应用的需要。BIOS不仅提供了屏幕内容向上卷动的功能,也提供向下卷屏的功能,还能把屏幕中一个长方形的窗口进行卷屏。实现卷屏操作的分别是BIOS的6号和7号子功能。这两个子功能除了屏幕内容

38、卷动的方向不同外,入口参数都是一样的: AH6/7,子功能号,6为上卷屏,7为下卷屏; AL卷动行数,若AL为0则为清屏; BH卷动后留出的空白部分的属性; CH/CL左上角的行/列坐标; DH/DL右下角的行/列坐标。 第9章 文件操作与终端控制 卷屏与清屏都用这两个子功能实现,当AL中的值是0时就是清屏,非0则是卷屏操作,CX和DX用来指定卷动窗口的坐标。比如,下面的程序段可以把屏幕设置成中间是绿色,四周是蓝色的无字画面。 MOV AX,600H MOV BH,1FH XOR CX,CX ;屏幕左上角坐标 MOV DX,184FH ;屏幕右下角坐标 INT 10H ;用蓝底白字把指定窗口清

39、屏 MOV BH,2FH MOV CX,408H ;窗口左上在第4行、第8列 MOV DX,1447H ;窗口右下在第20行、第71列 INT 10H ;用绿底白字把指定窗口清屏第9章 文件操作与终端控制9.3.4.3 在指定的显示页中显示字符在指定的显示页中显示字符 10H中断的5号子功能可以按入口参数AL中的值设定一个显示页作为当前显示页;0FH号子功能则能取得当前显示方式的有关数据,出口参数的AH是每行字符数,BH是当前显示页的页号,AL是当前显示模式。 在取得当前页的有关数据或者设置新的当前页之后,就可以在当前页的适当位置显示字符了。10H中断服务程序提供了两个显示子功能,分别是9号和

40、0AH号。两者的功能非常接近,都是在指定页的当前光标位置显示字符,并且可以把同一个字符在同一行连续显示多个。这两个子功能都可以保持光标在原位置不动。第9章 文件操作与终端控制 入口参数: AH9/0AH,子功能号; AL待显示字符; BH显示页的页号; CX字符重复次数; BL待显示字符的属性(只对9号子功能有效)。 9号与0AH号子功能的差别在于9第9章 文件操作与终端控制【例9.3】 清屏,并为整个屏幕画一个蓝底白字的外框。【解】 disp MACROx,y;定义重复使用的程序段为一个宏 MOV AL,x MOV DX,y CALL onechar ENDMcode SEGMENT ASS

41、UME CS:code 第9章 文件操作与终端控制clrscr PROC NEAR ;以蓝底白字属性清屏子程序 MOV AX,600H MOV BH,1FH XOR CX,CX MOV DX,184FH INT 10H RETclrscr ENDP;入口:AL待显示字符,DX显示的位置Onechar PROC NEAR第9章 文件操作与终端控制 PUSH AX MOV AH,2 MOV BH,0 INT 10H ;移动光标到DX指定的位置 POP AX MOV CX,1 MOV BL,1FH MOV AH,9 INT 10H ;在当前光标处显示AL中的字符 RETonechar ENDPsta

42、rt: CALL clrscr ;清屏 第9章 文件操作与终端控制 disp 218,0 ;显示外框的左上角 disp 191,4FH ;显示外框的右上角 disp 192,1800H ;显示外框的左下角 disp 217,184FH ;显示外框的右下角 MOV AH,2 MOV DX,1 INT 10H ;移光标到第0行第1列 MOV AX,9C4H MOV BL,1FH MOV CX,78 INT 10H ;显示78个小短线,是外框的顶部 MOV AH,2 MOV DX,1801H INT 10H ;移光标到第24行第1列 第9章 文件操作与终端控制 MOV AX,9C4H MOV CX,

43、78 INT 10H ;显示78个小短线,是外框的底部 MOV SI,100H ;以SI记第1行第0列的位置s1: disp 179,SI;以SI高/低8位作为行/列坐标,显示一个小竖线 ADD SI,100H ;表示行数的高8位加1 CMP SI,1800H JB s1 ;没到最底一行转 MOV SI,14FH ;以SI记第1行第79列的位置s2: disp 179,SI ;以SI高/低8位作为行/列坐标,显示一个小竖线 第9章 文件操作与终端控制ADD SI,100H CMP SI,1800H JB s2 MOV AH,0 INT 16H ;保持屏幕上的状态,等待按键 MOV AH,4CH

44、 INT 21Hcode ENDS END start 第9章 文件操作与终端控制9.3.4.4 取当前光标位置的字符取当前光标位置的字符 取得当前光标位置对应的那个符号的ASCII值是一些程序的特殊需求,这个要求可以通过10H号中断的8号子功能来实现。8号子功能的入口参数除了AH中的功能号之外,只需要在BH中放显示页的页号即可;调用结果是AH中放字符的ASCII值,AL中是它的属性。不论屏幕上显示的是什么,读出光标位置的字符总是可以做到的,即便当前光标位置上什么都没有,那么AX的值将会是2007H,表示是黑底白字的空格符。 第9章 文件操作与终端控制9.3.5 编程实例编程实例 【例9.4】

45、设计一个输入并验证口令的程序,口令可以预置在程序中。 【解】 data SEGMENT buf DB 201,21 DUP(205),187, $ DB 186, PASSWORD : ,186, $ DB 200,21 DUP(205),188, $ ;定义画方框 的字符串第9章 文件操作与终端控制pass DB 12345678inpass DB 8 DUP(0)passlen DW 0msg1 DB PASSED !$ msg2 DB FAILED !$ data ENDS code SEGMENT ASSUME CS:code,DS:dataclrscr PROC NEAR ;以蓝底白

46、字清屏 MOV AX,600H第9章 文件操作与终端控制 MOV BH,1FH XOR CX,CX MOV DX,184FH INT 10H RETclrscr ENDPdisp PROC NEAR ;显示输入口令的画面 MOV CX,3 LEA BX,buf d1: MOV AL,3 SUB AL,CL第9章 文件操作与终端控制 ADD DH,AL MOV AH,2 INT 10H ;移动光标到第AL+12行、第28列 MOV DX,BX MOV AH,9 INT 21H ;显示方框的一行 ADD BX,24 ;使BX指向下方框符号串buf的下一行 LOOP d1 ;3次循环,在屏幕中心显示

47、加框的 PASSWORD字样 RETdisp ENDP 第9章 文件操作与终端控制;输入口令子程序pwd PROC NEAR XOR BX,BXp0: MOV DX,0C29H ADD DX,BX MOV AH,2 INT 10H ;移动光标到正确位置 MOV AH,0 INT 16H ;等待按键 CMP AL,8 JNZ p1 ;不是退格键转 AND BX,BX第9章 文件操作与终端控制 JZ p0 ;已到最左边,不能退格转 DEC BX MOV AH,2 MOV DL,8 INT 21H MOV DL, INT 21H ;退一格,清除前一格上的星号 JMP p0p1: CMP AL,0DH

48、 JZ p3 ;是回车键转 MOV inpass+BX,AL ;把按键作为一个口令字符送 入inpass变量中第9章 文件操作与终端控制 MOV AH,2 MOV DL, * INT 21H ;显示一个星号,光标后移 INC BX CMP BX,8 JB p0 ;不足8个符号转p3: MOV passlen,BX ;记载口令长度 RETpwd ENDP第9章 文件操作与终端控制;验证口令子程序。出口参数:CF0,口令正确;CF1,口令错误 check PROC NEAR ;验证口令子程序 MOV CX,passlen ;取输入口令长度 CMP CX,8 JB c1 ;小于8转 LEA SI,p

49、ass PUSH DS POP ES LEA DI,inpass CLD REP CMPSB STC ;置口令错标记,作为出口参数第9章 文件操作与终端控制 JNZ c1 ;口令错误转 CLC ;置口令正确标记c1: RETcheck ENDP start: MOV AX,data MOV DS,AX CALL clrscr CALL disp CALL pwd CALL clrscr CALL check第9章 文件操作与终端控制 JC s1 LEA DX,msg1 JMP s2s1: LEA DX,msg2s2: MOV AH,9 INT 21H ;显示验证口令的结果 MOV AH,4CH

50、 INT 21Hcode ENDS END start第9章 文件操作与终端控制 【例9.5】设计一个菜单控制程序,在屏幕的第1行显示有若干功能项的菜单条,用左右箭头控制亮条的移动。当亮条移到某一选项后,可以按回车键表示选中该项功能。把最后一个选项定为“退出”,选中该项后程序结束。 【解】 itemnum = 5 ;菜单由5项组成 itemlen = 8 ;每个功能项字符串长度为8 data SEGMENT buf DB Menu Item Number selected : $ data ENDS第9章 文件操作与终端控制stack SEGMENT STACK DW 4096 DUP(?)s

51、tack ENDS code SEGMENT ASSUME CS:code;=; 改变变量menubar中的菜单项颜色;=;入口: AL = 菜单项号码,0到itemnum-1之间; DL = 新的颜色属性值;= ASSUME DS:code第9章 文件操作与终端控制menuattr PROC NEAR PUSH BX PUSH CX MOV BL,(itemlen+2)*2 MUL BL MOV BX,AX INC BX ;计算需要改变颜色的字符位置 MOV CX,itemlen+2attr1: MOV menubar+BX,DL ;设置成新的颜色 INC BX INC BX第9章 文件操作

52、与终端控制 LOOP attr1 AND DL,40H OR DL,3CH ;设置热键的颜色 MOV menubar+BX-itemnum*2-6,DL POP CX POP BX RETmenuattr ENDP;=; 菜单控制子程序;=; 出口参数 : AL选中的菜单项号码 ;= 第9章 文件操作与终端控制MENU PROC NEAR PUSHBXPUSHCXPUSHDXPUSHSIPUSHDIPUSHDSPUSHES CLD MOV AX,code MOV DS,AX第9章 文件操作与终端控制 MOV AX,0B800H ;彩色显示器的显示缓冲区段地址 MOV ES,AX XOR DI,

53、DI MOV AX,7020H MOV CX,80 REP STOSW ;清屏幕第0行 MOV AL,itemc MOV DL,70H ;白底黑字属性 CALL menuattr MOV CS:itemc,0第9章 文件操作与终端控制menu0: MOV AL,itemc MOV DL,3FH ;湖蓝底色,白字 CALL menuattr ;置当前菜单项为itemc记载值menu1: XOR DI,DI LEA SI,menubar MOV CX,itemnum*(itemlen+2) REP MOVSW ;直写屏方式显示 XOR AX,AX INT 16H ;等待按键 CMP AX,4B00

54、H ;左箭头第9章 文件操作与终端控制 JNZ menu2 MOV AL,itemc MOV DL,70H ;白底黑字 CALL menuattr DEC itemc ;记载当前菜单项的变量值减1,左移一项 CMP itemc,0 JGE menu1a ADD itemc,itemnum ;小于0则移到最右一项上menu1a: MOV AL,itemc MOV DL,3FH ;湖蓝底色,白字 CALL menuattr JMP menu0第9章 文件操作与终端控制menu2: CMP AX,4D00H ;右箭头 JNZ menu3 MOV AL,itemc MOV DL,70H CALL me

55、nuattr INC itemc ;记载当前菜单项的变量值加1, 右移一项 CMP itemc,itemnum JB menu1b MOV itemc,0 ;从最右一项再右移,则移到最 左一项第9章 文件操作与终端控制menu1b: MOV AL,itemc MOV DL,3FH CALL menuattr JMP menu0menu3: CMP AL,0DH ;回车键 JZ menu4 MOV AH,2 MOV DL,7 INT 21H ;按键错,发声警告 JMP menu0第9章 文件操作与终端控制 menu4: MOV AL,itemcPOPESPOPDSPOPDIPOPSIPOPDXP

56、OPCXPOPBX RET menubar DB ,70H, (,70H, 1,7CH, ) ,70H, I,70H DB t,70H, e,70H, m,70H, 1,70H, ,70H第9章 文件操作与终端控制DB ,70H, (,70H, 2,7CH, ) ,70H, I,70HDB t,70H, e,70H, m,70H, 2,70H, ,70HDB ,70H, (,70H, 3,7CH, ) ,70H, I,70HDB t,70H, e,70H, m,70H, 3,70H, ,70HDB ,70H, (,70H, 4,7CH, ) ,70H, I,70HDB t,70H, e,70H

57、, m,70H, 4,70H, ,70HDB ,70H, (,70H, 5,7CH, ) ,70H, I,70HDB t,70H, e,70H, m,70H, 5,70H, ,70H itemc DB itemnum-1 MENU ENDP ASSUME DS:data第9章 文件操作与终端控制 main: MOV AX,DATA MOV DS,AX MOV AH,1 MOV CX,-1 INT 10H ;消隐光标 MOV AX,600H MOV BH,17HXOR CX,CX MOV DX,184FH INT 10H ;清屏第9章 文件操作与终端控制next: CALL MENU CMP A

58、L,itemnum-1 JE finish ;选中最右一项则结束 ADD AL,31H MOV buf+30,AL MOV AH,2 MOV DX,1212H XOR BH,BH INT 10H ;移动光标到第18行18列 LEA DX,buf MOV AH,9 INT 21H ;显示刚才选中的是第几项 JMP next第9章 文件操作与终端控制finish: MOV AX,600H MOV BH,7 XOR CX,CX MOV DX,184FH INT 10H ;清屏 MOV AH,1 MOV CX,0F0FH INT 10H ;显示光标 MOV AX,4C00H INT 21Hcode E

59、NDS END main第9章 文件操作与终端控制本本 章章 要要 点点 文件的操作包括建立、打开、读、写、关闭等,操作系统DOS提供了每一种操作的具体方法,编程时只需要按照规定设置入口参数,并用INT 21H指令调用相应子功能。调用结束后应该判断CF的值以确定操作是否成功,并做相应处理。 键盘控制主要是指无回显地读键,判断有无按键和封锁键盘。屏幕控制则有移动光标、控制光标大小、设置显示字符的属性、卷屏等等。有效地控制键盘与屏幕,可以在编制软件时为操作人员提供友好的使用界面。对编程者而言,一方面需要掌握BIOS提供的几个常用中断服务子程序的功能调用,另一方面还要懂得一些硬件知识,了解设备的性能和控制方法。第9章 文件操作与终端控制习习 题题 九九 综合利用各章所学,采用分模块编程技术,完成下面的课题。 9.1 下拉式菜单控制程序,各菜单项自定。 9.2 在屏幕上开设多个窗口,完成各窗口间的切换。切换到的窗口为当前窗口,要在颜色上与其它窗口不同。 9.3 设计一个全屏编辑器。 9.4 为9.3题的全屏编辑器增加文本文件的读、写功能,即可以从磁盘上读出一个文本文件到编辑器中,也可以把编辑的内容存盘。 9.5 为9.3题的程序加上下拉式菜单。 9.6 把第8章的时钟显示程序加到编辑器中,要求启动编辑器后有时钟显示,退出后时钟也随着消失。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!