无论学习什么样的程序设计语言,文件操作都是一项十分重要的内容,那些经过程序处理的数据最终总是要保存到磁盘文件中去。所以我们可以这样认为,只有掌握了如何应用所学的语言操作文件,那么所学的语言才算真正具有了实用价值,才能切实应用到实践当中去。所以在这一章里,我们将共同学习应用汇编语言操作文件基本方法,并且分别讨论DOS和BIOS所采用的几种磁盘存取方式。
外存储器(诸如软盘、硬盘及磁带等)可以存放数以"兆"计的数据,如果这些数据是杂乱无章的存放,那么我们就很不好管理它们,所以我们把相关的数据分在一组中并为不同的数据组起了名字,于是就形成了文件。所以说所谓文件,其实就是存放在外存储器中的一组组的数据。
什么样的软件可以称为操作系统?笔者认为一个软件如果可称为操作系统,那么它必须具备这样两个功能:设备管理和文件管理。这是一个操作系统所应具备的两个最为基本的功能,缺了其中任何一个都不能算是操作系统。我们所使用的DOS刚好具备这两个基本功能,它可以管理显示、存储等各种基本设备,还可以通过安装设备驱动程序管理诸如CD-ROM之类扩充设备,它也具有文件与目录的管理功能,所以我们说DOS是一个"最简"型的操作系统。这种"最简"的特性使DOS具有内核小巧、速度快等优点,这使得它可以广泛应用于PC机上。
在这一章中我们要处理的对象究竟是什么?大家可能会不加思索地回答:"当然是文件了。"这个回答没有错误,但它不全面。要知道,存在于磁盘上的不仅有文件,而且还有子目录和卷标,这些都是我们要处理的对象。即使是文件相互之间也是有区别的,有关内容我们后面会谈到。
DOS的文件管理功能像个大杂烩,它给用户提供了两种完全不同的处理文件的方法。一种方法取自老祖先--CP/M-86,我们称其为"文件控制块"法,简称FCB法;另一种方法取自UNIX操作系统,我们称其为"文件句柄"法。这种方法是在DOS 2.0版中引进的,在以后的版本中得到了发展,而FCB法只是为了"兼容"而设,所以MicroSoft推荐使用"文件句柄"法。不过通过后面的学习你会发现,其实这两种方法各有优势,它们都不能取代对方。
文件之间是有区别的,有些文件中包含的都是具有实际意义的ASCII字符,如文字、标点、制表符以及回车换行等等,这种文件称为"文本文件"。我们前面编写的所有"源程序文件"其实都是文本文件。
还有一些文件中包含的都是些无规律的数据,这些数据可能是指令的机器码或者具有其它什么含义,这样的一些文件就称为"二进制文件"。最常见的就是那些EXE和COM类的文件。这两种文件很好区分,文本文件可以用"TYPE"命令显示在屏幕上,而二进制文件则只能列出一些杂乱的字符。
值得注意的是一些高级语言将这两种文件分别处理,比如C语言,甚至DOS的COPY命令也要区分文本与二进制。不过对于汇编语言来说这两种文件没有区别,"文本"不过是"二进制"的一个"子集"而已。
我们在处理现实中的文件是采用什么步骤呢?举个例子,假如现在有一份文件摆在我们面前,我们要处理这个文件,那么第一步我们要打开这个文件,这是我们能够处理文件(至少是能够看到文件内容)的先决条件。第二步我们就要读出文件的内容,或者是修改其中的内容,也可能要加入新内容,这才是真正的处理过程。最后我们要合上这个文件表示我们的处理工作结束而且新的文件内容被确定。现实中的工作无非如此。
程序处理文件时也是这样做的,无论采用什么方法处理文件,程序的第一步也是"打开"文件,注意这里"打开"的含义是通知操作系统找到这个文件并取得这个文件的特征信息,比如文件的长度,建立或最后修改的日期以及文件在磁盘中的位置等等。经过这一步之后操作系统就和这个文件建立的联系,以后我们就可以利用系统功能对这个文件进行操作。第二步我们就可以正式处理这个文件了,我们可以"读出"文件内容,也可以"写入"新的内容。这些工作和我们现实中的处理是一样的。最后我们还要"关闭"这个文件,这是为了通知操作系统将处理后的内容存入文件并取消和这个文件的关联。
注意有些时候我们还要做建立新文件的工作,现实中的处理方法是"给文件起个名字,并且要注明文件的性质--一般或者保密",文件建立后也随之被打开了,我们即可马上写入新内容。
程序也是这样建立磁盘文件的,一般的步骤是"给出文件名和属性,调用系统功能建立文件,写入新内容,关闭文件"。看来计算机处理文件和我们人类的工作方式没什么区别,无非我们人类用双手和大脑工作而计算机使用"系统功能"完成工作而已。
有了以上这些基础知识,我们对文件处理也就有了一些大概的了解,下面我们就可以详细地讨论如何编制程序处理磁盘文件了。 s