На этом шаге мы рассмотрим организацию прямого чтения записей из файла.
В базовой версии DOS программа, читающая дисковый файл, содержит блок управления файлом, который определяет файл точно так, как он был создан.
Вначале программа для открытия файла использует функцию 0FH:
MOV AH,0FH ; Открытие LEA DX,FILE ; файла. INT 21H ; Вызов DOS-прерывания.
Операция открытия начинается с поиска в оглавлении элемента с именем и типом файла, определенными в FCB. Если такой элемент не будет найден в оглавлении, то в регистре AL устанавливается FFH. Если элемент найден, то в регистре AL устанавливается 00 и в FCB заносится действительный размер файла, а также устанавливается номер текущего блока в 0, длина записи в 80H. После открытия можно заменить длину записи на другое значение.
Перед выполнением операции чтения из файла нужно установить начальный адрес области DTA (если он не был установлен ранее). Эта операция осуществляется аналогично рассмотренной на предыдущем шаге.
Для последовательного чтения записей с диска используется функция 14H:
MOV AH,14H ; Последовательное LEA DX,FILE ; чтение записей. INT 21H ; Вызов DOS-прерывания.
Чтение записи с диска и размещение ее в области DTA осуществляется на основе информации в блоке FCB. Операция чтения устанавливает в регистре AL следующие коды возврата:
Процесс чтения записи из файла осуществляется следующим образом. Первая операция чтения заносит содержимое всего кластера в буфер DOS. Затем операция определяет из блока FCB размер записи и пересылает первую запись из буфера в DTA. Последующие операции чтения пересылают остальные записи (если имеются) в DTA пока буфер не будет исчерпан. После этого операция чтения определяет адрес следующего кластера и заносит его содержимое в буфер.
После успешной операции чтения в блоке FCB автоматически увеличивается номер текущей записи на 1. Завершение последовательного чтения определяется программой по маркеру конца файла.
На следующем шаге мы познакомимся с организацией прямого доступа к файлу.