Assembly 程序集代码帮助(创建新文件)

Assembly 程序集代码帮助(创建新文件),assembly,dos,x86-16,Assembly,Dos,X86 16,我是装配新手。我必须做一个程序,将输入文件的数据复制到输出文件。但是必须创建这个输出文件 问题是,我无法创建这个文件,它看起来很简单 我使用的代码是 .model tiny .data outputfile db "newfile.txt",0 outhandle dw ? .code .stack cseg segment 'code' assume cs:cseg, ds:cseg org 100h start: create_a_file: mov d

我是装配新手。我必须做一个程序,将输入文件的数据复制到输出文件。但是必须创建这个输出文件

问题是,我无法创建这个文件,它看起来很简单

我使用的代码是

.model tiny
.data

outputfile db "newfile.txt",0   
outhandle dw ?  
        .code
.stack
    cseg segment 'code'
assume cs:cseg, ds:cseg
org 100h
start:
create_a_file:
 mov dx, offset outputfile
 mov cx, 0
 mov ah, 3Ch
 int 21h
 mov outhandle, ax
jc error_routine
mov ah, 3Eh
 mov bx, outhandle
 int 21h

error_routine:
mov ax, 4c00h
 int 21h
 cseg ends
end start
我在任何地方都看不到新文件。即使我指定了确切的根文件夹,如“c:…” 我不知道出了什么问题。 谢谢你的帮助,谢谢
PS:Im使用windows XP 32位。和TASM(便携式)

如果您打算创建一个.COM程序,请将源代码简化为:

cseg segment 'code'
    assume cs:cseg, ds:cseg, es:cseg, ss:cseg
    org 100h
start:

create_a_file:
    mov dx, offset outputfile
    mov cx, 0
    mov ah, 3Ch
    int 21h
    mov outhandle, ax
    jc  error_routine

    mov ah, 3Eh
    mov bx, outhandle
    int 21h

error_routine:
    mov ax, 4c00h
    int 21h

outputfile db "newfile.txt",0   
outhandle dw ?  

cseg ends

end start

将程序编译为
tasm.exe myprog.asm
,并将其链接为
tlink.exe/t myprog.obj
。你应该得到
myprog.com
,它应该可以创建
NEWFILE.TXT
很好。

检查你的tasm/bin文件夹。你的“newfile.txt”可能就在那里

我真希望人们不要再为8086 asm烦恼了。在现代计算机上,尤其是64位计算机上,它已经过时了;如果不启动虚拟机,我甚至无法运行它。@cHao:这有什么问题?我认为这是一个很好的方法来展示CPU的内部结构,而且非常有趣。也许没用,但有趣又有挑战性:)@BlackBear:哦,我对汇编语言没有问题。事实上,我喜欢这些东西。:)但16位代码正在向恐龙的方向发展——如今,它只对引导加载程序等有用。当有人最终意识到这一点时,有太多的东西需要忘却。现在,x86(32位)应该是基线。@赵:没错,唯一的问题是32位代码中没有中断,它们使生活比使用WriteFile简单得多;)@赵——“走恐龙的路”是乳齿象的最后一行,16位代码很好,已经死了10多年。不过,我认为这与印度的教育制度有关,今年的经济强劲反弹。去年是Turbo C。在asm代码中使用注释显然不是很受鼓励。我再也懒得去翻拉尔夫的名单了。但请帮助投票结束这个问题。上述程序不太可能按原样生成文件,因为它只能编译成.EXE。unlink.COMs.EXE必须设置它们的
DS
ES
寄存器,而上面的代码没有这样做,而是继续使用错误的文件名字符串地址调用DOS,而不是
outputfile
的地址。谢谢你的回答,我使用了alex的答案,它成功了