MOV AH,3DH
MOV DX,OFFSET(FNAME)
MOV AL,0 ; 0 MEAN FOR READING PURPOSE ;OPEN
INT 21H
MOV HANDLE,AX
MOV AH,3FH
MOV BX,HANDLE
MOV DX,OFFSET(BUFFER) ;READ
MOV CX,30
INT 21H
MOV AH,3EH
MOV DX,HANDLE ;CLOSE
INT 21H
现在程序只读取文件中的30个字母。我需要的是在不知道文件中有多少字母的情况下读取整个文件,这样程序就会读取所有的字母。
MOV AH,3FH MOV BX,HANDLE MOV DX,OFFSET(BUFFER) ;READ MOV CX,30 INT 21H
这就是你需要用一个循环来代替的代码,这个循环可以连续读取文件的各个块,直到什么都不剩。
3Fh DOS调用不仅通过carry标志通知你可能出现的错误,而且它还会以 AX
注册实际读取的字节数。
ReadMore:
mov dx, offset BUFFER
mov cx, 5 ; Your chunk apparently has 5 bytes
mov bx, HANDLE
mov ah, 3Fh ; DOS.ReadFile
int 21h ; -> AX CF
jc ReadError
cmp ax, cx ; Compares RECEIVED BYTES with REQUESTED BYTES
jb PartialRead
WholeChunk:
... Whatever you need to do with 5 bytes ...
jmp ReadMore
PartialRead:
test ax, ax
jz EndOfFile
PartialChunk:
... Whatever you can do with 1, 2, 3, or 4 left-over bytes ...
EndOfFile:
mov bx, HANDLE
mov ah, 3Eh ; DOS.CloseFile
int 21h
...
请注意下一个片段中的拼写错误。句柄应该放在 BX
注册
MOV AH,3EH MOV DX,HANDLE ;CLOSE INT 21H