Тула 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 ограничивает число одновременно открытых файлов, то программа, успешно отработавшая с несколькими файлами, должна закрывать их.

 

Государственное образовательное учреждение

высшего профессионального образования

Тульский государственный университет

КАФЕДРА Автоматизированных информационных и управляющих систем