Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1335
Добавлен:
23.02.2015
Размер:
2.11 Mб
Скачать

http://www.sklyaroff.ru

125

 

ret

 

 

 

mess1

db

"Введите строку для преобразования:$"

mess2

db

"Результат:$"

 

 

crlf

db

0Dh, 0Ah,'$'

; перевод строки

buffer

db

100

; максимальный размер буфера

blengthdb

?

; здесь будет размер буфера после ввода

bcontents db

100 dup (?)

; содержимое буфера

end start

6.4. Работа с файлами

Система MS-DOS многое унаследовала от таких систем, как CP/M и UNIX. Возможно, именно поэтому в ней существует две группы функций для работы с файлами. Первая группа функций, совместима с древней системой CP/M и использует структуру FCB, а передачу данных осуществляет через структуру данных DTA. Структура FCB постоянно хранится в пространстве памяти, выделенной прикладной программе. Функции, использующие FCB, позволяют выполнять все основные операции с файлами (создание, открытие, закрытие, уничтожение, чтение, запись), но эти функции не поддерживают иерархическую (древовидную) файловую структуру, которая впервые была введена в MS-DOS версии 2, поэтому ими можно пользоваться для доступа к файлам, находящимся только в текущем подкаталоге текущего диска.

Вторая группа функций, совместимая с UNIX, использует в своей работе так называемые дескрипторы. Эти функции позволяют выполнять все основные операции с файлами, но они также позволяют передавать системе MS-DOS строку символов, завершающуюся нулем, в которой описывается расположение файла в иерархической файловой структуре (имя диска и путь), имя файла и расширение. При успешной операции открытия или создания файла система MS-DOS возвращает 16битный дескриптор (16-битное число), который сохраняется программой и используется для последующих манипуляций с файлом. При этом системой инициализируются первые пять стандартных дескрипторов следующим образом:

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

1(STDOUT) — стандартное устройство вывода (как правило, экран монитора);

2(STDERR) — устройство вывода сообщений об ошибках (всегда экран монитора);

3(AUX) — последовательный порт (обычно COM1);

4(PRN) — параллельный порт (обычно LPT1);

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

Функции FCB, кроме того, что не позволяют работать с файлами вне текущего каталога, очень не удобны и громоздки в использовании, поэтому они устарели сразу с выходом второй версии MS-DOS и практически с того момента программистами не использовались. Поэтому мы будем рассматривать только функции, работающие с файлами на основе дескриптора.

Ключевым в работе с файлами является понятие "открытие файла". Начать любую работу с файлом (чтение файла, запись в файл и пр.) можно только после того, как он открыт. При открытии файла ему системой MS-DOS назначается дескриптор, который представляет собой уникальное 16-битное число и служит своего рода меткой в дальнейшем при обращении к файлу. По завершении работы с файлом его нужно закрыть, при этом освобождается выделенный файлу дескриптор. Для открытия и закрытия файла имеются соответствующие функции DOS, о которых будет рассказано далее. Например, при чтении файла последовательность действий может выглядеть так: открытие файла, установка позиции чтения файла (если файл читается не сначала), чтение файла, закрытие файла.