写入程序集

时间:2016-05-16 13:15:30

标签: assembly x86 dos

我目前正在开发一个项目,我需要将数字写入文件。这是我到目前为止所尝试的:

    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

代码有点工作,但我想问两件事。首先,在写入发生之后,文件包括应该写入的内容和其他奇怪的符号。其次,如果我想(写入文件时),我怎么能排成一行?

2 个答案:

答案 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