目录 上一页 下一页 下一章

-188- PC机汇编语言实战精解

ERR_EXIT:


MAIN
CODE


MOV
INT
ENDP
ENDS
END

AH,4CH
21H


MAIN

;结束进程




  我们使用了两个FCB打开两个文件,第一个FCB用于"源文件"CONFIG.SYS,第二个用于"目的文件"CONFIG.TXT。程序从"源文件"中读入数据,转换成小写后写入"目的文件",如此循环,直至读数据时DOS返回了错误码01H为止。这个程序的思路很清楚,无需过多解释。大家可以在DOS下直接执行这个程序,看看有何结果。
  不知道各位读者看到的结果和笔者看到的是否一样,执行此程序后,当前目录下出现了一个新的文件--CONFIG.TXT,但这个文件的长度为0,它没有实质内容。
  出现这样一个结果的原因稍有些复杂,我们先来看看如何解决这个问题。很简单,执行完所有的"顺序写"操作后将"目的文件"CONFIG.TXT关闭即可。DOS提供的关闭文件功能如下所述:
功能号:10H
用 途:关闭一个已打开的文件
参 数:DS:DX = 打开的FCB起始地址
调 用:INT 21H
返 回:AL = 0 -- 成功关闭文件
    AL = 0FFH -- 关闭失败
  这个功能和"打开文件"功能正相反,但AL返回的状态码含义是一样的。我们现在利用这个功能将上面的程序中标号ERR_EXIT后面部分改成下面这样:
ERR_EXIT:







MOV
MOV
INT

MOV
INT

AH,10H
DX,OFFSET FCB2
21H

AH,4CH
21H

;利用DOS的10H功能
;将FCB2指示的文件关闭


;结束进程

  重新编译程序并执行,这时就会看到当前目录下出现的CONFIG.TXT文件长度不再是0了。而且用TYPE命令确实可以看到其中的字符全部是小写。
  不知道你的"源文件"有多大,如果你的CONFIG文件长度不是恰好凑够整数个记录的话那么你会发现生成的目的文件长度和源文件不等。这个问题我们暂且忽略,现在先来讨论一下为什么将文件关闭后就能获得正确的结果。
  "关闭文件"其实有两个作用,第一是将DOS的文件缓冲区中的内容写入磁盘中;第二是在磁盘的目录表中建立一个具有正确特征信息的目录项。我先来谈一谈DOS的文件缓冲区是怎么回事。如果你很熟悉如何建立CONFIG文件,那么在你建立一个新的配置文件时一定不会忘记使用"BUFFERS=xx"设置DOS的缓冲区数。很多DOS手册都指出了设置合适的缓冲区数可以提高DOS的磁盘操作效率,这个道理从何而来?我们现在就要搞清楚DOS的缓冲区是什么样的结构。

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章