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


       

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


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

должна включать чтение всех 299 предшествующих записей, пока не будет получена 300-я запись. Примечание: система может начать обработку с конкретного номера блока и записи). Несмотря на то, что файл создается последовательно, доступ к записям может быть последовательным или прямым (произвольным). Требования прямой обработки, используюшей вызов DOS, заключаются в установке требуемого номера записи в соответствующее поле FCB и выдаче команды прямого чтения или записи. Произвольный доступ использует относительный номер записи (байты 33-36) в блоке FCB. Поле имеет размер двойного слова и использует обратную последовательность байт в словах. Для локализации требуемой записи система автоматически пре образует относительный номер записи в номер текущего блока (байты 12-13) и номер текущей записи (байт 32).

ПРЯМОЕ ЧТЕНИЕ Операции открытия и установки DTA одинаковы как для прямой, так и для последовательной обработки. Предположим, что программа должна выполнить прямой доступ к пятой записи файла. Установим значение 05 в поле FCB для относительного номера записи и выполним команды для прямого чтения. В результате успешной операции содержимое пятой записи будет помещено в DTA. Для прямого чтения записи необходимо поместить тре буемое значение относительного номера записи в FCB и вызвать функцию шест.21:

MOV AH,21H ; Запрос на LEA DX,FCBname ; прямое чтение INT 21H ; Вызов DOS

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

00 Успешное завершение 01 Данные не доступны 02 Чтение прекращено из-за нехватки места в DTA 03 Прочитана частичная запись, заполненная нулями.

Как видно, среди перечисленных кодов возврата отсутствует состояние конец файла. При корректном чтении записи пред полагается единственный код возврата - 00. Остальные коды возврата могут являться результатом установки неправильного относительного номера записи или некорректная установка адреса DTA или FCB. Так как такие ошибки легко допустить, то полезно выполнять проверку регистра AL на ненулевое зна чение.




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