Сборка 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
...