На этом шаге мы рассмотрим организацию прямого доступа к записям файла.
В некоторых случаях требуется осуществить доступ к конкретным записям файла. Для этого нужно установить требуемый номер записи в соответствующее поле FCB и выполнить команду прямого чтения или записи.
Произвольный доступ использует относительный номер записи (байты 33-36) в блоке FCB. Поле имеет размер двойного слова и использует обратную последовательность байтов в словах.
Для локализации требуемой записи система автоматически преобразует относительный номер записи в номер текущего блока (байты 12-13) и номер текущей записи (байт 32).
Операции открытия и установки DTA одинаковы как для прямой, так и для последовательной обработки записей. Предположим, что программа должна выполнить прямой доступ к пятой записи файла. Установим значение 05 в поле FCB для относительного номера записи и выполним команды для прямого чтения. В результате успешной операции содержимое пятой записи будет помещено в DTA.
Для прямого чтения необходимо поместить требуемое значение относительного номера записи в FCB и вызвать функцию 21H:
MOV AH,21H ; Запрос на LEA DX,FILE ;прямое чтение. INT 21H ; Вызов DOS-прерывания.
Выполненная команда устанавливает следующие значения в регистре AL:
Операция прямой записи использует относительный номер записи в блоке FCB и функцию 22H следующим образом:
MOV AH,22H ; Запрос на LEA DX,FILE ; прямую запись. INT 21H ; Вызов DOS-прерывания.
После ее выполнения в регистре AL устанавливаются следующие коды возврата:
На следующем шаге мы приведем пример программы, иллюстрирующей некоторые из перечисленных функций.