Сборник по задачам и примерам Assembler

     

Открытие или создание файла с расширенными возможностями



Открытие или создание файла с расширенными возможностями

Функция 6Ch появилась в последних версиях MS DOS (DOS 4.0+). С ее появлением устраняется необходимость отслеживать существование создаваемого файла. Для корректной работы достаточно задать нужные значения в соответствующих регистрах. Анализ возможных значений показывает, что данная функция фактически заменяет существовавшие до этого функции создания и открытия файлов.

Вход: АХ = 6C00h; BL = флаги — режим открытия (значения битов: 7 — наследование; 4-6 — режим разделения; 3=0 — резерв; 0-2 — режим доступа); ВН = флаги (значения битов: 6=0 — использовать стандартную для MS DOS буферизацию; 6=1 — отменить стандартную для MS DOS буферизацию; 5=0 — использовать обычный обработчик ошибок (int 24h); 5=1 — не использовать обычный обработчик ошибок (int 24h), для выяснения причины ошибки использовать функцию 59h int 21h); CX = атрибуты создаваемого (и только) файла; DL = действия, если файл существует или не существует (значения бит: 0-3 — действие, если файл существует (0000 — вернуть ошибку; 0001 — открыть файл; 0002 — открыть файл без сохранения существующего); 4-7 — действие, если файл не существует (0000 — вернуть ошибку; 0001 — открыть файл; 0002 — создать и открыть файл); DH = 00h — резерв; DS:SI — адрес строки с ASCIZ-именем файла.

Выход: CF = 0 — успешное выполнение функции: АХ = дескриптор файла, СХ = состояние (0 — файл открыт; 1 — файл создан и открыт; 2 — файл открыт без сохранения содержимого существующего файла); CF = 1 — АХ = код ошибки.

Следующий фрагмент программы показывает вариант применения функции 6Ch.

:prg07_04.asm - программа демонстрации открытия или создания файла :с расширенными возможностями в текущем каталоге функцией 6Сп.

.data

handle dw 0 :дескриптор файла

filename db 'my_file.txt'.0

point_fname dd filename

.code

хогсх.сх атрибуты файла - обычный файл

movbx.2 :режим доступа обычный - доступ для чтения-записи

movdx.l :если файл существует, то открыть его. в обратной случае вернуть ошибку

(для эксперимента)

Ids si .point_fname-.формируем указатель на имя файла movah.6ch :номер функции DOS int 21h открываем файл jnc ml ;если файл существовал, то переход movdx.lOh -.открыть файл movah.6ch :номер функции DOS int 21h :открываем файл jc exit -.переход в случае ошибки ml: :действия при успешном открытии файла: mov handle.ах :сохраним дескриптор файла



Содержание раздела