calidus Создаете .asm файл (пример EXAMPLES\MSCOFF\MSCOFF.ASM в установке фасм) инклудите туда ваши инки и компилите. Опосля либите .obj любым внешним либером работающим с coff форматом.
Код (Text): format MS COFF include 'extras.inc' include 'parser-lib.inc' Сделал так. Там макросы есть по созданию секции дата. Так вот первая же команда Идата ошибка, неизвестная команда. Макросы в екстрас находятся =( Еще такой вопрос , эта либа привязана к библиотекам и вызовом функций. Я в фасме не соображаю. Если даже переписать на МАСМ , то максроы выглядят очень опасно =) , смысл переписки на масм отвязаться от библиотек. А функции вызывать поиском хэшией и колом потом. Но это только план. Может кто глянет на макросы , можно ли их вообще портировать под МАСМ.
calidus Чем меньше всяких макросов вы влепите тем больше вероятность что у вас все скомпилится, что вы будете понимать что там да как, что вы сможете это куда-то спортировать.
Исходник уже есть =) и тут не мое желание хочу я или нет , оно просто есть уже. Не получается , фасм макросы не видит, хотя они подключены.
calidus include 'include/extras.inc' в нем описаны ваши идата и удата. Если не будет идти все равно, контент идат оформите под section '.data' data readable writeable контент удат под section '.bss' data readable writeable после окончания контента возвращайте section '.text' code readable executable
=) а просто дату куда? Там не только Идата и Удата еще просто дата.С подключением экстрас это еще в самомо начале сделал. Екстарс у меня не в папке инклуд лежит.Так не идет... А вообще хоть я в фасме и не понимаю , но мне кажется эти максроы сами должны создавать именно секции типа ... section '.data' data readable writeable section '.bss' data readable writeable section '.text' code readable executable
calidus нивиделдату. дата==идата? наверно я не такой умный как вы и макросам не доверяю. ЗЫ а что вы там компилите? ЗЫ2 неплохо-бы слепить клон коко под фасм..
Код (Text): ;=============================================================================== ; global data ; -------------------------------- ; idata ; -------------------------------- macro idata arg { __IData equ __IData, macro __IDataBlock arg } ; -------------------------------- ; udata ; -------------------------------- macro udata arg { __UData equ __UData, macro __UDataBlock arg } ; -------------------------------- ; IncludeIData ; -------------------------------- macro IncludeIData { macro __IData dummy,[n] \{ \forward __IDataBlock purge __IDataBlock \} match I, __IData \{ I \} purge __IData } ; -------------------------------- ; IncludeUData ; -------------------------------- macro IncludeUData { macro __UData dummy,[n] \{ \common \local ..begin, ..size ..begin = $ virtual at $ \forward __UDataBlock purge __UDataBlock \common ..size = $ - ..begin end virtual rb ..size \} match U, __UData \{ U \} purge __UData } ; -------------------------------- ; IncludeAllData ; -------------------------------- macro IncludeAllData { IncludeIData IncludeUData } ; -------------------------------- ; ... ; -------------------------------- idata { } udata { } ;=============================================================================== ; imports ; -------------------------------- ; import_#lib ; -------------------------------- macro import lib, [functions] { common macro import_#lib \{ import lib, functions \} } ; -------------------------------- ; includes ; -------------------------------- include '%fasminc%/apia/kernel32.inc' include '%fasminc%/apia/user32.inc' include '%fasminc%/apia/gdi32.inc' include '%fasminc%/apia/advapi32.inc' include '%fasminc%/apia/comctl32.inc' include '%fasminc%/apia/comdlg32.inc' include '%fasminc%/apia/shell32.inc' include '%fasminc%/apia/wsock32.inc' ; -------------------------------- purge import ; -------------------------------- ; IncludeAllImports ; -------------------------------- macro IncludeAllImports { data import library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ gdi32,'GDI32.DLL',\ advapi32,'ADVAPI32.DLL',\ comctl32,'COMCTL32.DLL',\ comdlg32,'COMDLG32.DLL',\ shell32,'SHELL32.DLL',\ wsock32,'WSOCK32.DLL' import_kernel32 import_user32 import_gdi32 import_advapi32 import_comctl32 import_comdlg32 import_shell32 import_wsock32 end data } ;=============================================================================== ; string array definition struc string_array [string] { forward local __label __label db string, 0 common local __counter label . dword __counter = 0 forward dd __label __counter = __counter + 1 common .item_count = __counter } ;=============================================================================== ; emulates usage of double anonymous labels macro @@@ colon { @@b equ @@f @@b: local ..new @@f equ ..new } =) тут не все обозначения что какая дата. Процедуры ясно что в текст пойдут. Я доверяю макросам и даже их люблю ! Но только не на фасм ! Потому что я их не знаю и вообще может фасм и гибкий язык , но масм мне больше к лицу. Как не надо так все сразу со своим фасм фасм. А как надо так все фасмовщики пропали ))))))))
calidus Эта дата? Это секция описания импорта. Ничего в ней не трогайте. ЗЫ впредь будьте лаконичнее. Некоторые тут на гпрс-е сидят.
Код (Text): include '%fasminc%/apia/kernel32.inc' include '%fasminc%/apia/user32.inc' include '%fasminc%/apia/gdi32.inc' include '%fasminc%/apia/advapi32.inc' include '%fasminc%/apia/comctl32.inc' include '%fasminc%/apia/comdlg32.inc' include '%fasminc%/apia/shell32.inc' include '%fasminc%/apia/wsock32.inc' Заменить на: Код (Text): include '%fasminc%/api/kernel32.inc' include '%fasminc%/api/user32.inc' include '%fasminc%/api/gdi32.inc' include '%fasminc%/api/advapi32.inc' include '%fasminc%/api/comctl32.inc' include '%fasminc%/api/comdlg32.inc' include '%fasminc%/api/shell32.inc' include '%fasminc%/api/wsock32.inc'
calidus вы просто рамещаете сформированое идатой и удатой. Если вы их поскипали, то и этот макрос вызывать не надо
=) зачем мне скипать ? это же целостный код который я понимаю отчасти из за фасм. Вообщем соберите плиз ктонить готовую, а я уже когданибудь пойму как там что собирать. Алгоритм _basmp_ сказал. Может джеперс тупит =) , у меня что с выделены что с жпрс все хорошо.
Не забудьте проверить для какой версии фасма написаны эти макросы. Возможно для старой и в новой версии они косячат.
calidus Лучше наоборот - сперва пишите понятно для себя, а потом постепенно разбирайтесь/добавляйте макросы. Всяких идат/удат там штук 5. Что стоит вынести их и оформить понятно и макросонезависимо?
=) ай такой совет на отвали. Приходит друг к другу говорит помоги я есть хочу денег нету семье тяжело. А он ему говорит ничего , ты посмотри как без денег сам придумаешь ченить. Время не терпит ...
В аттаче собирающийся исходник. public-и сделаны для первых трёх функций, остальное аналогично (делать лень, намакросить тоже лень).
сделал так Код (Text): ;------------------------------------------------------------------------------; ; Public symbols (exports). ; ;------------------------------------------------------------------------------; public parser_buffer_load as '_parser_buffer_load@8' public parser_buffer_add as '_parser_buffer_add@8' public parser_buffer_rewind as '_parser_buffer_rewind@0' ; public parser_list_create as '_parser_list_create@8' public parser_list_add as '_parser_list_add@8' public parser_list_seek as '_parser_list_seek@4' public parser_list_position as '_parser_list_position@4' ; public parser_token_get as '_parser_token_get@0' public parser_token_skip as '_parser_token_skip@0' public parser_token_remove as '_parser_token_remove@0' public parser_token_previous as '_parser_token_previous@0' public parser_token_is_line as '_parser_token_is_line@0' public parser_token_line_get as '_parser_token_line_get@0' public parser_token_line_skip as '_parser_token_line_skip@0' public parser_token_line_remove as '_parser_token_line_remove@0' public parser_argument_token_get as '_parser_argument_token_get@0' public parser_token_convert_cpp as '_parser_token_convert_cpp@0' ; public parser_uninitalize as '_parser_uninitalize@0' ;And so on... Далее компилирую все окей но ошибка не видит Вин32а.инк он лежит в папке инклуд я дописываю путь , роли не меняет. Меняю регистр вин32а.инк на нижний , так как он в верхнем был а в файле нижний, тоже не помогает. Может от версии зависит ? У меня 1.67.26
У меня тоже 1.67.26; регистр тут не при чём; win32a.inc точно в include есть? В fasmw.ini (путь поправить надо, конечно): Код (Text): [Environment] INCLUDE=C:\PRG\FASM\INCLUDE