我目前正在开发一个项目,我需要将数字写入文件。这是我到目前为止所尝试的:
keyHolder dw ?
filename db 'drawlog.txt',0
filehandle dw ?
ErrorMsg db 'Error', 13, 10,'$'
proc OpenFile
mov ah, 3Dh
mov al, 2
mov dx, offset filename
int 21h
jc openerror
mov [filehandle], ax
ret
openerror:
mov dx, offset ErrorMsg
mov ah, 9h
int 21h
ret
endp OpenFile
proc closeFile
mov ah,3Eh
mov bx,[filehandle]
int 21h
ret
endp closeFile
proc writeKeyToFile
mov ah, 40h
mov bx,[filehandle]
mov cx, 1
mov dx, offset keyHolder
int 21h
mov cx,1
mov ah, 40h
mov dl, 13
int 21h
mov cx,1
mov ah,40h
mov dl, 10
int 21h
ret
endp writeKeyToFile
代码有点工作,但我想问两件事。首先,在写入发生之后,文件包括应该写入的内容和其他奇怪的符号。其次,如果我想(写入文件时),我怎么能排成一行?
答案 0 :(得分:1)
在写入发生之后,文件包括应该写的内容和其他奇怪的符号
您指定应写入16个字节(mov cx, 16
- 我假设这是DOS,但您没有提到)。您指定的地址只是一个2字节的变量。以下14个字节可能包含不应写入文件的值。
如果keyHolder
实际上表示字符串,请不要将其声明为“单词”(dw
) - 它是一个字节序列。 (你甚至可以确定2个字节足以代表你想要写的数字吗?)
第二件事是我怎么能在我想要的时候(写到文件时)
写一个回车符+换行序列(CRLF;字节值13后跟10)。
答案 1 :(得分:0)
keyHolder
。要传递到文件中的新行,请声明此变量:
newline db '\r\n'
然后在编写keyHolder
后将其写入文件。因此,writeKeyToFile
函数变为:
proc writeKeyToFile
mov ah, 40h
mov bx,[filehandle]
mov cx, 16
mov dx, offset keyHolder
int 21h
mov ah, 40h
mov bx,[filehandle]
mov cx, 2
mov dx, offset newline
int 21h
ret