Сборка 16b - создание файла с произвольным именем файла

Я работаю над программой в сборке 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 сработало.

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
...
Другие вопросы по тегам