下面的代码显示了我的一个程序,它可以将字节(一次一个字节)从一个文件复制到另一个文件。我该怎么做才能让它从文件中复制字节并将其保存到字符串中?
reading:
;READ ONE BYTE.
mov ah, 3FH ;read from the file
mov bx, handle ;normal file
mov cx, 1 ;HOW MANY BYTES TO READ.
mov dx, offset buffer ;THE BYTE WILL BE STORED HERE.
int 21h ;NUMBER OF BYTES READ RETURNS IN AX.
;CHECK EOF (END OF FILE).
cmp ax,0 ;IF AX == 0 THEN EOF.
je eofp
;WRITE BYTE TO THE SECOND FILE.
mov ah, 40h ; write to
mov bx, handle2 ; file handle
mov dx, offset buffer ; where to find data to write
mov cx, 1 ;LENGTH OF STRING IN CX.
int 21h
jmp reading ;REPEAT PROCESS.
eofp:
答案 0 :(得分:2)
你需要一个指向字符串的指针,使用指针存储指针指向的字节,然后向前移动指针,这里是代码:
lea si, mystring ;SI POINTS TO A STRING. <======================
reading:
;READ ONE BYTE.
mov ah, 3FH ;read from the file
mov bx, handle ;normal file
mov cx, 1 ;HOW MANY BYTES TO READ.
mov dx, offset buffer ;THE BYTE WILL BE STORED HERE.
int 21h ;NUMBER OF BYTES READ RETURNS IN AX.
;CHECK EOF (END OF FILE).
cmp ax,0 ;IF AX == 0 THEN EOF.
je eofp
;SAVE BYTE IN STRING. <======================
mov al, buffer ;AL = BYTE READ.
mov [ si ], al ;SAVE BYTE IN CURRENT POSITION.
inc si ;MOVE POINTER TO NEXT POSITION.
jmp reading ;REPEAT PROCESS.
eofp:
注意SI在开始时如何指向字符串。检查EOF后,我们将读取的字节存储在[SI]中,然后增加SI(这里我们理解SI和[SI]之间的差异)。
但是第二个字符串不是必需的。我们已经让DX指向&#34;缓冲区&#34;,在标签之前移动它&#34;阅读&#34;,然后,在阅读之后,让我们增加它(它是初始化所必需的) DX之前&#34;读取&#34;或者它会将所有读取的字节保存在同一位置):
mov dx, offset buffer ;THE BYTE WILL BE STORED HERE. <==========================
reading:
;READ ONE BYTE.
mov ah, 3FH ;read from the file
mov bx, handle ;normal file
mov cx, 1 ;HOW MANY BYTES TO READ.
int 21h ;NUMBER OF BYTES READ RETURNS IN AX.
inc dx ;POSITION FOR NEXT BYTE. <================================
;CHECK EOF (END OF FILE).
cmp ax,0 ;IF AX == 0 THEN EOF.
je eofp
jmp reading ;REPEAT PROCESS.
eofp:
为了提高流程效率,您可以一次读取一个字节,一次读取两个字节,或一次读取10个字节。
正如Gondil所说,这适用于小于64Kb的小文件。对于较大的文件,您需要分配内存(但这是另一个问题)。