DevProg: Блог для программистов

Секреты программирования. Примеры разработки. Обзоры программёрского софта, блогов и форумов и просто полезные советы!

Как выбрать себе Ассемблер? Некоторые рекомендации новичку!

Posted by devprog на Октябрь 15, 2008

Итак, вы решили-таки изучить язык ассемблера и научиться разговаривать с компьютером на его языке? Но вы на распутьи, вы не знаете какому ассемблеру посвятить себя, свои силы, ну а главное время? Ведь их так много и каждый пытается тянуть одеяло на себя. Вы читали форумы, но всё форумное комьюнити почему то разбивается на несколько групп и защищают свой любимый компилятор? Так что же мне делать? — Спросит новичок. А вот возьмите и просто прочитайте данный материал, обещаю будет очень интересно, и в конце концов вы выделите для себя тот единственный и прекрассный ассемблер. Для вас он будет самым удобным и лучшим.

В связи с тем, что под 16 битные операционные системы никто уже не программирует, мы остановим свой выбор на 3х самых ярых конкурентах, под ОС Windows. Это как вы уже поняли TASM32, MASM32, и молодой но прыткий FASM. Итак, мы начинаем.

TASM32 (TASM 5+) — Бородатый дедушка от Borland

Дедушка то бородатый, но вот порох в пороховнице ещё есть. Это наследник от TASM, который во времена MS DOS был очень крутым ассемблером и конечно очень популярным. Но время тех операционок прошло, и TASM преобрёл второе дыхание благодаря человеку по имени !tE (ник-нейм) и благодаря ему превратился в пакет (именно пакет) программирования под Windows. В составе пакета идёт сам ассемблер, документация, примеры написания программ и заголовочные файлы. К плюсу этого ассемблера наверное можно отнести то, что он полностью совместим с ассемблером MASM, но и не стоит забывать про то, что он имеет ещё и свой режим — IDEAL, который использует свой синтаксис. Как вы наверное уже поняли, поддержкой TASM больше никто не занимается, кроме энтузиастов, коим является !tE — за что ему отдельное человеческое спасибо.

Выводы:
Поддержка: Частичная
Распространённость: Низкая
Размер пакета: 2,14 MB
Общая оценка: 3
Ссылка: Turbo Assembler 5+ v5.3

MASM32 от Стива Хатчессона — Добры папа-Добрый сын

Именно великий человек Стив, является отцом этого пакета для программирования под Windows. Ассемблер в нём используется от Microsoft, но Стив дополнил его библиотеками, заголовочными файлами, документацией и даже собственной IDE (средой разработки) не говоря уже о всяких других полезных утилит, запрограммированных кстати тоже Стивом. Кстати Хатч упорно и стойко поддерживает свой проект выпуская всё новые и новые версии своего пакета. На MASM32 программируют колоссальное колличество разработчиков, образующие целые комьюнити. Именно пакет MASM32 от Стива дал выход в свет огромному количеству талантливых программистов на ассемблере. Долгой ему жизни и успехов в процветании.

Выводы:
Поддержка: Хорошая
Распространённость: Высокая
Размер пакета: 3,4 MB
Общая оценка: 5
Ссылка: Hutch’s MASM32

FASM (Flat Assembler) — Пархает как бабочка, но совсем не жалит.

Как обычно, самое сладкое на последок. Вот он, кроссплатформенный, с открытым исходным кодом, с красивым синтаксисом, бесплантый и очень удобный (в плане компиляции) ассемблер, созданный человеком по имени Томаш Гриштар — польским и очень талантливым программистом! На FASM написаны целые операционные системы, такие как например MenuetOS или KolibriOS. Ассемблер с неимоверно развитым макроязыком. На сегодняшний день поддерживает все инструкции 32х и 64х разрядных процессоров. Версии ассемблера есть для DOS, UNIX, LINUX и конечно же Windows. Развивается очень стремительно как и набирает вокруг себя всё больше и больше приверженцев именно этого ассемблера. Ещё очень нравится то, что FASM не нужен компоновщик, он прекрасно обходится и без него! В то время как 2 предыдущих ассемблера этого недостатка не лишены.

