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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2009, 14:05   #1
bat0
 
Регистрация: 28.03.2009
Сообщений: 3
Вопрос TASM,fat16 вывод иерархии каталогов диска

Необходимо сделать вывод на экран или в файл,основную идею я представляю - но как и куда обращаться за получением оглавления корневого каталога?
bat0 вне форума Ответить с цитированием
Старый 29.03.2009, 16:58   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) тут есть раздел Assembler - там эта задачка более "к месту" (но, думаю, что админы перенесут эту тему туда...)
2) надеюсь, что Вы не собираетесь читать fat и разбирать его структуру?! (это вполне реально, просто сложно и много рутины)
если нет, то Вам помогут функции MS DOS:
4eH (find file)
4fH (find next file)
1aH (set DTA)

описание функции 4e из TechHelp'а в приложении:
Вложения
Тип файла: txt 4e.txt (2.0 Кб, 179 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2009, 22:10   #3
bat0
 
Регистрация: 28.03.2009
Сообщений: 3
По умолчанию

Вот набросал основное,но проблема в том что не происходит возврат в каталог на уровень вверх.Опыта отладки таких объемов недостает.Может кто заметит откровенные ляпы.Заранее благодарен.
Код:
.model	small
.stack	100h
.data
	startmsg db 'Ierarhiya katalogov diska: $'
	nocatmsg db 'Katalogov ne naideno $'



	root db 'c:\',0
	space db '  $'
	crlf db 13,10,'$'
	symb db 10h
	fmask db '*',0h
	bufDTA	db 80 dup (0)
	FindCatP dw 0
	PreCatP dw 0


.code

SearchInto	proc		;процедура поиска в найденном ранее каталоге
	
	
	mov	al,[si]
	cmp	al,2eh		;не является ли . или .. именем
	je	SIex		;если да - на конец
	
		
	mov	ah,09h
	mov	dx,offset crlf
	int	21h		;перевод строки

	mov	ah,09h
	mov	dx,offset space
	int	21h		;вывод отступа
	
	mov	ax,FindCatP
	mov	PreCatP,ax	;сохрание каталога возврата

	mov	ah,3bh
	mov	dx,FindCatP
	int	21h		;chdir на найденный каталог
	
	mov	ah,4eh
	mov	cx,10h
	lea	dx,fmask
	int	21h		;поиск каталога
	cmp	ax,12h		;проверка есть ли каталоги - нету то на выход
	je	SIex

	mov	si,offset bufDTA + 30	;в si смещение имени найденного каталога
	
	mov	FindCatP,si	;имя найденного каталога
	
	call 	DirNameOut	;вызов вывода имени
	
	call	SearchDir	;вызов дальнейшего поиска

SIex:	push	bp		;передача через стек имени катлога возврата
	mov	bp,sp		;оно помещалось в стек до вызова 
	mov	ax,[bp + 6]	
	mov	PreCatp,ax	

	
	mov	ah,3bh
	mov	dx,PreCatP
	int	21h		;chdir на предыдущий каталог	

	pop	bp		;восстановление bp
	ret
endp




SearchDir	proc		;процедура дальнейшего поиска

	mov	cx,100		;сколько раз будет искать

SDser:	mov	ah,4fh
	int	21h		;поиск по параметрам вызова 4eh
	cmp	ax,18		;если нет больше файлов то в ах 18
	je	SDexit
	
	mov	si,offset bufDTA + 30	;в si смещение имени найденного каталога

	mov	FindCatP,si		;сохранение имени найденного каталога
	
	call 	DirNameOut		;вызов  вывода имени
	
	mov	si,FindCatP

	mov	ax,PreCatp
	push	ax			;сохранение каталога в который нырнули


	call	SearchInto		;вызов поиска внутри найденного каталога

	
	loop	SDser	

	
SDexit:	ret
endp



DirNameOut	proc			;процедура вывода имени
	mov	bx,FindCatP
	mov	al,[bx]
	cmp	al,2eh		;не является ли . или .. именем
	je	DNOexit
	


	mov	ah,09h
	mov	dx,offset crlf
	int	21h		;пеервод строки
		
	mov	ah,02h
	mov	bx,offset symb
	mov	dl,[bx]
	int	21h		;вывод посимвольно
	
nmout:	mov	dl,[si]
	cmp	dl,0
	je	DNOexit
	mov	ah,02h
	int	21h
	inc	si
	jmp	nmout
	



DNOexit:  ret
endp
	




Go:
	mov	ax,@data
	mov	ds,ax		
	mov	es,ax		;установка DS и ES


	mov	ah,1ah
	mov	dx,offset bufDTA
	int	21h		;установка адреса DTA
	

	mov	ah,09h
	mov	dx,offset startmsg
	int	21h		;стартовое сообщение
	
	
	;mov	ah,3bh
	;mov	dx,offset root
	;int	21h		;переход в корeнь
	
	
	
	
	mov	ah,4eh
	mov	cx,10h
	lea	dx,fmask
	int	21h		;поиск каталога
	cmp	ax,12h		;проверка есть ли каталоги
	jne	Fcat
	
	mov	ah,09h
	mov	dx,offset crlf
	int	21h		;пеервод строки
	
	mov	ah,09h
	mov	dx,offset nocatmsg
	int	21h
	jmp	Mex		;если нет вывод сообщения,иначе продолжение

	
Fcat:	mov	si,offset bufDTA + 30	;в si смещение имени найденного каталога
	
	mov	FindCatP,si		;сохранение имени найденного каталога
	mov	PreCatp,si
	
	call 	DirNameOut		;вызов вывода имени

	mov	ax,PreCatp
	push	ax			;сохранение каталога в который нырнули

	call	SearchInto		;поиск внутри найденного

	
	call	SearchDir		;поиск дальше
		
Mex:	mov	ah,4ch			;выход в ДОС
	int	21h

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TASM дело тонкое!:) (Где в TASM IDE?) 3.14oner Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 15.11.2011 16:20
Создание иерархии классов (Delphi) Dawystrik Помощь студентам 1 22.03.2009 16:32
Копирование файлов(с созданией Иерархии) russian-stalker Общие вопросы Delphi 12 25.08.2008 19:09
список каталогов VVVadim Общие вопросы Delphi 11 03.04.2008 13:00
древо каталогов Dunpeal Компоненты Delphi 6 21.11.2006 06:22