这只是我需要在文件处理中学习的练习代码。我需要读取一个文件,并将其内容复制到另一个创建的文件,然后在该文件上我需要附加一个特定的签名。
首先是我的源代码:
.MODEL SMALL
.STACK 100H
.DATA
FLENME DB 'D:\README.TXT', 0
FLENMEC DB 'D:\READMECPY.TXT', 0
BUFFER DW 100 DUP(0)
HANDLE DW ?
OERROR DB 'ERROR IN OPENING FILE', 10, 13, '$'
RERROR DB 'ERROR IN READING FILE', 10, 13, '$'
CLERROR DB 'ERROR IN CLOSING FILE', 10, 13, '$'
CRERROR DB 'ERROR IN CREATING FILE', 10, 13, '$'
WERROR DB 'ERROR IN WRITING FILE', 10, 13, '$'
FPERROR DB 'ERROR IN MOVING FILE POSITION', 10, 13, '$'
SIGN DB 10, 13, 'NICOLAS WAS HERE' ;18 BYTES
.CODE
BEGIN PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV AX, 3D02H
LEA DX, FLENME
INT 21H
JC OPNER
MOV HANDLE, AX
MOV AX, 3F00H
MOV BX, HANDLE
MOV CX, 100
LEA DX, BUFFER
INT 21H
JC RDER
MOV AX, 3E00H
MOV BX, HANDLE
INT 21H
JC CLSER
MOV AX, 3C00H
LEA DX, FLENMEC
INT 21H
JC CRER
MOV HANDLE, AX
MOV AX, 4000H
MOV BX, HANDLE
LEA DX, BUFFER
MOV CX, 100
INT 21H
JC WERR
MOV AX, 4202H
MOV BX, HANDLE
MOV CX, 0000H
MOV DX, 0000H
INT 21H
JC FPERR
MOV AX, 4000H ;This line for writing to file the signature
MOV BX, HANDLE
MOV CX, 18
LEA DX, SIGN
INT 21H
JC WERR
MOV AX, 3E00H
MOV BX, HANDLE
INT 21H
JC CLSER
JMP EXT
OPNER: LEA DX, OERROR
JMP EERRR
RDER: LEA DX, RERROR
JMP EERRR
CLSER: LEA DX, CLERROR
JMP EERRR
CRER: LEA DX, CRERROR
JMP EERRR
WERR: LEA DX, WERROR
JMP EERRR
FPERR: LEA DX, FPERROR
JMP EERRR
EERRR: MOV AX, 0900H
INT 21H
EXT: MOV AX, 4C00H
INT 21H
BEGIN ENDP
END BEGIN
它读取包含此内容的文件:
您好
然后输出(创建另一个文件)这个内容
你好(空格)ഊ䥎佃䅌⁓䅗⁓䕈䕒
我的问题是,为什么会附加中文字符?我需要追加的字节是.data中的数据'sign'。
提前致谢!
答案 0 :(得分:1)
您正在向文件写入100个字节。你没有读取100个字节,因为输入文件比那个短,所以你写的垃圾数据超出了读取的结尾。 int 21 function 3f返回在AX中读取的实际字节数;你应该只写那么多字节,而不是固定的100。