Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр.docx
Скачиваний:
23
Добавлен:
21.12.2018
Размер:
2.58 Mб
Скачать

3. В конце работы файл следует закрыть.

4. Признаком ошибки при выполнении функции dos является взведенный флаг с (переноса).

Количество одновременно открытых файлов (включая предопределенные файлы) не может превышать 20, хотя количество описателей может быть больше. Поскольку 5 первых описателей всегда открыто, то получается, что можно одновременно открыть не более 15 файлов.

Описатель файла – это некий индекс, по которому можно найти область памяти, выделяемую для работы с данным файлом. Эта область памяти необходима для того, чтобы буферизовать ввод и вывод в этот файл, что делает работу с ним более быстрой. При записи в файл данные записываются сначала в буфер и, только если он переполнен, записываются на диск.

При закрытии файла содержимое буфера записи сбрасывается на диск, и далее этот буфер может использоваться для работы с другим файлом. Данные незакрытого файла могут оказаться потерянными.

При открытии выделяются буфера отдельно на чтение и запись. В MS DOS имеется функция 68Н, с помощью которой можно сбрасывать буфера, выделенные для записи, на диск, не закрывая файла. Эту функцию часто используют для того, чтобы обезопасить себя от возможной потери данных. Аналог ее имеется во всех языках высокого уровня.

DOS поддерживает как работу с длинными именами, так и с короткими именами файлов и каталогов.

При открытии или создании файла, DOS возвращает в регистр АХ описатель файла или HANDLE -двухбайтное число. Все операции с данным файлом после этого можно производить, зная только это число.

Стандартным устройствам ввода-вывода по умолчанию присваиваются свои описатели - от 0 до 4. Вот эти описатели:

STDIN стандартное устройство ввода (клавиатура) - 0,

STDOUT стандартное устройство вывода (экран) -1,

STDERR устройство для вывода ошибок (обычно экран) - 2,

AUX асинхронный порт(СОМ1) - 3,

PRN печатающее устройство (LPT1) - 4.

Это позволяет перенаправить ввод или вывод с одного устройства на другое.

Можно выделить четыре аспекта работы с файлами в программах на ассемблере:

– работа с системой файлового ввода-вывода MS DOS, использующей короткие имена;

– работа с системой файлового ввода-вывода MS DOS, использующей длинные имена (длиной до 255 символов);

– работа с системой файлового ввода-вывода Win 32;

– использование файлов особого вида, поддерживаемых Win 32 — проецированных на память.

1) Функция DOS 3Dh — Открыть существующий файл

Ввод: AH = 3Dh

AL = режим доступа

биты 0-1: открыть для записи или для чтения

00: чтение

01: запись

10: чтение и запись

биты 2 – 3: зарезервированы (0)

биты 6 – 4: режим доступа для других процессов

000: режим совместимости (остальные процессы также должны открывать этот файл в режиме совместимости)

001: все операции запрещены

010: запись запрещена

011: чтение запрещено

100: запрещений нет

бит 7: файл не наследуется порождаемыми процессами

DS:DX = адрес ASCIZ-строки с полным именем файла

CL = маска атрибутов файлов

Вывод:

CF = 0 и АХ = идентификатор файла, если не произошла ошибка.

CF = 1 и АХ = код ошибки (02h — файл не найден, 03h — путь не найден, 04h — слишком много открытых файлов, 05h — доступ запрещен, 0Ch — неправильный режим доступа)

Пример:

LEA DX,PATH ; сегменте данных путь: С:\ПУТЬ\ИМЯФАЙЛА, 0;

; если краткое имя, то берется текущий каталог

MOV AL,2 ; открыть для чтения и записи, если 0 для чтения,

; 1 – для записи

MOV АН,3DН ; функция открытия файла

INT 21H ; открываем файл

JC ERRO ; ошибка, если поднят флаг СF, в АХ код ошибки,

; если ошибки нет, то в АХ описатель файла для

; будущей работы следует его сохранить

При этом обязательно будет ошибка, если такого файла не существует (в указанном каталоге).