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



       

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


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

Начать можно с любого правильного относительного номера записи. Число записей также может быть любым, хотя блок дол жен находится в пределах файла. Перед началом необходимо открыть файл и инициализировать DTA. Для операции прямой блочной записи необходимо установить в регистре СX требуемое число записей, установить в FCB стартовый относительный номер записи и выдать функцию шест.28:

MOV AH,28H ; Операция прямой блочной записи MOV CX,records ; Установка числа записей LEA DX,FCBname ; INT 21H ; Вызов DOS

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

00 Успешное завершение для всех записей 01 На диске недостаточно места.

Кроме того операция устанавливает в FCB в поле относи тельного номера записи и полях текущих номеров блока и запи си значения, соответствующие следующему номеру записи. Напри мер, если были записаны записи с 00 до 24, то следующий номер записи будет 25 (шест.19). Для операции прямого блочного чтения необходимо устано вить в регистре CX требуемое число записей и использовать функцию шест.27:

MOV AH,27H ; Операция прямого блочного чтения MOV CX,records ; Установка числа записей LEA DX,FCBname ; INT 21H ; Вызов DOS

Операция чтения возвращает в регистре AL следующие значе ния: 00 Успешное чтение всех записей 01 Прочитана последняя запись файла 02 Прочитано предельное для DTA число записей 03 Прочитана последняя запись файла не полностью.

В регистре CX остается действительное число прочитанных записей, а в FCB в поле относительного номера записи и полях текущих номеров блока и записи устанавливаются значения, соответствующие следующему номеру записи. Если необходимо загрузить в память весь файл, но число за писей неизвестно, то следует после операции открытия разде лить размер файла на длину записи. Например, для размера файла шест.320 (800) и длине записи шест.20 (32) число запи сей будет шест.19 (25).




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