Assembly 在部件中创建和保存文本文件

Assembly 在部件中创建和保存文本文件,assembly,masm,Assembly,Masm,我正在尝试使用MASM 6.11中的汇编语言和Windows 7上的DOSBox创建新文件。我已将驱动器C、D、E装入文件夹BIN、BINR和palce,其中是我的程序。当我试图在控制台中运行我的程序时,它会被卡住,但当我对它进行调试时,使用CV命令的过程会正常终止。这是我的密码: .model small .stack 100h .data NazwaPliku db "dane.txt", 0 UchwytPliku dw ? Napis db "ASSEMB

我正在尝试使用MASM 6.11中的汇编语言和Windows 7上的DOSBox创建新文件。我已将驱动器C、D、E装入文件夹BIN、BINR和palce,其中是我的程序。当我试图在控制台中运行我的程序时,它会被卡住,但当我对它进行调试时,使用CV命令的过程会正常终止。这是我的密码:

.model small
.stack 100h

.data
    NazwaPliku  db  "dane.txt", 0
    UchwytPliku dw  ?
    Napis db "ASSEMBLER"

.code
        ASSUME cs: @code, ds: @data
        mov ax, @data
        mov ds, ax

main PROC
        MOV AH,3CH
        MOV CX,0
        MOV DX,OFFSET NazwaPliku
        INT 21H 

        MOV AH, 3DH
        MOV AL, 0
        MOV DX, OFFSET NazwaPliku
        INT 21H
        mov UchwytPliku, ax

        MOV AH,40H
        MOV BX, UchwytPliku
        MOV DX,OFFSET Napis
        MOV CX, 5
        INT 21H

        mov ah, 4Ch
        mov al, 0
    int 21h
main ENDP

END main

我知道这是一个非常简单的程序,但我不能让它工作…

这是你的程序,有修改

.model small
.stack 100h

.data
    NazwaPliku  db  "dane.txt", 0
    UchwytPliku dw  ?
    Napis db "ASSEMBLER"

.code
        ASSUME cs: @code, ds: @data
main PROC
        mov ax, @data              <- Put in the execution path!
        mov ds, ax                 <- so below "main PROC"

        MOV AH,3CH
        MOV CX,0
        MOV DX,OFFSET NazwaPliku
        INT 21H 
        jc fail                    <- In case DOS failed the operation 

        ;MOV AH, 3DH               <- After a succesful creation, the
        ;MOV AL, 1                 <- file is already opened for normal
        ;MOV DX, OFFSET NazwaPliku <- read and write access.
        ;INT 21H
        ;jc fail

        mov UchwytPliku, ax

        MOV AH,40H
        MOV BX, UchwytPliku
        MOV DX,OFFSET Napis
        MOV CX, 5                  <- "ASSEMBLER" has 9 bytes. Typo ?
        INT 21H
        ;jc fail

fail:
        mov ah, 4Ch
        mov al, 0
        int 21h
main ENDP

END main

您将以AH=3Ch和AH=3Dh打开文件两次。
DS
的初始化将不会完成。将行
main PROC
向上推两行。另外,在使用
int 21h/ah=3Dh
打开文件时,您似乎没有设置访问代码。如果要打开文件进行写入,应使用
al=1
al=2
。当您使用
int 21h/ah=3Ch
创建文件时,您应该首先清除
cl
,除非您需要文件上的任何特殊属性。谢谢大家-现在一切正常:)
    MOV AH,3CH
    MOV CX,0
    MOV DX,OFFSET NazwaPliku
    INT 21H
    jc fail

    mov bx, ax
    mov ah, 3Eh
    int 21h
    jc fail

    MOV AH, 3DH
    MOV AL, 1
    MOV DX, OFFSET NazwaPliku
    INT 21H
    jc fail
    mov UchwytPliku, ax