Совместное использование функций 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
При обработке файла использовать следующую последовательность вызова функций DOS: 1. Открытие исходного файла (функция 3DH); 2. Создание нового файла, куда будут помещаться результаты обработки исходного файла (функция 3CH); 3. Чтение исходного файла (функция 3FH); 4. Обработка прочитанных данных; 5. Запись обработанных данных в созданный файл (функция 40H);
6. Закрытие файла с результатами обработки (функция 3EH); 7. Закрытие исходного файла (функция 3EH). Для чтения данных из исходного файла может быть использован буфер, определенный в программе как массив байт или слов. Рекомендуемый размер буфера – 512 байт (256 слов). На шаге 4 обрабатываются данные, находящиеся в буфере, а на шаге 5 обработанные данные из буфера записываются в файл.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|