Битва трансляторов Крис Касперски Хакер, номер #092, стр. 092-118-5 Что же такое FASM? Это ассемблер с предельно упрощенным синтаксисом (никаких offset'ов и прочих захламляющих листинг директив), полной поддержкой всех роцессорных команд (в том числе и jmp 0007:00000000), качественным кодогенератором, мощным макропроцессором и гибкой системой управления форматов выходных файлов. FASM распространяется в исходных текстах на бесплатной основе, и к настоящему моменту перенесен на MS-DOS, Windows 9x/NT, LINUX, BSD, поддерживает уникод и все x86 процессоры вплоть до Pentium-4 с наборами мультимедийных инструкций MMX, SSE, SSEII, SSEIII, AMD 3DNow!, а также платформу AMD x86-64, позволяя генерировать не только Microsoft coff, но и готовые bin-, mz-, pe- и elf-файлы. То есть FASM позволяет обходиться без линкера, но при этом раскладку секций в PE-файле и таблицу импорта приходится создавать «вручную» с помощью специальных директив ассемблера. Но на практике все же удобнее сгенерировать coff и скомпоновать его с модулями, написанными на языках высокого уровня. Макроязык FASM'а настолько мощный, что позволяет писать программы на себе самом без единой ассемблерной строки, например: file 'interp.asm' repeat $ load A byte from %-1 if A>='a' & A<='z' A = A-'a'+'A' end if store byte A at %-1 end repeat И пускай кто-то ворчит, ну вот, мол, еще одна попытка опустить ассемблер до уровня Бейсика. Ничего подобного! Макросы – вещь добровольная. Хочешь — пользуйся, не хочешь — не надо. Все это были достоинства. Теперь поговорим о недостатках. Ни на что не похожий синтаксис FASM'а напрягает даже матерых программистов, заставляя их вгрызаться в плохо структурированную документацию и небольшое количество демонстрационных примеров, поставляемых вместе с транслятором. На это требуется время, которое в конечном счете ничем не компенсируется, поскольку круг задач, на которых FASM реально рвет MASM, крайне мал. Категорическая несовместимость с MASM'ом чрезвычайно затрудняет разработку Windows-драйверов (в большинстве своем создаваемых на основе примеров из DDK). Прикладным задачам, в свою очередь, требуется SDK и желательно первой свежести, да и программы, целиком написанные на ассемблере, — это совсем не то, чего требует бизнес-машина. «Математические» задачи, перемножающие матрицы, вычисляющие координаты пересечения кривых в N-мерном пространстве или трансформирующие графику — легко пишутся на FASM'е, поскольку не привязаны к конкретной операционной системе. Никаких API-функций они не вызывают и, вообще, не лезут туда, где можно обойтись Си/Си++. Если бы FASM поддерживал генерацию отладочной информации, то его (с некоторой натяжкой) еще было бы можно рассматривать как серьезный инструмент, а так он остается игрушкой, пригодной для мелких задач типа «hello, world», вирусов, демок и прочих произведений хакерского творчества. |