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

时间:2015-06-23 06:54:05

标签: assembly masm

我正在尝试使用MASM 6.11中的汇编语言和Windows 7上的DOSBox创建新文件。我将驱动器C,D,E作为文件夹BIN,BINR和palce安装在我的程序中。当我尝试在控制台中运行我的程序时它会卡住,但是当我对它进行debbuging时,使用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

我知道这是一个非常简单的程序,但我无法让它工作......

1 个答案:

答案 0 :(得分:1)

这是您的修正程序

.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