目录 上一页 下一页 下一章

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

  打开文件只能对磁盘上已经存在的文件进行操作,如果我们想在磁盘上建立一个新的文件,那么我们应该使用21H中断的16H功能。这个功能所要传递的参数和0FH功能一致,返回的结果也和OFH功能相同,大家可以将程序FCB1.ASM中的指令"MOV AH,0FH"改为"MOV AH,16H",即可构成一个用于观察16H功能的程序。
  为了避免不必要的损失,我们在执行或跟踪这个程序之前需要讨论一下建立文件时要注意的一些东西。这个功能调用是在当前目录下新建一个目录项并使相应的FCB处于打开状态,所以使用这个功能后无需再用0FH功能。很重要的一点,如果我们建立的文件恰好和磁盘上已存在的某个文件重名,那么执行此操作后磁盘上己有的文件其长度将被置成0,如果对这个文件执行写操作,那么旧的内容将被新内容覆盖。所以在执行或跟踪这个程序之前请确认当前目录下没有CONFIG.SYS,否则下次启动系统时恐怕就要出麻烦。下面我们就来跟踪这个程序:
C:\ASM\>DEBUG FCB1.EXE[Enter]
G=0 C[Enter]
AX=1600BX=0000CX=004FDX=0000SP=0000BP=0000SI=0000DI=0000
DS=2589ES=2579SS=2589CS=258CIP=000C NV UP EI PL NZ NA PO NC
258C:000C0AC0OR AL,AL
-d0 24当前驱动器为"C:"文件名及扩展名
2589:000003 43 4F 4E 46 49 47 20-20 53 59 53 00 00 80 00.CONFIG  SYS....
2589:001000 00 00 00 46 21 CD 8B-40 02 42 00 00 61 B8 0F....F!..@.B..a..
2589:002000 00 00 00 00.....
  跟踪结果和0FH功能几乎一样,不过DOS返回到FCB中的数据有很多与0FH功能不同,比如建立文件的时间和日期,大家可以自己分析一下日期和时间,对对手表,看看是否一致。
  继续将这个程序执行完,然后退出DEBUG,再次执行DIR操作,看看当前目录下是否出现了一个长度为0的新文件。
  在扩展FCB的支持下,这个功能还可以建立具有特定属性的文件,继续修改FCB1.ASM,将数据段定义改为下面的形式(代码段不变):
DATA

MY_FCB


ATTRIB
DRIVE
FILE_NAME
EXT_NAME
CUR_BLOCK
REC_SIZE
FILE_SIZE
CREA_DATE
SEGMENT
ASSUME
LABEL
DB
DB
DB
DB
DB
DB
DW
DW
DW
DW

DS:DATA
BYTE
-1
5 DUP (0)
1
0
'CONFIG '
'SYS'
?
?
2 DUP(?)
?



;扩展的FCB起始


;驱动器号,0:当前 1:A 2:B ...
;文件名
;扩展名
;当前记录块号
;记录长度
;文件长度,由系统填入
;建立或最后修改的日期,由系统填入

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章