当我使用int 21h函数时,我的asm代码写入了垃圾字节

时间:2014-08-12 16:55:00

标签: file assembly character-encoding dos tasm

我在Stack Overflow上进行了搜索,但我没有找到与我的问题相似的内容。我的问题是这样的:我有一个代码打开一个文件并在最后写一条消息。当我第一次使用int 21h写入文件时,如果文件为空则写得很好,但如果文件有内容,程序会在末尾添加许多垃圾字节(字符如畂或其他日文或中文字符) )。

我检查过程序写的字节数不超过消息长度。请帮我。这是我的源代码:

.model tiny
.code

main:
    call delta          
delta:
    pop bp              
    sub bp, offset delta


    mov ax, @code       ;Get the address of code segment and store it in ax
    mov ds, ax          ;Put that value in Data segment pointer.
                    ;Now, we can reference any data stored in the code segment
                    ;without fail.
;Subroutines
open:
    mov ax, 3D02H   ;Opens a file
    lea dx, [bp+filename];Filename
    int 21h         ;Call DOS interrupt
    mov handle, ax  ;Save the handle in variable

move_pointer_to_end:
    mov bx, handle
    mov  ax,4202h                 ; Move file pointer
    xor  cx,cx                    ; to end of file
    cwd                           ; xor dx,dx
    int  21h

write:
    mov ax, 4000H
    mov bx, handle
    lea dx, [bp+sign]
    mov cx, 16
    int 21H

exit:
    mov ah,4Ch          ;Terminate process
    mov al,0            ;Return code
    int 21h

datazone:
    handle dw ?
    filename db 'C:\A.txt', 0
    sign db 'Bush was here!!', 0

end main

请帮助我!!

1 个答案:

答案 0 :(得分:2)

那是因为您要附加数据的文件是以unicode编码的。如果从记事本或其他文本编辑器中写出文件并保存,则必须选择ANSI作为编码。然后,如果您将程序指向ANSI编码的文本文件,它应该附加用预期结果指示的字符串。

Unicode为每个字符分配两个字节,因此在十六进制编辑器中,您可能会看到s.o.m.e.t.h.i.n.g. .l.i.k.e. .t.h.i.s.而不是something like this,您可能会看到ANSI或UTF-8。