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



       

ГЛАВА 17. Дисковая память III: Расширенные функции DOS - часть 5


0 Открыть файл только для ввода 1 Открыть файл только для вывода

Ассемблер для IBM PC. Глава 17. 5

2 Открыть файл для ввода и вывода

Остальные биты регистра AL используются для разделения фай лов DOS версии 3.0 и старше (см.техническое руководство по DOS). Обратите внимание, что для записи файла используется функция создания (шест.3C), но не функция открытия файла. Ниже приведен пример открытия файла для чтения:

MOV AH,3DH ; Запрос на открытие MOV AL,00 ; Только чтение LEA DX,PATHNM1 ; Строка в формате ASCIIZ INT 21H ; Вызов DOS JC error4 ; Выход по ошибке MOV HANDLE2,AX ; Сохранение номера в DW

Если файл с необходимым именем существует, то операция открытия устанавливает длину записи равной 1, принимает существующий атрибут, сбрасывает флаг CF и заносит файловый номер в регистр AX. Файловый номер используется в дальней шем для всех последующих операций. Если файл отсутствует, то операция устанавливает флаг CF и заносит в регистр AX код ошибки: 02, 04, 05 или 12 (см. рис.17.1). Не забывайте проверять флаг CF. При успешном создании файла система может установить в регистре AX файло вый номер 0005, что легко можно спутать с кодом ошибки 05 (нет доступа).

Чтение файла: Шест.3F Для чтения записей файла используется функция DOS шест. 3F. При этом необходимо установить в регистре 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 (ошибка файлового номе ра).




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