目录 上一页 下一页 下一章

第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

目录 上一页 下一页 下一章