在程序集中创建和保存文本文件

Creating and save text file in assembly

我正在尝试使用 MASM 6.11 和 DOSBox 中的汇编语言在 Windows 上创建新文件 7. 我将驱动器 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

最好在操作失败时显示一条消息。

如果您确实需要显式打开文件,请在创建文件后先将其关闭。

    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