![]() | 第8章 文件句柄功能与磁盘 | -219- | |||||||||||||||||||
loop1: exit: main code |
mov mov mov int jc mov mov mov mov int jc cmp jb mov int jc jmp mov int mov int endp ends end |
ds,ax dx,offset fname ax,3d02h 21h exit bx,ax ah,3fh dx,offset buffer cx,1 21h exit ax,cx exit ah,40h 21h exit loop1 ah,3eh 21h ah,4ch 21h main |
;DX寄存器指向文件名的ASCIIZ串 ;按"读/写"方式打开文件 ;若文件打开错误,转EXIT结束 ;BX寄存器取得文件指针 ;准备读取数据 ;DX寄存器指向文件缓冲区 ;读入一个字节 ;若文件读取出错,转EXIT结束 ;确实读入了一个字节吗? ;没有读入数据,转EXIT结束 ;将数据写出到原文件中 ;若写文件出错,转EXIT ;转LOOP1继续处理下一个字节 ;关闭文件 ;结束进程 |
||||||||||||||||||
如果大家打算试试自己的能力,可以在执行这个程序之前仔细读一下这个程序,想一想它会产生一个什么样的结果。 这个程序运行之后大家会发现名为CONFIG.TXT的文本文件被弄得一团糟。笔者的CONFIG文件的第一行原本是"[MENU]",结果被改成了"[[EEUU"。规律很容易发现,所有在偶数位置的字符都被前面的字符代替了。 我们一起来研究一下上面这个程序中的"循环"部分,可以看到我们在使用了3FH功能读取一个字节之后马上又将这个字节写入了文件。由于DOS在打开了CONFIG.TXT之后首先设置文件读写指针为零,这样我们在第一次使用3FH功能时读入内存的就是文件的第一个字符。请注意DOS在执行完3FH功能后要修改文件读写指针使其加1,因此在执行完第一个3FH功能后文件读写指针将指向文件中的第二个字符。而后我们马上又将刚读入的字符写入文件,写入时DOS同样要查看文件读写指针指向何处,恰好此时文件读写指针已经指向了第二个字节处,所以DOS就将刚读入的字符写入文件的第二个字节处,原来的数据就被覆盖了。 对于笔者的CONFIG文件来说,第一次读入内存的是字符"[","["读入后文件读写指针指向了"M",因此当程序将"["写入文件时,DOS就会把"["写入"M"所在的位置,所以"M"变成了"["。DOS完成写入功能后它还要修改文件读写指针,使其再加1,这样文件读写指针就指 |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |