Какой-то новодел с новыми синтаксическими конструкциями и без поддержки х86 по умолчанию. И на прошлом движке не было никакой проблемы в создании ассемблеров на другие процессоры, но тут видимо решили пойти дальше. На сайте сказано, что он призван стать преемником оригинального фасма. Подробно не смотрел, за это надо плотно садиться и изучать, лучше всего сразу практическое что-то делать, пока не до этого. Буду что-нибудь новое писать, возможно попробую, если времени достаточно будет. У классического макроязыка фасма есть пара недостатоков, будет хорошо, если в новом они учтены.
UASM понимает (тот же MASM). Собственно, NASM и fasm тоже понимают. fasmg – это версия fasm'а, которая ничего не знает о встроенных инструкциях процессоров, но позволяет создавать свои наборы инструкций (к примеру, в комплекте идут наборы для 8051, AVR, JVM и x86). Но использовать его вместо fasm для x86/x64 нет смысла, ибо он работает медленнее, ведь все инструкции процессора прописаны макросами.
Насчет медленной работы еще надо проверить и оценить. Фасм 1 не идеал, если злоупотреблять многопроходными директивами, 2 гига оперативки выжирает с легкостью, использовать больше технически невозможно. Я думаю обработка всего этого добра тоже скорострельности не способствует, а писать голыми инструкциями так себе развлечение. Смотрю сейчас в новом макроязык, он серьезно отличается от обычного фасмовского, причем гораздо гибче и интересней. Сейчас его пожалуй использовать рано, там нету пока привычного набора макросов типа proc/stdcall/.if, их переписывание в процессе https://board.flatassembler.net/topic.php?t=19283, но когда какая-то базовая часть будет готова, задуматься о переходе стоит.
это Вы, Друзья, жертвы привычки ставьте gcc и будет Вам счастье == еть полноценный инструментарий с возможностью миксить языки в проге. в большинстве случаЁв асм нужнЪ вставками в ту же сишечку. а на этих Ваших костылях (фасмы/тасмы/масмы/насмы/..) сплошной гемор
Да, от gcc уже даже родное линукс сообщество отказывается (все на clang уходят), а вы говорите о каком-то счастье. И зачем gcc , в студии же тоже можно асм вставки делать и даже вроде как то добавлять асм листинги. Да, спасибо, он собирает. Кстати! Я взял скопировал с ...\Microsoft Visual Studio 14.0\VC\bin\ этот самый ml, и все работает. Вопрос - почему Хатч комплектирует свой масм32 каким-то допотопным линкером, если от того же Майкрософта есть готовый вариант?
betrayer, можно и напрямую у Стива спросить, почему он делает так, а не иначе. Но я уже спрашивал, поэтому повторюсь, hutch-- не хочет проблем с юристами Майкрософт... Это ж, Австралия, сказали "нельзя", "соблюдайте лицензию" значит "нельзя"...
Mikl___, спасибо, понял. Я думал, какие-то технические нюансы есть, а на юристов с копирастами мне как то все равно.
если шланг обойдёт гсс == в добрый путь.. но суть не в этом, а.. масм/фасм/.. имеют статус сугубо костыльный и у них ни-аких ресурсов на нечто большее нет. студия ограничивает твои действия лицухой мокрых, а в опенсорце ты сам могешь добавлять фичи / исправлять баги + внедрять опенсорц в свои проги. То бишь много гемора йдёт Лесом-де Садом.
Миллионы мух иногда не ошибаются, не выбирая гцц. В любом случае отрадно такое слышать после примерно 12 лет использования фасма.
Вспомнилась статья КК, где он назвал фасм "игрушечным ассемблером", рассуждал на тему потери автором интереса и в результате потери интереса публики к транслятору из-за отсутствия поддержки новых наборов инструкций. И при этом на все лады расхваливал масм. Получилось все в точности наоборот: фасм штурмует другие архитектуры (из коробки, потому что самому можно было и на старом движке любой ассемблер сделать), а масму надо со студии линкер подставлять, чтоб с новыми наборами инструкций работало.
f13nd, Счастье — такая трудная штука: То дальнозорко, то близоруко. Часто простое кажется вздорным, Черное — белым, белое — черным. (©Черное и белое. музыка — Э. Колмановского, слова — М. Танича)
Я сравнивал, сравните, если хотите. Тут даже по логике ясно, что макросы будут работать медленнее встроенных конструкций. Какое преимущество у fasmg перед fasm для x86? Я вот лично не вижу. Более гибкие макросы? --- Сообщение объединено, 6 окт 2018 --- Ну вкус и цвет товарища нет. У каждого ассемблера, да и вообще языка, свои плюсы и минусы. Где-то больше, где-то меньше. Какие-то критичные, какие-то не очень. Какие-то важны конкретному человеку, а какие-то неважны. А по факту реально в каждом ассемблере свои косяки. Что в MASM/UASM, что в fasm (или fasmg), что в NASM (о котором почему-то тут речи не зашло, хотя им пользуется большинство зарубежных разработчиков, и их вполне можно понять). Хоть свой ассемблер пиши. Я даже с не очень давнего времени стал записывать идеи в файлик. А друг
Как минимум макросы, да. Макродвижок фасма 1 жрет много памяти, что у фасм г с этим - не известно. То, как фасм рассчитывает количество нужной ему памяти - отдельная песня, там по всей видимости ну оочень высока избычточность промежуточных данных. Код (ASM): mov eax,[compiler_memory] shl eax,10 jz out_of_memory allocate_memory: mov edx,eax shr edx,2 mov ecx,eax sub ecx,edx mov [memory_end],ecx mov [additional_memory_end],edx invoke VirtualAlloc,0,eax,MEM_COMMIT,PAGE_READWRITE У нового даже опции, ограничивающей память, нету. Хочется верить, что в нем не так. Скорость компиляции не только скоростью транслирования инструкций определяется, у меня вон на пересборку 63 исходников около полутора минут уходит, это фасм 1. У оригинального некоторые вещи типа рекурсии делаются ну совсем ягодичным способом - макросом, вложенным в макрос, который вызывается с каждой итерацией, чтоб объявить новую копию вложенного макроса и дать ему другие аргументы, что у нового с этим - пока не ясно. Некоторые вещи просто невозможно на фасме 1 реализовать, например ряд меток с нужными названиями заказать, приходится через equ/restore выкручиваться. Не всегда возможно сделать задуманное так, как хотелось бы.
... Золотые слова, Юрий Венедиктович. «Человек столько раз человек, сколько языков он знает» — «Жизнеописания великих иноземных полководцев» Пьера Брантома (1666) приписано императору Карлу V (1500—1558) «Сколько языков ты знаешь, столько раз ты живёшь» Гете Знание masm, tasm, fasm, nasm, wasm, poasm, gas etc., даже в малой степени, ни капли не повредит
Код (Text): flat assembler version 1.73.04 usage: fasm <source> [output] optional settings: -m <limit> set the limit in kilobytes for the available memory -p <limit> set the maximum allowed number of passes -d <name>=<value> define symbolic variable -s <file> dump symbolic information for debugging Не знаю, что там у вас за исходники, но у меня сам fasm собирается за сотые доли секунды. А это более 1 МБ текста. Сделал батник, который запускает компиляцию fasm'а 100 раз, всё выполняется за 7 секунд. fasmg (при добавлении строки include 'format/format.inc') выдаёт ошибку через 12 секунд в одном из файлов. При этом он потребляет 120 МБ памяти. Ещё эксперимент: Код (ASM): repeat 10000000 db 0xC3 end repeat Компилим: Код (Text): flat assembler version g.i5y0r 1 pass, 3.4 seconds, 10000000 bytes. Код (Text): flat assembler version 1.73.04 (1048576 kilobytes memory) 1 passes, 0.7 seconds, 10000000 bytes. (причём, если вместо db написать ret, то fasm скомпилит за 0.5 сек, а fasmg при включении файла 8086.inc – за 24.2 сек). А память да, fasm выделяет хорошо (сам пишет, что 1 ГБ потребляет даже на пустом исходнике). Видимо, просто выделяет сразу по максимуму, чтобы не париться. Хотя лично меня это никогда не волновало. В любом случае, есть опция -m. Ставим -m 4096 (т.е. ограничение в 4 МБ), и fasm компилится без проблем. С 3 МБ – тоже, а вот 2 МБ уже out of memory. --- Сообщение объединено, 6 окт 2018 --- Т.е. даже с точки зрения памяти... fasmg (когда собирал fasm) сожрал 120 МБ (см. выше), при этом дело не доделал; fasm'у же хватило 3-4 МБ.
Показать как сделать, чтоб не хватило? Директива repeat применима не всегда, часто вместо нее rept приходится использовать: Код (ASM): E:\123\fasmw17304>more test.asm repeat 10000000 db 0xC3 end repeat E:\123\fasmw17304>fasm -m 2097152 test.asm flat assembler version 1.73.04 (1048576 kilobytes memory) 1 passes, 0.5 seconds, 10000000 bytes. E:\123\fasmw17304>more test.asm rept 10000000 { db 0xC3 } E:\123\fasmw17304>fasm -m 2097152 test.asm flat assembler version 1.73.04 (1048576 kilobytes memory) 1 passes, 6.3 seconds, 10000000 bytes. Код (ASM): E:\123\fasmg>more test.asm repeat 10000000 db 0xC3 end repeat E:\123\fasmg>fasmg test.asm flat assembler version g.ibh5n 1 pass, 2.5 seconds, 10000000 bytes. E:\123\fasmg>more test.asm rept 10000000 db 0xC3 end rept E:\123\fasmg>fasmg test.asm flat assembler version g.ibh5n 1 pass, 2.5 seconds, 10000000 bytes. И тут уже результаты спорные. А на использование памяти тест: Код (ASM): E:\123\fasmw17304>more test.asm macro list_add list,val { match any,list \{ list equ list,0x#val \} match ,list \{ list equ 0x#val \} } list1 equ rept 9449 { list_add list1,0} db list1 E:\123\fasmw17304>fasm -m 2097152 test.asm flat assembler version 1.73.04 (1048576 kilobytes memory) 1 passes, 0.8 seconds, 9449 bytes. E:\123\fasmw17304>more test.asm macro list_add list,val { match any,list \{ list equ list,0x#val \} match ,list \{ list equ 0x#val \} } list1 equ rept 9450 { list_add list1,0} db list1 E:\123\fasmw17304>fasm -m 2097152 test.asm flat assembler version 1.73.04 (1048576 kilobytes memory) error: out of memory. Код (ASM): E:\123\fasmg>more test.asm macro list_add list,val match any,list list equ list,0x#val end match match ,list list equ 0x#val end match end macro list1 equ rept 11063 list_add list1,0 end rept db list1 E:\123\fasmg>fasmg test.asm flat assembler version g.ibh5n 1 pass, 5.7 seconds, 11063 bytes. E:\123\fasmg>more test.asm macro list_add list,val match any,list list equ list,0x#val end match match ,list list equ 0x#val end match end macro list1 equ rept 11064 list_add list1,0 end rept db list1 E:\123\fasmg>fasmg test.asm flat assembler version g.ibh5n Error: not enough memory to complete the assembly. Несколько получше, правда я ожидал другого. --- Сообщение объединено, 6 окт 2018 --- Вобщем макродвижок нового фасма однозначно рвет старый по гибкости, скорости и использованию памяти. Но если на голых инструкциях писать, старый выигрывает.