Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 我的asm代码在使用int 21h函数时写入垃圾字节_File_Assembly_Character Encoding_Dos_Tasm - Fatal编程技术网

File 我的asm代码在使用int 21h函数时写入垃圾字节

File 我的asm代码在使用int 21h函数时写入垃圾字节,file,assembly,character-encoding,dos,tasm,File,Assembly,Character Encoding,Dos,Tasm,我对堆栈溢出进行了搜索,没有发现任何类似于我的问题。我的问题是:我有一个代码可以打开一个文件并在最后写一条消息。当我第一次使用int 21h写入文件时,如果文件是空的,它写得很好,但是如果文件有内容,程序会在末尾添加许多垃圾字节(如畂 或其他日文或中文字符) 我已检查程序写入的字节数是否不超过消息长度。请帮帮我。以下是我的源代码: .model tiny .code main: call delta delta: pop bp

我对堆栈溢出进行了搜索,没有发现任何类似于我的问题。我的问题是:我有一个代码可以打开一个文件并在最后写一条消息。当我第一次使用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

请帮帮我

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


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

您是否在十六进制编辑器中查看了输出?我感觉您正在将utf-8或iso-8859-1格式的原始ASCI附加到unicode格式的文件中。您必须在退出程序之前关闭该文件。谢谢您的回答。我用集成在代码块中的十六进制编辑器检查了该文件。在代码块十六进制编辑器中,我可以看到字符串。但当我用记事本打开它时,我只能看到汉字。为什么???记住int 21h的函数4Ch已经关闭了所有打开的文件句柄。但是他们的错误是使用函数42h(LSEEK)移动文件指针。谢谢您的回答,@JustKevin@jhonny6721您可以通过检查文件是否以@xmojmr开头来自动检测记事本保存的文件格式谢谢您的帮助。