以 8086 读取文件,直到文件结束
Read file in 8086 until the end of the file
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 调用不仅通过进位标志通知您可能的错误,而且还在 AX
中 returns 注册实际读取的字节数。
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
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 调用不仅通过进位标志通知您可能的错误,而且还在 AX
中 returns 注册实际读取的字节数。
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