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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 00:38   #1
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию как резервируется память для переменной

Конструкция для сбора списка файлов в данной директории и последующей записи этих данных из переменной string в текстовый файл
Но переменная имеет обьявленные параметры string dd 260 dup (0) и поэтому информацию больше 260 байт туда не запишешь
То есть если список файлов большой то функция выдаст ошибку Можно конечно увеличить не 260 а например 26000 но это хоть и увеличивает
память переменной но по большому счёту не спасает (не говоря уже о том что пропорционально увеличивается размер экзешника)
Я не давно пересел на ассемблер раньше работал на языке Autoit там таких проблем нет при обьявлении переменной туда можно загнать
любое количество данных в ассемблере видимо по другому я конечно пытаюсь разобратся но надеюсь может быть кто нибудь подскажет
как резервируется память для переменной Чтобы туда без проблем влезла вся информация
Код:
.386
.model flat, stdcall
option casemap :none   

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

includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib

.data

maska    db "*.*",0
find     WIN32_FIND_DATA <0>       
handl    dd 0
string   dd 260 dup (0)
fName    db "a.txt",0
fHandle  dd 0
buf      dd 0

.code
start:

lea	esi,string
invoke FindFirstFile,ADDR maska,ADDR find
MOV handl,eax
LF:
CMP find.cFileName,"."
JE SD
invoke	lstrcat, esi, ADDR find.cFileName
invoke	lstrlen, ADDR find.cFileName
add	esi, eax
mov	dword ptr [esi], 000000da0h
add	esi, 2
SD:
invoke FindNextFile,handl,ADDR find
CMP eax,0
JNE LF
invoke FindClose,handl
invoke CreateFile,ADDR fName,GENERIC_READ+GENERIC_WRITE,0,0,2,0,0
mov fHandle, eax
invoke	lstrlen, ADDR string
invoke WriteFile,fHandle,ADDR string,eax,ADDR buf,0
invoke CloseHandle,fHandle
invoke ExitProcess,0

end start

Последний раз редактировалось assch; 22.12.2010 в 00:41.
assch вне форума Ответить с цитированием
Старый 22.12.2010, 00:41   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может тогда стоит выделять динамически память?

кстати, в вашем случае нужно ли все хранить в памяти? может стоит скидывать в файл постепенно?
(и вообще для не инициализированных переменных есть .bss секция)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.12.2010, 00:52   #3
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Честно говоря без понятия
На языке Autoit это делается без проблем Скажем сбор информации всех файлов
на диске С занимает около 10 секунд программа загоняет список файлов в переменую и потом записывает эти данные в текстовый файл получается около 30000 строк и размер файла около 3 мегабайт Я специально пробую написать это на ассемблере с надеждой что вместо 10 секунд получится быстрее (хотя может быть я и ошибаюсь) но как говорится надежда умирает последней
А дописывать информацию постепенно я думаю на оборот увеличит время

Последний раз редактировалось assch; 22.12.2010 в 00:55.
assch вне форума Ответить с цитированием
Старый 22.12.2010, 15:42   #4
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Вроде бы как то надо работать с функцией GlobalAlloc
Но вот как её приделать именно к своему примеру пока к сожелению не получается
assch вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Память для Thin client Hp t5545 vr83 Компьютерное железо 0 11.10.2010 18:01
Память для динамической строки Tirendus Общие вопросы C/C++ 11 29.04.2010 15:40
Память для трёхмерного массива и другие задачи Bloodykeeper Общие вопросы C/C++ 10 11.01.2010 18:12
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06
как выделить память для указателя (pointer), и сюда же, записать : integer, потом через 4 байта, boolean? bigxman Общие вопросы Delphi 1 02.02.2009 21:17