Ассемблер и программирование для IBM PC



         

ГЛАВА 16. Дисковая память II: Функции базовой версиии DOS - часть 10


Ассемблер для IBM PC. Глава 16. 10

Когда программа выдает первый запрос на прямую запись, операция, используя оглавление для локализации сектора, на котором находится требуемая запись, считывает весь сектор с диска в буфер и пересылает запись в DTA. Предположим, напри мер, что записи имеют размер 128 байт, т.е. четыре записи в одном секторе. Запрос на прямое чтение записи 23 приводит к чтению в буфер четырех записей, лежащих в одном секторе:

| запись 20 | запись 21 | запись 22 | запись 23 |

Когда программа вновь выдаст прямой запрос на запись, например, 23, то операция сначала проверит содержимое буфе ра. Так как данная запись уже находится в буфере, то она непосредственно пересылается в DTA. Если программа запросит запись 35, который нет в буфере, операция через оглавление локализует требуемую запись, считает весь сектор в буфер и поместит запись в DTA. Таким образом, операции прямого дос тупа к записям более эффективны, если номера записей близки друг к другу.

ПРЯМАЯ ЗАПИСЬ Операция создания файла и установки DTA одинаковы как для прямого, так и для последовательного доступа. Для обработки файла учета товаров программа может, используя прямой дос туп, считать необходимую запись, внести, введенные вручную, изменения (например, новое количество товаров) и вернуть запись на диск на то же место. Операция прямой записи использует относительный номер записи в блоке FCB и функцию шест.22 следующим образом:

MOV AH,22H ; Запрос на LEA DX,FCBname ; прямую запись INT 21H ; Вызов DOS

Операция устанавливает в регистре AL следующие коды воз врата:

00 Успешная операция 01 На диске нет места 02 Операция прекращена в результате недостаточ ного места в DTA.

При создании нового файла прямым доступом может быть полу чен ненулевой код возврата. Но при прямом чтении и переписы вании измененных записей на том же месте диска код возврата должен быть только 00. Относительный номер записи в блоке FCB при прямом доступе имеет размер двойного слова (четыре байта), каждое слово за писывается обратной последовательностью байтов. Для неболь ших файлов возможно потребуется установка лишь самого лево го байта или слова, но для больших файлов установка номера записи в трех или в четырех байтах требует некоторой тщательности.




Содержание  Назад  Вперед