Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВССиТ / МУ-Программирование устройств-ПЗ.docx
Скачиваний:
42
Добавлен:
28.03.2015
Размер:
243.95 Кб
Скачать

2) Открытие/ закрытие файла.

2.1) При открытии файла создаются небольшие блоки памяти, в которые помещается информация о файле. Они будут служить буфером, через который данные будут передаваться между памятью и файлом. Языки высокого уровня создают такой буфер автоматически, язык ассемблера – нет.

При открытии файла проверяется его наличие в каталоге. Если файл найден, ОС MS DOS берёт информацию из каталога о размере и дате создания файла. По умолчанию в MS DOS может быть одновременно открыто не более 8 файлов/1-5/.

Для открытия файла используется функция 3Dh прерывания 21h. Регистры DS:DX должны указывать на ASCII-строку, содержащую путь к файлу и его имя, включая имя накопителя, если это необходимо. Вся строка должна быть не длиннее 63 байт и завершаться символом ASCII 0. В регистр AL помещается код доступа: 0 – открытие файла для чтения, 1 – открытие файла для записи, 2 – открытие файла для чтения/ записи. Если файл открыт успешно, флаг переноса CF будет равен 0, а в регистре AX будет возвращён 16-битовый номер файла, по которому файл идентифицируется. Файловый указатель устанавливается на начало файла. Если при открытии файла произошла ошибка, то флаг переноса устанавливается в 1, а в регистре AX возвращается код ошибки: 2 – не найден файл, 4 – открыто слишком много файлов, 6 – ошибка диска, 12 – ошибка кода доступа.

Данная функция позволяет также открывать скрытые файлы.

2.2) При закрытии файла ОС обновляет информацию в каталоге. Если перед завершением программы не закрыть файл, это может привести к потере данных /1-5/. Согласно /2/, эта функция является необязательной, поскольку функция 4Ch, которая завершает программу, в числе прочих действий выполняет и закрытие всех файлов.

Для закрытия файла используется функция 3Eh прерывания 21h. В регистр BX помещается номер (дескриптор) файла, полученный при его открытии. Если файл закрыт успешно, то флаг переноса CF будет равен 0. В противном случае, флаг переноса устанавливается в 1, а в регистре AX возвращается код ошибки: 6 – указан неверный номер (дескриптор) файла.

3) Получение/ изменение атрибутов файла.

3.1) Для получения значений атрибутов файла в регистр AH помещается функция 43h, в регистры DS:DX - указатель на строку с путём к файлу и именем файла, завершающуюся символом ASCII 0. При успешном выполнении функция устанавливает флаг переноса CF в 0, а в регистре CX возвращается слово атрибутов файла (Таблица 4.2). В противном случае, флаг переноса устанавливается в 1, а в регистре AX возвращается код ошибки: 1 – неверное значение в регистре AL, 2 – не найден файл, 3 – указан неверный путь, 5 – доступ запрещён.

3.2) Для установки новых атрибутов файла используется подфункция 01h (помещается в регистр AL) функции 43h (помещается в AH) прерывания 21h. В регистр CX помещается новое слово атрибутов файла, в регистры DS:DX - указатель на строку с путём к файлу и именем файла, завершающуюся символом ASCII 0. В случае успеха флаг переноса CF равен нулю, а для указанного файла устанавливаются новые атрибуты. В противном случае, флаг переноса устанавливается в 1, а в регистре AX возвращается код ошибки: 1 – неверное значение в регистре AL, 2 – не найден файл, 3 – указан неверный путь, 5 – доступ запрещён.