Выводы:
Поддержка: Отличная
Распространённость: Высокая
Размер пакета: 820 КB (с учётом того что внутри ещё и целая книга ;) )
Общая оценка: 5+
Ссылка: Flat Assembler

Вот так, а теперь вам не составит особого труда выбрать ассемблер по себе. Но я то знаю, что вы выбирете FASM ;) Есть недочёты или неточности? Пишите — обсудим :)

———-
Интересное на блогах:
PHP mail под Windows. Отправка почты из PHP скриптов
Как создать облако тегов для своего сайта на PHP

———-
Полезная заметка? Есть способ получать новые посты не заходя на этот сайт! Как? Да просто подпишись на RSS-Фид !

Реклама

комментариев 10 to “Как выбрать себе Ассемблер? Некоторые рекомендации новичку!”

  1. salvador said

    Спасибо. Прям вернул молодость.

  2. Хел said

    масм рулит)

  3. devprog said

    Да незачто )
    MASM конечно пока что тоже на коне, но грядёт то время когда Гриштаровский FASM его просто задавит.

  4. Хел said

    кстати немного не по теме как интегрировать в си возможность вызова ассемблерных вставок? компилятор gcc, среда разработки dev-cpp, про вижуал студио просьба не говорить)

  5. devprog said

    Такая возможность имеется. Только вот разница в том, что в студии используется MASM c синтаксисом от INTEL, а GCC соответственно использует AT&T синтаксис. Короче, на нормальный синтаксис перевести можно, используя в коммандной строке компилятора инструкцию:

    -masm=intel

  6. Хел said

    а как сам асм код вызывать? в студии это __asm{} насколько я помню..

  7. devprog said

    Примерно что то вроде этого:

    __asm__ ( «movl %eax, %ebx\n\t»
    «movl $56, %esi»)

  8. demonId7 said

    Улыбнуло :) Но статья либо предвзятая, либо, что скорее всего, автор не очень хорошо знает возможности масма и тасма. Про масм не буду говорить, инфы море. Что касается тасма, то все «недостатки» явно преувеличины. Во первых, все инклюды без труда портируются из masm32, за пару минут, благо утилитки есть, то есть с Win API проблем абсолютно никаких :) Поддержка новых команд легко исправляется макросами, которых в инете на каждом углу — как собак нерезанных. Макроязык незначительно уступает масмовскому, нет только макрофункций, а в остальном один-к-одному, только БЕЗ БАГОВ, полностью соответствую документации (в масме есть досадные баги макроязыка). Зато есть полноценная поддержка ООП, что очень облегчает написание субклассированных контролов и работу с СОМ-моделью (те же регулярные выражения и скрипты), есть режим оптимизации команд (например автозамена LEA на MOV, когда возможно, замена опкодов на более короткие версии аналогичных команд и прочее), модификация JMP для свертки концов функций с автоматической генерацией кода для раскрутки стэка, модификация CALL, позволяющая не заботиться о модели памяти и вызовов, расширенные возможности PUSH и POP, спец. операторы, такие как SETFLAG, MASKFLAG, TESTFLAG, FLIPFLAG,(SET)GETFIELD, для работы с битовыми полями, RETURNS, для возврата результата функции в стэке, FASTIMUL, которая, по возможности, заменяет умножение сдвигами и сложениями, либо просто командой IMUL, возможность вложенных структур и объединений, введен новый тип данных — таблицы (TABLE), позволяющие хранить не только любые данные в виде таблиц, но и сопровождать каждый элемент описанием, например его типом (каждый элемент может быть любого типа), что очень удобно для анализа в макросах; и много еще чего, о чем многие даже не подозревают, поскольку инфы крайне мало, приходится постигать все самому. А режим IDEAL избавляет от множества потенциальных ошибок. Вывод: TASM не только не уступает MASM, но и превосходит его по удобству написания программ, причем под любую ось. Ну да ладно, у всех свои вкусы :)
    Но не могу не упомянуть FASM. Многие его расхваливают за легкую компиляцию. К чему это приводит я и хочу поведать :)
    Начнем с того, что процессы компиляции и линковки изначально разделили не зря, это дает много преимуществ. Во первых, унифицированный формат объектных модулей, получаемых после компиляции, позволяет использовать _любой_ компановщик, наиболее подходящий для данной задачи, а не только тот, что идет в комплекте поставки компилятора. Например, если TLINK не умеет собирать объектники под какую либо ОС, то можно взять линкер, который это умеет делать. Я еще на третьем тасме писал программы для Z80, хотя формально тасм это не поддерживает :D Во вторых, это позволяет подключать _любые_ сторонние объектники, написанные на том же Си, Фортране и прочих ЯВУ. Очень удобно, когда нужно интенсивный ОС-независимый ввод/вывод, навороченные математические расчеты (либ хватает), удобный менеджер памяти и прочие вкусности присущие ЯВУ, но изначально недоступные ассемблеру. В MASM и TASM это все делается элементарно, чего не скажешь о фасме. Это первый минус фасма, причем значительный.
    Далее, у любого ассемблерщика накапливается множество наработок. В MASM и TASM эти модули компилируешь и собираешь в LIB-файлы. В дальнейшем это позволяет использовать их без _перекомпиляции_, экономя время и нервы и не разбрасывая наработки по разным каталогам. Это же позволяет легко и непринужденно подключать их к ЯВУ. У фасма нет таких удобных и простых средств, а все проекты, что мне встречались, требовали _полной_ перекомпиляции. Это второй минус фасма, тоже очень значительный.
    Короче говоря в FASM отсутствует удобная поддержка модульности, что не есть гуд.
    Далее. Не редко приходится писать под какой-либо определенный процессор. MASM и TASM сами следят за допустимостью тех или иных команд для заданного процессора, причем TASM даже может автоматом заменять их на комбинации допустимых, избавляя от лишней головной боли. В FASM эта возможность отсутствует как класс. Еще один минус, хотя и не такой критический, но требующий хорошей квалификации и таблиц под рукой.
    Ну и надоело, поэтому упомяну еще только одну особенность, касаемую мифической мощности макросов фасма. И MASM и TASM имеют встроенные высокоуровневые средства, такие как PROC, .IF/.ELSE/.ENDIF, циклы и прочее. В FASM все это реализовано через макросы, что ведет к генерации _неоптимального_ кода. Да и просто невозможно реализовать через макросы оптимизатор. Те же масм и тасм прекрасно умеют генерировать условные переходы, причем оптимальные для заданного процессора. В фасме генерируется шаблонный код, без учета возможных оптимизаций. В частности макросами просто невозможно реализовать такую операцию, как SETFIELD, для всех возможных типов операндов, генерируя различный код, наиболее оптимальный для заданных типов операндов. Это еще один минус Фасму :)
    Итого, даже неполный перечень снижает оценку Фасма до троечки с минусом, а TASM уравнивает с MASM, в чем то даже превосходя его ;)
    PS: и не надо аргумента, что в фасме можно скомпилировать картинку, я и в TASM это смогу сделать :D Если кто не помнит, то был такой «трюк», когда компилируешь COM-файл, а получаешь полноценный экзешник. Это из этой оперы.
    PPS: Вообще тема интересная и можно было бы обсудить ее на каком либо форуме. В холиварах нередко всплывают достоинства и недостатки объекта спора :)

  9. Владимир said

    fasm классная вещь, вот только с отладкой туговато :). Если б эту проблему решили, вообще ничего лучше для программирования на асме и не придумаешь.

  10. Coolzoom said

    Вообще компания Borland хорошо думает перед тем как что то сделать. только то что тасм был сделан ещё фиг знает когда но до сих пор актуален и довольно функциональен уже говорит о том что тасм хорошо продуман. и если бы за него взялся не один единственный любитель (респект ему!) а несколько реальных профессионалов — думаю у масма и фасма вместе взятых не осталось бы даже шансов :) так что я думаю все таки тасм будет получше :)

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

 
%d такие блоггеры, как: