Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Контрольные вопросы. Лабораторная работа №8. FILENAME DB ‘c:\autoexec.bat’,0




Контрольные вопросы

1. Объясните работу механизма вызова и обработки программных прерываний для МП 8086?

2. Объясните работу механизма вызова и обработки аппаратных прерываний для МП 8086?

3. Какова структура стека сразу после входа в процедуру обработки программного прерывания?

4. Какими способами можно установить значение вектора прерывания?

5. Какие действия выполняет команда INT?

6. Поясните использование функций DOS 25H и 35H.

Лабораторная работа №8

Файлы и каталоги

Цель работы: Изучить функции DOS для работы с файлами и каталогами. Ознакомиться с механизмом поиска файлов по шаблону. Научиться обрабатывать файлы с использованием функций DOS. Освоить порядок вызова функций DOS при обработке файла.

 

    При использовании многих расширенных функций для файловых операций необходимо указать адрес строки в формате ASCIIZ, содержащей пути и имя файла. Строка в формате ASCIIZ – это последовательность символов, завершающаяся двоичным нулем, например:

FILENAME DB ‘c: \autoexec. bat’, 0

Если строка не содержит путей, то подразумевается файл в текущей директории. Для расширенных функций адрес ASCIIZ-строки указывается в регистровой паре DS: DX – в регистре DS указывается сегмент строки, а в регистре DX – ее смещение.

    Функции создания и открытия файлов после своего выполнения устанавливают в регистре AX число, представляющее собой файловый номер. Файловый номер используется другими функциями (например, функцией чтения или записи файла) для идентификации открытого или созданного файла. Стандартные устройства ввода-вывода не нуждаются в операции открытия и могут использовать непосредственные файловые номера: 0 – ввод, 1 – вывод, 2 – вывод сообщений об ошибках, 3 – внешнее устройство, 4 – принтер. Таким образом, функцию записи файла, например, можно использовать для вывода информации на экран или на принтер.

    После выполнения любой файловой операции флаг CF сбрасывается, если функция выполнилась успешно и устанавливается, если в ходе выполнения функции возникла какая-либо ошибка. При этом в регистр AX заносится код ошибки, зависящий от операции (коды ошибок приведены в таблице 9).

Таблица 9

Коды ошибок DOS

Код ошибки Значение
01H Неверный номер функции
02H Файл не найден
03H Путь не найден
04H Слишком много открытых файлов
05H Доступ запрещен
06H Неверный файловый номер
07H Блоки управления памятью разрушены
08H Недостаточно памяти
09H Неверный адрес блока памяти
0AH Неверное окружение
0BH Неверный формат
0CH Неверный код доступа
0DH Неверные данные
0EH (не используется)
0FH Указан неверный диск
10H Невозможно удалить текущий каталог
11H Не то устройство
12H Нет подходящих файлов

 

    После выполнения каждой из рассмотренных функций DOS для работы с файлами рекомендуется проверять значение флага CF для определения успешности выполнения функции. При неуспешном выполнении функции следует завершить программу и выдать сообщение о соответствующей ошибке.

Функция 3CH. Назначение: создание нового файла или перезапись старого файла. Имя создаваемого файла указывается в виде ASCIIZ-строки в регистровой паре DS: DX. В регистр CX заносится необходимый атрибут файла (табл. 10). В случае успешного выполнения функции создается новый элемент оглавления и файл с заданным атрибутом, а в регистре AX возвращается файловый номер созданного файла. Если файл уже существует, то его длина устанавливается равной 0 для перезаписи.

Таблица 10

Коды атрибутов файлов

Код атрибута Атрибут
00H Нормальный файл
01H Файл только для чтения
02H Скрытый файл
04H Системный файл
08H Метка диска
10H Директория
20H Архивный файл

 

    При задании атрибутов файла можно комбинировать значения из таблицы 10 операцией «ИЛИ». При этом файл может иметь несколько атрибутов. Например, если в регистр CX занести значение 03H, то файл будет иметь атрибуты «только для чтения» и «скрытый». При перезаписи существующего файла его атрибуты не изменяются. Файл с атрибутом «нормальный» имеет атрибут «архивный», поэтому при любом значении регистра CX файл будет иметь атрибут «архивный». Хотя регистр CX может иметь значение 10H, создать директорию при помощи функции 3CH не удастся. Директорию можно создать специально предназначенной для этого функцией 39H. При попытке перезаписать существующий файл с атрибутом «только чтение» функция установит флаг CF, свидетельствующий о возникновении ошибки, и занесет в регистр AX код ошибки 05H (доступ запрещен).

Функция 3DH. Назначение: открытие существующего файла. Эта функция должна вызываться перед тем, как будет вызвана функция чтения файла. Функция 3DH проверяет правильность имени файла и его наличие на диске. При вызове функции регистровая пара DS: DX должна содержать адрес ASCIIZ-строки, а регистр AL код доступа:

0 – открыть файл только для чтения;

1 – открыть файл только для записи;

2 – открыть файл для чтения и записи.

Код доступа имеет значение при использовании DOS в сетевом окружении или если установлена программа SHARE. EXE. При попытке открыть файл, доступный только для чтения, с кодом доступа 1 или 2 функция установит флаг CF, свидетельствующий о возникновении ошибки, и занесет в регистр AX код ошибки 05H (доступ запрещен). Следует отметить, что при открытии файла для перезаписи используется функция создания файла 3CH. Если файл нужно открыть для чтения или для записи, то нужно использовать функцию 3DH. Если файл с указанным именем не существует, то функция 3DH вернет код ошибки 02H (файл не найден) или 03H (путь не найден) в регистре AX.

    Пример использования функции 3DH:

FileName DB ‘newfile. txt’, 0; имя файла

Handle DW?

. . .

MOV AH, 3DH

MOV AL, 0                               ; открытие файла для чтения

MOV DX, OFFSET FileName   ; ASCIIZ-строка

INT 21H

JC Error

MOV Handle, AX            ; сохранение файлового номера

. . .

Error:

. . .                                     ; произошла ошибка

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...