【问题标题】:16b Assembly - creating file with custom filename16b 程序集 - 使用自定义文件名创建文件
【发布时间】:2014-05-19 06:39:43
【问题描述】:

我正在开发一个 16b 程序集的程序,它只是创建一个文件名,文件名是我在运行时自己键入的,然后关闭它。问题是 - 没有创建文件。这是我的代码:

org 100h
mov ah, 9
mov dx, prompt
int 21h

mov ah, 0ah
mov dx, filename
int 21h

mov ah, 3ch
mov cx, 0000h
mov dx, filename+2
int 21h

mov word [filehandle], ax

mov bx, [filehandle]
mov ah, 3eh
int 21h


mov ah, 4ch
int 21h


prompt  db  "Filename:",10,13,"$"
filename db  10
         db  0
         times 11 db "$"
filehandle dw 0

如您所见,我正在使用缓冲输入来读取文件名。不幸的是,该文件未创建。如果我硬编码文件名,效果很好,如下所示:

...

mov ah, 3ch
mov dx, filename
int 21h

...

filename db "test.txt"

但这不是我想要实现的。这段代码不起作用的原因是什么?我正在使用 NASM。

编辑: 问题解决了,@rkhb 的解决方案奏效了。

【问题讨论】:

  • 尝试以零结尾的文件名。
  • @FrankKotler 您的意思是将 11 db "$" 时间更改为 11 db 0 时间?
  • 您必须在 8.3 文件名之后放置一个零字节。文件名 db 10, db 0, times 11 db "$", db 0, filehandle dw 0

标签: assembly dos nasm 16-bit


【解决方案1】:

Int 21h / 3Ch 需要一个 ASCIIZ 字符串,即 NULL 终止,但 Int 21h / 0Ah 给你 0Dh (ENTER) 作为终止。所以必须把0Dh改成00h:

...
mov ah, 0ah
mov dx, filename
int 21h

movzx di, byte [filename+1]
add di, filename+2
mov byte [di], 0

mov ah, 3ch
mov cx, 0000h
mov dx, filename+2
int 21h
...

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2010-12-03
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多