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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2018, 17:33   #11
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

выводи в консоль внутри цикла через printf, так проще.
а если хочешь в окно, то нужно думать с буфером
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 21.12.2018, 07:56   #12
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

вот небольшой пример использования функций "First/Next",
который выводит имена всех папок и файлов из текущей папки:
Код:
format   PE console
include 'win32ax.inc'
entry    start

section  '.data' data readable writable
fData    db   128 dup(0)            ; структура WIN32_FIND_DATA (первый Dword - атрибут)
fName    =    fData +44             ;   ..смещение имени-файла в ней
fMask    db   '*.*',0               ; маска для поиска (все файлы и папки)
hndl     dd   0                     ; хэндл поиска
crlf     db  'File:  %s',13,10,0    ; спецификатор для PRINTF

section  '.code' code readable executable
start:
         invoke  FindFirstFile, fMask, fData       ; ищем первый файл
         mov     [hndl],eax                        ; хэндл поиска
@scan:  cinvoke  printf, crlf, fName               ; выводим имя файла из структуры
         invoke  FindNextFile, [hndl], fData       ; продолжить поиск..
         or      eax,eax                           ; ноль = ошибка
         jnz     @scan                             ; иначе: мотаем цикл дальше
         invoke  CloseHandle, [hndl]               ; убрать хэндл поиска.
;         jmp     $                                 ;
         invoke  ExitProcess, 0                    ;

;-------------------------------------
section  '.idata' import data readable
library  kernel,'kernel32.dll', msvcrt,'msvcrt.dll'

import   msvcrt, printf,'printf',scanf,'scanf'
import   kernel,\
         FindFirstFile,'FindFirstFileA',\
         FindNextFile, 'FindNextFileA',\
         CloseHandle,  'CloseHandle',\
         ExitProcess,  'ExitProcess'
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 22.12.2018, 15:20   #13
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

пример с использованием рекурсивной функции, программа выводит список всех файлов и каталогов, и файлов в каталогах, и каталогов в каталогах и может быть что то ещё.
Код:
.386
.model flat, stdcall
option casemap :none   

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc

includelib c:\masm32\lib\kernel32.lib

findRecurs	proto :DWORD

.data
maska		db "*.*",0

.data?
stdout	dd ?
stdin	dd ?
hanf	dd ?
append	db 1048 dup (?)

.code
start:
	invoke	GetStdHandle, STD_OUTPUT_HANDLE
	mov	stdout, eax
	invoke	GetStdHandle, STD_INPUT_HANDLE
	mov	stdin, eax

	mov	[append+0], 0
	invoke	findRecurs, [stdout]

	invoke	CloseHandle, [stdout]
	invoke	CloseHandle, [stdin]
	invoke	ExitProcess,0
	ret

findRecurs	proc uses ebx edi esi, hOutCons:DWORD

	LOCAL	findLOC:WIN32_FIND_DATA
	LOCAL	hFindFileLOC:DWORD
	LOCAL	G_tempLOC:DWORD
	LOCAL	goBack:DWORD
	LOCAL	EndStr:DWORD
	LOCAL	palka:DWORD
	
	mov	[goBack], 00002e2eh
	mov	[EndStr], 00000a0dh
	mov	[palka], 0000005ch

wmgetlistlevel1:
	invoke	FindFirstFile, addr [maska], addr [findLOC]
	mov	[hFindFileLOC], eax
wmgetlistlevel4:
	lea	edi, [findLOC.cFileName]
	mov	dx, word ptr [edi]
	cmp	dx, 2e2eh
	je	wmgetlistlevel5
	cmp	dl, 2eh
	je	wmgetlistlevel5

	test	[findLOC.dwFileAttributes], FILE_ATTRIBUTE_DIRECTORY
	jnz	wmgetlistlevel3

	invoke	lstrlen, addr [append]
	mov	ecx, eax
	invoke	WriteFile, [hOutCons], addr [append], ecx, addr [G_tempLOC], 0
	invoke	lstrlen, addr [findLOC.cFileName]
	mov	ecx, eax
	invoke	WriteFile, [hOutCons], addr [findLOC.cFileName], ecx, addr [G_tempLOC], 0
	invoke	WriteFile, [hOutCons], addr [EndStr], 2, addr [G_tempLOC], 0
	jmp	wmgetlistlevel5

wmgetlistlevel3:
	invoke	lstrlen, addr [append]
	lea	edi, [append]
	add	edi, eax
	push	edi
	invoke	lstrcat, addr [append], addr [findLOC.cFileName]
	invoke	lstrcat, addr [append], addr [palka]
	invoke	SetCurrentDirectory, addr [findLOC.cFileName]
	invoke	findRecurs, [hOutCons]
	invoke	SetCurrentDirectory, addr [goBack]
	pop	edi
	mov	byte ptr [edi], 0

wmgetlistlevel5:
	invoke	FindNextFile, [hFindFileLOC], addr [findLOC]
	cmp	eax, 0
	jne	wmgetlistlevel4

	invoke	FindClose, [hFindFileLOC]
	ret
findRecurs	endp

end start
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несмотря на подключение masm32.inc и masm32.lib не подтягиваются функции stdin и stdout dFender Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.12.2016 13:24
Assembler под Windows (MASM32). Вывод массива в Edit диалогового окна используя WinAPI или функций MASM munthrekosh Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 04.06.2013 04:03
masm32 не модальные диалоговые окна, как гланые Avizpr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 12.03.2013 14:05
masm32 - После создания окна оно закрывается:( Wardrag Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 23.08.2010 09:45