1

这只是我在文件处理中需要学习的练习代码。我需要读取一个文件,并将其内容复制到另一个创建的文件中,然后在该文件上附加某个签名。

首先我的源代码:

.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

它读取包含以下内容的文件:

你好

然后它输出(创建另一个文件)这个内容

你好(空格)ഊ䥎佃䅌⁓䅗⁓䕈䕒</p>

我的问题是,为什么它会附加中文字符?我需要附加的字节是 .data 中的数据“符号”。

提前致谢!

4

1 回答 1

1

您正在向文件写入 100 个字节。您一开始没有读取 100 个字节,因为输入文件比这短,所以您正在写入超出读取内容末尾的垃圾数据。int 21 function 3f 返回AX中实际读取的字节数;你应该只写那么多字节,而不是固定的 100。

于 2013-06-24T04:47:34.003 回答