На этом шаге мы рассмотрим операции прямой блочной записи и чтения.
Если в программе имеется достаточно места, то одна прямая блочная операция может записать весь файл из DTA на диск, а также прочитать весь файл с диска в DTA. Данная особенность весьма полезна для записи на диск таблиц, которые другие программы могут считывать в память для обработки.
Начать можно с любого правильного относительного номера записи. Число записей также может быть любым, хотя блок должен находиться в пределах файла. Перед началом необходимо открыть файл и инициализировать DTA.
Для операции прямой блочной записи необходимо установить в регистре СХ требуемое число записей, установить в FCB стартовый относительный номер записи и выдать функцию 28Н:
MOV АН,28Н ;Операция прямой блочной записи. MOV СХ,KOL ;Установка числа записей. LEA DX,FILE INT 21H ;Вызов DOS.
Операция преобразует относительный номер записи в текущие номера блока и записи. Полученные значения используются для определения начального адреса на диске. В результате операции в регистре AL устанавливаются следующие коды возврата:
Кроме, того, операция устанавливает в FCB в поле относительного номера записи и в полях текущего номера блока и текущего номера записи значения, соответствующие следующему номеру записи. Например, если были записаны записи с 00 до 24, то следующий номер записи будет 25 (19Н).
Для операции прямого блочного чтения необходимо установить в регистре СХ требуемое число записей и использовать функцию 27Н:
MOV AH,27H ;Операция прямого блочного чтения. MOV CX,KOL ;Установка числа записей. LEA DX,FILE INT 21H ;Вызов DOS
Операция чтения возвращает в регистре AL следующие значения:
В регистре СХ остается действительное число прочитанных записей, а в FCB в поле относительного номера записи и в полях текущих номеров блока и записи устанавливаются значения, соответствующие следующему номеру записи.
Если необходимо загрузить в память весь файл, но число записей неизвестно, то следует после операции открытия разделить размер файла на длину записи. Например, для размера файла 320Н (800) и длины записи 20Н (32) число записей будет 19Н (25).
На следующем шаге мы приведем пример программы, иллюстрирующей рассмотренные операции.