1.文件代号式磁盘存取
(1)两个重要的表
(2)简要说明:
文件代号式存取方式将有关文件的各种信息都包括在DOS中。 在处理指定文件时必须使用一个完整的路径名,一旦文件的路径名被送入操作系统,就被赋予一个简单的文件代号,这个文件代号是一个16位的数(16位的二进制)。以后对文件进行读写操作时,就用这个文件代号去查找相应的文件。对于每一个打开的文件,DOS还为其管理一个读写指针,读写指针总是指向下一次要存取的文件中的字节,这个读写指针可以移动到文件的任意位置,从而能满足随机存取的要求。
将指针指向开头位置的两种方法:
①关闭文件,重新打开此文件
②利用DOS相应的功能调用
(3)路径名和ASCIZ串
ASCIZ串包括文件的路径名和一个全0的字节。
ASCIZ串的地址装在DX寄存器中。
路径名说明文件的位置,包括磁盘驱动器、目录路径和文件名。
例:PN DB ‘D:\ABC.TXT’,00H ;ASCIZ串
PH DW ? ;文件代号
…
LEA DX,PN
MOV PH,AX ;存储文件代号
(4)文件代号和错误返回代码
对于存取磁盘文件,首先用一个ASCIZ串指定文件并调用DOS功能3CH建立或打开文件。如果成功,操作置CF为0,并把文件代号传送到AX中,这时文件和代号建立了对应关系,所以要注意保存这个代号。如果操作不成功,CF被置1,AX中包含的是错误代码,这个错误代码都取自一个统一的错误信息表。
(5)文件属性
文件属性字节:CX(存放属性字节):xxxxxxxx00xxxxxx
前10位没用到,属性字节只用后六位。
01-只读文件,该文件不能为写而打开。
02-隐文件,用DIR查不到该文件。
03-系统文件,用DIR查不到该文件。
08-软盘的卷标号。
10-子目录。
20-已写入并关闭了文件(硬盘用)。
使用改变文件属性功能(43H)可以改变现有文件的属性。
MOV AH,43H
MOV AL,01
MOV CX,01
MOV DX,SEG FNAME
MOV DS,DX
MOV DX,OFFSET FNAME
INT 21H ;CALL DOS
检验文件属性,AL置为00,操作后当前的属性值返回到CX寄存器。
改变文件属性,置AL为01,CX放入新的属性,操作把这个新属性置入目录项。
(6)写磁盘文件
1.用ASCIZ串从系统中得到文件代号
2.用INT 21H的3CH功能号建立文件
3.用INT 21H的40H功能号写入文件
4.用INT 21H的3EH关闭文件
(7)读磁盘文件
1.用ASCIZ串从系统中得到文件代号
2.用INT 21H的3DH功能号打开文件
3.用INT 21H的3FH功能号读入文件
4.用INT 21H的3EH关闭文件
(8)移动读写指针
DOS提供了移动读写指针功能42H,该功能要求在BX中指定文件代号,由AL中的代码确定改变指针的三种方式。在每种方式中,由CX和DX指定一个双字长的偏移值,低位字在DX中,高位字在CX中,这个偏移值是一个带符号的整数,它可以是正数,也可以是负数。
①AL=00 绝对移动方式 偏移从文件首开始计算。
例:从文件首开始,移动指针1024字节。
MOV AH,42H
MOV AL,00
MOV BX,HANDLE1
MOV CX,00
MOV DX,1024
INT 21H
JC ERROR
②AL=01 相对移动方式 当前的指针值加上偏移值作为新的指针值。
例:MOV BX,HANDLE
MOV CX,0
MOV DX,N
CMP DX,0
JGE POINT
NOT CX
POINT:MOV AL,1
MOV AH,42H
INT 21H
JC ERROR