АКТИВНЫЕ И ПАССИВНЫЕ ОПЕРАЦИИ БАНКОВ
Федеральное агентство по образованию
Чтение дискового файла
Если в программе требуется прочитать дисковый файл, то прежде необходимо открыть его, используя функцию 3Dh.
Эта операция проверяет правильность имени файла и его наличие на диске. При открытии регистр DX должен содержать адрес необходимой ASCIIZ-строки, а регистр AL - код доступа:
0 Открыть файл только для ввода
1 Открыть файл только для вывода
2 Открыть файл для ввода и вывода
Обратите внимание, что для записи файла используется функция создания (3Ch), но не функция открытия файла.
Ниже приведен пример открытия файла для чтения:
MOV AH,3DH; Запрос на открытие
MOV AL,00; Только чтение
LEA DX,PATHNM1; Строка в формате ASCIIZ
INT 21H; Вызов DOS
JC error4; Выход по ошибке
MOV HANDLE2,AX; Сохранение номера в DW
Если файл с необходимым именем существует, то открытия устанавливает длину записи равной 1, принимает существующий атрибут, сбрасывает флаг CF и заносит файловый номер в регистр AX. Файловый номер используется в дальнейшем для всех последующих операций.
Если файл отсутствует, то операция устанавливает флаг CF и заносит в регистр AX код ошибки. Не забывайте проверять флаг CF. При успешном создании файла система может установить в регистре AX файловый номер 0005, что легко можно спутать с кодом ошибки 05 (нет доступа).
Для чтения записей файла используется функция 3Fh. При этом необходимо установить в регистре BX файловый номер, в регистре CX - число байтов и в регистре DX - адрес области ввода. В следующем примере происходит считывание 512-байтовой записи:
HANDLE2 DW?
INPREC DB 512 DUP (' ')
MOV AH,3FH; Запрос на чтение
MOV BX,HANDLE2; Файловый номер
MOV CX,512; Длина записи
LEA DX,INPREC; Адрес области ввода
INT 21H; Вызов DOS
JC error5; Проверка на ошибку
CMP AX,00; Прочитано 0 байтов?
JE endfile
Правильно выполненная операция считывает запись в память, сбрасывает флаг CF и устанавливает в регистре AX действительно прочитанных байтов. Нулевое значение в регистре AX обозначает попытку чтения после конца файла. Ошибочная операция устанавливает флаг CF и возвращает в регистре AX код ошибки 05 (нет доступа) или 06 (ошибка файлового номера).
Так как DOS ограничивает число одновременно открытых файлов, то программа, успешно отработавшая с несколькими файлами, должна закрывать их.
Государственное образовательное учреждение
высшего профессионального образования
Тульский государственный университет
КАФЕДРА Автоматизированных информационных и управляющих систем