Привет всем. Возможно ли на на Fasm организовать программу из нескольких файлов(модулей) с своими переменными и кодом(по типу как в MASM)
в секции кода: include 'mod1.inc' include 'mod2.inc' include 'mod3.inc' естественно код внутри mod организован в виде процедур так же с данными
Вообще проблем тут две. Возможно ли держать данные и код в одном файле 'mod1.inc' ? И как избежать конфликтов переменных с одинаковыми именами объявленных в разных файлах?
HumanAPI Делай переменные локальными. А по поводу сабжа - используй MS COFF + сторонний линкер, если не стрёмно включать всё в один конмилируемый файл.
В одном файле код и данные держать можно, но не рекомендуется по соображениям оптимизации (см. мануалы от Интел). Такие данные попадают в секцию кода и это имеет посторонние эффекты. Секцию кода надо делать "writeable" и так далее. В принципе, можно иметь несколько файлов, отличающихся только расширением. К примеру, пишется некий модуль, назовём его MODULE1. Тогда, появляются следующие файлы: MODULE1.INC - структуры, макросы и пр. MODULE1.DAT - данные MODULE1.ASM - только код Ну и далее, включаем всё это в нужные секции. А чтобы не было совпадения имён - использовать префикс модуля в имени глобальной переменной.
Держать данные и код в одном файле можно, в одной секции тоже можно но не рекомендуется. использовать разные имена можно перфиксы Будет ещё конфлик имён секций, а если так же использовать разные имена, то будет большое кол-во секций... тогда имеет смыл держать вообще весь код и данные в одной секции
Fasm нормально компилирует подобные программы, но работать они отказываются. По поводу кода и данных в одном подключаемом файле есть идея сделать примерно так в основном файле section '.data' data readable writeable include 'mod1.inc' section '.code' code readable executable include 'mod1.inc' в самом файле mod1.inc использовать условное асемблирование if ~ld данные lb: else код endif Примерно так, но надо еще подумать почитать справку.
HumanAPI WinXP SP2 все нормально. IMHO, это либо секции некоторые были пусты, либо компилятор бажный.
То есть, это не работает? Какая система, win2k? Код (Text): format PE GUI entry __start include '%fasminc%\win32a.inc' section '.code' code readable executable ;<< import data import library user32,'user32.dll' import user32,MessageBox,'MessageBoxA' end data ;>> align 16 __start: call testf ret section '.data' data readable writeable ; data align 32 szCalc db 'SciCalc',0 szText db 'Hi there',0 section '.code' code readable executable proc testf invoke MessageBox,0,szText,szCalc,MB_ICONINFORMATION ret endp
IseStudent Подобный код работает нормально. Не работает если использовать include 'win32axp.inc' и секции объявлять .code .data
HumanAPI .code .data - всего лишь макросы. дай пример где не работает. По теме: юзайте макросы из фасмлиба. Там есть udata{} idata{} так же можно сделать и к коду по аналогии. И будет вам и разделение данных и кода и всё в одном месте.