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

Совместное использование функций 4EH и 4FH




Совместное использование функций 4EH и 4FH

Процесс поиска файлов по шаблону с использованием функций 4EH и 4FH включает следующие шаги:

1. Установка адреса области передачи данных функцией 1AH;

2. Поиск первого файла по шаблону функцией 4EH;

3. Если в регистре AX – код ошибки 18 (нет больше файлов), то переход на шаг 8;

4. Установка в регистровой паре DS: DX адреса области передачи данных для функции 4FH;

5. Поиск следующего файла по шаблону функцией 4FH;

6. Если в регистре AX – код ошибки 18 (нет больше файлов), то переход на шаг 8;

7. Повтор поиска – переход на шаг 5;

8. Завершение поиска файлов.

При помощи функций 4EH и 4FH можно искать не только файлы, но и каталоги, а также метки дисков – для этого нужно установить в регистре CX для функции 4EH необходимые значения атрибута. Чтобы найти файлы с любыми атрибутами в регистре CX нужно установить все биты атрибутов файлов.

Следующий пример демонстрирует программу, которая выводит на экран имена всех файлов и каталогов из текущего каталога и указывает тип найденного элемента оглавления (файл или каталог).

FileInfo STRUC                          ; структура области передачи данных

DB 21 DUP (? )         ; резерв DOS

   Attr DB?                 ; атрибут файла

   Time DW?              ; время файла

   Date DW?          ; дата файла

 FSize DD?          ; размер файла

FName DB 13 DUP (? )    ; имя файла

FileInfo ENDS

 

CODE SEGMENT

   ASSUME CS: CODE, DS: CODE; CS и DS указывают на сегмент CODE

   DB 80H DUP (? )       ; пропуск 80H байт

   Info FileInfo < >          ; переменная типа FileInfo

   ORG 100H                 ; программа типа COM

Start: MOV DX, 0080H   ; в DX – смещение  области передачи данных

   INT 1AH                     ; установка адреса

                                             ; области передачи данных

   MOV AH, 4EH          ; функция поиска первого файла

   MOV DX, OFFSET Template; смещение шаблона

   MOV CX, 00110111B; атрибуты – все файлы и каталоги

   INT 21H                     ; вызов DOS

   JC Exit                  ; переход, если файлы не найдены

M1: CALL OutString    ; вывод имени файла на экран

   MOV DX, 0080H      ; в DX – смещение области передачи данных

   MOV AH, 4FH          ; функция поиска следующего файла

   INT 21H                     ; вызов DOS

   JNC M1                      ; повтор поиска, если есть еще файлы

Exit: RET                         ; выход из программы

 

OutString PROC                ; процедура вывода имени файла

                                             ; в SI – смещение имени файла

   MOV SI, OFFSET Info. Fname        

   MOV DX, SI              ; сохранение его в DX

M2: MOV DI, SI            ; в DI – предыдущее значение SI

   LODSB                       ; поиск нуля

   CMP AL, 0                 ; в ASCIIZ-строке

   JNZ M2

   MOV AL, ' '                ; символ для заполнения

M3: STOSB                   ; заполнение ASCIIZ-строки

   CMP DI, OFFSET Info. FName + 13   ; если не достигнут  конец строки,

     JB M3                         ; то заполнение следующей позиции

   MOV BYTE PTR [DI], '$'  ; формирование строки для функции 09H

   MOV AH, 09H           ; функция вывода строки

   INT 21H               ; вызов DOS

   MOV CX, 10              ; вывод 10 пробелов

   MOV AH, 02H           ; функция вывода символа

   MOV DL, ' '                ; символ пробела

M4: INT 21H                 ; вызов DOS

   LOOP M4                   ; цикл по CX

   TEST Info. Attr, 10H; проверка на каталог

   MOV DX, OFFSET File; в DX смещение строки File

   JZ M5                          

   MOV DX, OFFSET Subdir; в DX смещение строки Subdir

M5: MOV AH, 09H      ; функция вывода строки

   INT 21H                     ; вызов DOS

   MOV AH, 02H           ; функция вывода символа

   MOV DL, 0DH          ; символ перевода строки

   INT 21H                     ; вызов DOS

   MOV DL, 0AH          ; символ перевода курсора в начало строки

   INT 21H                     ; вызов DOS

   RET                             ; возврат из процедуры

OutString ENDP

   Template DB '*. *', 0   ; шаблон для поиска файлов

   File DB '< File> $'          

   Subdir DB '< SubDir> $'

CODE ENDS

   END Start                   ; точка входа

 

В предложенном примере программы следует обратить внимание на расположение в программе переменной Info – она располагается перед директивой ORG. Если бы поля структуры были определены, то компоновщик выдал бы ошибку, так как COM программа должна начинаться с команды. Но определение переменной Info не определяет данные, так как переменная остается неинициализированной. Такой способ расположения переменных (перед директивой ORG) можно использовать, чтобы далее в программе обращаться к полям префикса программного сегмента. Переменная Info, например, настроена на начало командной строки, которая используется под область передачи данных. Определение DB 80H DUP (? ) нужно для настройки переменной Info на смещение 0080H в префиксе программного сегмента.

 

9. 5  Коды ошибок DOS

В табл. 14 приведены значения кодов ошибок DOS, которые возвращаются в регистре AX.

Таблица 14

Коды ошибок DOS

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

 

При обработке файла использовать следующую последовательность вызова функций DOS:

1. Открытие исходного файла (функция 3DH);

2. Создание нового файла, куда будут помещаться результаты обработки исходного файла (функция 3CH);

3. Чтение исходного файла (функция 3FH);

4. Обработка прочитанных данных;

5. Запись обработанных данных в созданный файл (функция 40H);

6. Закрытие файла с результатами обработки (функция 3EH);

7. Закрытие исходного файла (функция 3EH).

Для чтения данных из исходного файла может быть использован буфер, определенный в программе как массив байт или слов. Рекомендуемый размер буфера – 512 байт (256 слов). На шаге 4 обрабатываются данные, находящиеся в буфере, а на шаге 5 обработанные данные из буфера записываются в файл.

Поделиться:





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



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