Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методички по ассемблеру / Методичка_часть2.doc
Скачиваний:
602
Добавлен:
02.05.2014
Размер:
545.28 Кб
Скачать

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

Возможно, основная функция DOS как операционной системы — организация доступа к дискам как к набору файлов и каталогов. DOS поддерживает только один тип файловой системы — FAT и, начиная с версии 7.0 (Windows 95), его модификацию VFAT с длинными именами файлов. Первоначальный набор функций для работы с файлами, предложенный в MS-DOS 1.0, оказался очень неудобным: каждый открытый файл описывался 37-байтной структурой FCB (блок управления файлом), адрес которой требовался для всех файловых операций, а передача данных осуществлялась через структуру данных DTA (область передачи данных). Уже в MS-DOS 2.0, вместе с усовершенствованием FAT (например, появлением вложенных каталогов), появился набор UNIX-подобных функций работы с файлами, использующих для описания файла всего одно 16-битное число, идентификатор файла или устройства. Все остальные функции работы с файлами используют затем только это число. Первые пять идентификаторов инициализируются системой следующим образом:

0: STDIN — стандартное устройство ввода (обычно клавиатура),

1: STDOUT — стандартное устройство вывода (обычно экран),

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

3: AUX — последовательный порт (обычно СОМ1),

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

так что функции чтения/записи (а также сброс буферов на диск) файлов можно точно так же применять и к устройствам.

4.9. Управление памятью

4.9.1. Обычная память

До сих пор, если требовалось создать массив данных в памяти, мы просто обращались к памяти за концом программы, считая, что там есть еще хотя бы 64 килобайта свободной памяти. Разумеется, как и во всех операционных системах, в DOS есть средства управления распределением памяти — выделение блока (аналог стандартной функции языка С malloc), изменение его размеров (аналог realloc) и освобождение (free).

Функция DOS 48h— Выделить память

Ввод:

АН = 48h ВХ = размер блока в 16-байтных параграфах

Вывод:

CF = 0, если блок выделен АХ = сегментный адрес выделенного блока CF = 1, если произошла ошибка:

АХ = 7 — блоки управления памятью разрушены АХ = 8 — недостаточно памяти:

ВХ = размер максимального доступного блока

Эта функция с большим значением в ВХ (обычно FFFFh) используется для определения размера самого большого доступного блока памяти.

Функция DOS 49h— Освободить память

Ввод:

АН = 49h ES = сегментный адрес освобождаемого блока

Вывод:

CF = 0, если блок освобожден CF = 1:

АХ = 7, если блоки управления памятью разрушены, АХ = 9, если в ES содержится неверный адрес

Эта функция не позволит освободить блок памяти, которым текущая программа не владеет, но с помощью функции DOS 50h (AX = 50h, ВХ = сегментный адрес PSP процесса) программа может «притвориться» любым другим процессом.

Функция DOS 4Ah— Изменить размер блока памяти

Ввод:

АН = 4Ah ВХ = новый размер в 16-байтных параграфах ES = сегментный адрес модифицируемого блока

Вывод:

CF = 0, если размер блока изменен CF = 1:

АХ = 7, если блоки управления памятью разрушены, АХ = 8, если не хватает памяти (при увеличении), АХ = 9, если ES содержит неверный адрес

ВХ = максимальный размер, доступный для этого блока

Если для увеличения блока не хватило памяти, DOS увеличивает его до возможного предела.

При запуске СОМ-программы загрузчик DOS выделяет самый большой доступный блок памяти для этой программы, так что при работе с основной памятью эти функции требуются редко (в основном для того, чтобы сократить выделенный программе блок памяти до минимума перед загрузкой другой программы), но уже в MS-DOS 5.0 и далее с помощью этих же функций можно выделять память в областях UMB — неиспользуемых участках памяти выше 640 Кб и ниже 1 Мб, для этого требуется сначала подключить UMB к менеджеру памяти и изменить стратегию выделения памяти с помощью функции DOS 58h.