Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

X10err proc near

MOV AH,09 ;DX содержит адрес

Int 21h ; сообщения

INC ROW

MOV ENDCDE,01

RET

X10err endp

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.16.3. Прямое чтение дисковых записей.

На рис.16.3 приведена программа, которая считывает файл, созданный

предыдущей программой (см. рис.16.1). Вводя любой относительный номер

записи, лежащей в границах файла, пользователь запрашивает вывод на экран

любой записи файла. Если файл содержит 25 записей, то правильными номера

являются номера от 00 до 24. Номер вводится с клавиатуры в ASCII формате и

должен быть в нашем случае одно- или двузначным числом.

Программа содержит следующие процедуры:

C10OPEN Открывает файл, устанавливает размер записи 32 и устанавливает

адрес DTA.

D10RECN Вводит номер записи с клавиатуры, преобразует его в двоичный

формат и записывает полученное значение в FCB. В качестве

усовершенствования процедуры можно вставить проверку вхождения

номера в границы от 00 до 24.

F10READ Помещает требуемую запись в DTA в соответствии с относительным

номером записи в FCB.

G10DISP Выводит запись на экран.

Процедура D10RECN вводит номер записи с клавиатуры и проверяет длину

ввода в списке параметров. Возможны три варианта:

00 Запрошен конец обработки

01 Введено однозначное число (в регистре al)

02 Введено двузначное число (в регистре ax)

Данная процедура преобразует введенное число из ASCII формата в

двоичный формат. Так как значение находится в регистре AX, то лучше

использовать команду AAD для преобразования. После преобразования двоичный

код из регистра AX пересылается в два левых байта поля относительного

номера записи в блоке FCB. Если, например, введено число 12 в ASCII

формате, то AX будет содержать 3132. Команда AND преобразует это значение

в 0102, а команда AAD - в 000C. Результат преобразования заносится в поле

относительного номера записи блока FCB в виде С000 0000.

ПРЯМОЙ БЛОЧНЫЙ ДОСТУП

________________________________________________________________

Если в программе имеется достаточно места, то одна прямая блочная

операция может записать весь файл из DTA на диск, а также прочитать весь

файл с диска в DTA. Данная особенность весьма полезна для записи на диск

таблиц, которые другие программы могут считывать в память для обработки.

Начать можно с любого правильного относительного номера записи. Число

записей также может быть любым, хотя блок должен находится в пределах

файла. Перед началом необходимо открыть файл и инициализировать DTA.

Для операции прямой блочной записи необходимо установить в регистре

CX требуемое число записей, установить в FCB стартовый относительный номер

записи и выдать функцию шест.28:

MOV AH,28H ;Операция прямой блочной записи

MOV CX,records ;Установка числа записей

LEA DX,FCBname ;

Int 21h ;Вызов dos

Операция преобразует относительный номер записи в текущие номер блока

и номер записи. Полученные значения используются для определения

начального адреса на диске. В результате операции в регистре AL

устанавливаются следующие коды возврата: