在 8086 中读取文件直到文件结束
Posted
技术标签:
【中文标题】在 8086 中读取文件直到文件结束【英文标题】:Read file in 8086 until the end of the file 【发布时间】:2020-09-22 05:43:50 【问题描述】: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 个字母。我需要的是在不知道其中有多少个字母的情况下读取整个文件,因此程序将读取它们有多少个字母。
【问题讨论】:
如果文件太大以至于它不仅不能放在一个段中,甚至不能放在整个 RAM 中怎么办?.. 不,我只需要每次读取 5 位,然后将这 5 位发送到另一个文件并重新读取另外 5 位,直到文件结束 返回时,AX 将包含读取的字节数 (source)。通常,您所做的是分配一个适当大小的缓冲区,将文件的一块读入缓冲区,处理该块,然后重复。你知道你完成的 AX 比你要求的要少。 * 当 AX 小于... 【参考方案1】:MOV AH,3FH MOV BX,HANDLE MOV DX,OFFSET(BUFFER) ;READ MOV CX,30 INT 21H
这是您需要用一个循环替换的代码,该循环读取文件的连续块直到没有任何内容。
3Fh DOS 调用不仅通过进位标志通知您可能的错误,而且还在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
...
请注意下一个 sn-p 中的错字。句柄进入BX
寄存器!
MOV AH,3EH MOV DX,HANDLE ;CLOSE INT 21H
【讨论】:
以上是关于在 8086 中读取文件直到文件结束的主要内容,如果未能解决你的问题,请参考以下文章
在java中读取二进制文件,直到特定的“%% EOF”标记?