![]() | 第7章 文件控制块 | -195- | |||||||||||||||||||
7.3.2 随机块读写功能 | |||||||||||||||||||||
![]() |
功能号: 用 途: 参 数: 调 用: 返 回: |
27H 随机读取出一组记录 DS:DX--打开的FCB首地址 CX--要读取的记录数 INT 21H AL = 0--读到全部指定记录 AL = 1--已读到文件尾 AL = 2--记录溢出段 AL = 3--读出部分记录 CX = 实际读到的记录数 |
功能号: 用 途: 参 数: 调 用: 返 回: |
28H 随机写出一组记录 DS:DX--打开的FCB首地址 CX--要写出的记录数 INT 21H AL = 0--写出全部的记录 AL = 1--磁盘已满 AL = 2--记录溢出段 CX = 实际写出的记录数 |
|||||||||||||||||
从给出的应用方法我们可以看到随机块存取与随机存取功能在使用上的区别就在于入口参数与返回的结果中要涉及记录个数,其余的基本一致。不过这里我有必要说明一下这两个功能的出错情况: (1)如果这两个功能返回的错误码02H,则表明记录溢出了DTA所在段。不过这时可能已经读入或写出了一些记录,出现这种情况程序需要根据CX返回的数据判断究竟读入了多少记录。 (2)如果返回的错误码为00H,表明子功能正确执行,此时DOS会修改FCB中随机记录号、当前记录块号和当前记录号,使它们都指向下一个记录。 (3)如果随机块写功能写出0个记录,则DOS将不写出任何数据,但此时DOS要修正文件长度,使之增长或缩减到由随机记录域和记录长度域两者结合所指示的长度。这是个很有趣的现象,有时我们可以用此方法修改文件的长度,这在一些杀病毒程序中有应用。 下面的程序例给出了这两个功能的实际应用情况,注意程序是如何调整目的文件的长度的。跟踪的结果附在程序例后面: |
|||||||||||||||||||||
FCBCOPY.ASM ;数据段定义同FCB7.ASM,此处省略 |
|||||||||||||||||||||
CODE MAIN |
SEGMENT ASSUME PROC MOV MOV MOV MOV INT OR JNZ |
CS:CODE FAR AX,DATA DS,AX AH,0FH DX,OFFSET FCB1 21H AL,AL ERR_EXIT |
;初始化DS寄存器 ;打开"源文件" ;"源文件"正确打开了吗? ;若没有正确打开文件,转ERR_EXIT |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |