Тула 2010 г.
АКТИВНЫЕ И ПАССИВНЫЕ ОПЕРАЦИИ БАНКОВ
Федеральное агентство по образованию
Чтение дискового файла
Если в программе требуется прочитать дисковый файл, то прежде необходимо открыть его, используя функцию 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 ограничивает число одновременно открытых файлов, то программа, успешно отработавшая с несколькими файлами, должна закрывать их.
Государственное образовательное учреждение
высшего профессионального образования
Тульский государственный университет
КАФЕДРА Автоматизированных информационных и управляющих систем