Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2011, 15:45   #1
Zueuk
 
Регистрация: 10.05.2011
Сообщений: 4
Вопрос [DOS] Работа с файлами и каталогами: вывод содержимого каталога на экран

Всех приветствую.
Пытаюсь решить задачу: вывести содержимое каталога на экран. Нашел похожий код. Попробовал его подправить под свою задачу.

Вопрос вот в чем: как из структуры DTA вытащить имя файла, которое и можно передать функции 09h для вывода на экран имени файла?

Код:
; lsdir2.asm
; выводит список файлов и каталогов
; в текущем каталоге
        .model     tiny
        .code
        org        100h                ; СОМ-файл
start:
        mov        ah,4Eh              ; поиск первого файла
	mov        cx,0110111b         ; устанавливаем аттрибуты, какие файлы искать
        mov        dx,offset filespec  ; маска для поиска в DS:DX

file_open:
        int        21h
        jc         no_more_files       ; если CF = 1 - файлы кончились
 
        mov        dx,80h+1Eh          ; смещение DTA + смещение имени файла
        int        21h                 ; от начала DTA
	;;моё-начало вывод имени файла/папки
	mov ah, 09h
	int 21h
	;;моё-конец
        jc         find_next           ; если файл не открылся - перейти
                                       ; к следующему
        mov        bx,ax               ; идентификатор файла в ВХ
        mov        cx,1                ; считывать один байт
        mov        dx,offset buffer    ; начало буфера - в DX
 
find_next:
        mov        ah,3Eh              ; закрыть предыдущий файл
        int        21h
        mov        ah,4Fh              ; найти следующий файл
        mov        dx,80h              ; смещение DTA от начала PSP
        jmp        short file_open
 
no_more_files:                         ; если файлы кончились,
        ret                            ; выйти из программы
 
filespec      db   "*",0	           ; маска для поиска
        end        start               ; конец программы
Zueuk вне форума Ответить с цитированием
Старый 10.05.2011, 23:19   #2
прохожий11
Новичок
Джуниор
 
Аватар для прохожий11
 
Регистрация: 10.05.2011
Сообщений: 2
По умолчанию

смотри test.rar
У меня поиск файла в каталогах правда покамест выводит файлы в одном каталоге. Для твоих целей работать будет, можешь лишнее убрать.
Вопрос для других форумчан как правильно написать поиск в подкаталогах. Во вложении scan.rar листинг программы вывода имен всех каталогов на диске.
Из двух программ пытаюсь сделать одну.
код в вложении "тест" исходный. прошу подправить где не верно или написать подробный алгоритм поиска.
П.С. сори если такая тема уже поднималась на форуме.
Вложения
Тип файла: rar scan.rar (2.4 Кб, 58 просмотров)
Тип файла: rar test.rar (4.1 Кб, 61 просмотров)
Нет границ человеческому безумию...

Последний раз редактировалось прохожий11; 10.05.2011 в 23:32.
прохожий11 вне форума Ответить с цитированием
Старый 11.05.2011, 13:39   #3
Zueuk
 
Регистрация: 10.05.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от прохожий11 Посмотреть сообщение
смотри test.rar
У меня поиск файла в каталогах правда покамест выводит файлы в одном каталоге. Для твоих целей работать будет, можешь лишнее убрать.
Спасибо. Посмотрю.
Zueuk вне форума Ответить с цитированием
Старый 12.05.2011, 12:59   #4
Zueuk
 
Регистрация: 10.05.2011
Сообщений: 4
Хорошо

Всё оказалось очень просто. Вот нашел готовое решение.

И немного подправил его, получился вывод на новой строке имен файлов и каталогов в текущем каталоге, что и требовалось.
Код:
; выводит список файлов и каталогов в текущем каталоге
; Вход:
; AH - 4Eh
; DS:DX - адрес строки поиска
; CX - атрибуты
; Выход:
; AX - код ошибки (в случае если встал CF)
; DTA - результаты
    .model tiny
    .code
    org 100h
start:
    ; по умолчанию DTA находится в PSP, но мы можем задать ей другое расположение
    ; (а можем и работать со старым адресом). вобщем переместим
    mov ah,1ah
    mov dx,offset dta
    int 21h
   
    ; FindFirstFile
    mov ah,4eh
    mov cx,0110111b         ; устанавливаем аттрибуты, какие файлы искать
    mov dx,offset searchPath
    int 21h
    jc quit

print_filename:
    ; имя файла находится по смещению 1Eh в DTA и завершается нулем
    ; теперь выводим имя найденного файла. сразу отмечу, чтобы не тратить время на
    ; красивый вывод делаю так: имя файла - последнее поле в DTA, поэтому ставлю
    ; после DTA символ конца строки DOS "$" и вывожу как строку.
    mov ah,9h
    mov dx,offset dta + 1eh
    int 21h
	
    ; перевод на новую строку
    mov ah,9h
    mov dx,offset crlf
    int 21h
   
    ; FindNextFile
    mov ah,4fh
    mov dx,offset dta
    int 21h
    jnc print_filename    ;если ошибки нет - продолжаем вывод списка файлов, иначе конец программы

quit:
    ;вывод сообщения
    mov ah,9h
    mov dx,offset message
    int 21h
	
    ; задержка
    xor ax,ax
    int 16h
   
    mov ah,4ch
    int 21h

; data    
searchPath  db "*.*",0
dta     db 2ch dup (?)
        db "$"
;crlf db 13,10,'$' ;новая строка
crlf db 0Dh,0Ah,'$' ;аналогично, новая строка
message db 'Press any key...','$'

end start
Zueuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(Си / Линукс) Вывод содержимого каталога и всех его подкаталогов ddima Помощь студентам 0 26.03.2011 23:26
Вывод содержимого файла на экран! Nostalgy Общие вопросы C/C++ 5 16.01.2011 19:33
Не получается реализовать вывод содержимого вектора класса на экран Progsenya Общие вопросы C/C++ 4 09.09.2010 21:38
Вывод содержимого вектора на экран lelik759 Помощь студентам 1 05.11.2009 00:07
Delphi-работа с файлами,каталогами POPOV Помощь студентам 6 30.11.2007 15:12