这只是我需要在文件处理中学习的练习代码。我需要读取一个文件,并将其内容复制到另一个创建的文件中,然后在该文件上我需要附加一个特定的签名。TASM汇编语言写入文件功能40H写错字符?
首先我的源代码:
.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
它读取这个内容的文件:
你好
然后输出(创建另一个文件)与此内容
你好(空格)30䥎佃䅌⁓䅗⁓䕈䕒
我的问题是,它为什么附加汉字?我需要追加的字节是.data中的数据'符号'。
在此先感谢!
它只是我还是它看起来像你总是从缓冲区复制100个字节到输出文件句柄? –
我知道从文件复制100个字节。然而,还有第二次写入调用只写入了“符号”,它是18个字节。我猜这是中国/垃圾角色造成的。 – Julienn