Изменение атрибута файла на «только для чтения» в сборке с INT 21,43 не работает

# #assembly #x86 #dosbox #file-attributes

Вопрос:

Я совсем новичок в сборке, и в последнее время я изо всех сил пытаюсь заставить INT 21,43 (изменить атрибут файла на только для чтения) работать. Я использую Windows 10, DOSBox x86 и Турбо-ассемблер/компоновщик/отладчик, если это имеет какое-либо значение. Насколько я могу судить с помощью отладчика, он должен работать (CF НЕ установлен, и я не получаю код ошибки, как следовало бы, согласно документации). Кроме того, если я использую тот же INT 21,43 для ПОЛУЧЕНИЯ (установки al в 0) атрибута файла файла, который уже был настроен вручную только для чтения, CX устанавливается равным 20, что, насколько я знаю, не имеет смысла, но CF также не установлен, поэтому он говорит, что это сработало. Я надеюсь, что вы сможете помочь мне исправить это, заранее спасибо.

 .model small
.stack 100h

.data
    filename db "temp.txt",0 ; my file name 

.code

start:

    mov dx, @data
    mov ds, dx
    
    mov ah, 43h
    mov al, 01h ; Set file attribute
    mov cx, 01h ; 1 = read-only
    lea dx, filename ; Set pointer to filename
    int 21h
    
    mov ah, 4ch ; Return to DOS       
    mov al, 0               
    int 21h  


end start

 

Это то, что показывает отладчик после вызова прерывания INT 21,43

Ответ №1:

Я просто попытался установить атрибут только для чтения из программы, запущенной в DOSBox, и это не сработало.

В справке DOSBox сообщается help /all , что ATTRIB команда ничего не делает и что она предназначена только для совместимости. Поэтому само собой разумеется, что функция DOS.43h (Атрибуты файла Get/Set) не будет реализована.

Поскольку DOSBox в первую очередь предназначен для эмуляции старых игр DOS, возможно, нет особых причин для изменения атрибутов.

Комментарии:

1. Действительно : «эта функция не изменяет атрибуты файла»

2. Ладно, в этом больше смысла. Однако одна из задач, которую я могу выбрать,-настроить файл только для чтения, если он соответствует требованиям, и мой профессор предложил нам использовать DOSBox, так есть ли способ сделать это, о котором я не знаю?