Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2014, 08:32   #1
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию FAQ для раздела Assembler

Краткое содержание раздела F.A.Q.

Последний раз редактировалось Mikl___; 03.12.2014 в 14:05.
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 08:44   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Где скачать компилятор для ассемблера?
Компиляторы языков высокого уровня (Си, Паскаль) в определенной степени совместимы между собой и хотя исходный текст, предназначенный для одного компилятора, не всегда без переделок транслируется на другом, синтаксис и прочие языковые концепции остаются неизменными, позволяя "летать" между MS VC, Intel C++, GCC, Open WATCOM, сравнивая полноту поддержки Стандарта, скорость трансляции, качество кодогенерации, популярность компилятора и вытекающее отсюда изобилие (недостаток) библиотек и компонентов к нему.
С трансляторами ассемблера все обстоит иначе. Казалось бы, x86 ассемблер — он и в Африке ассемблер, но нет! Кроме поддержки мнемоник машинных команд, каждый транслятор обладает своим собственным набором директив и макросредств, зачастую ни с чем не совместимых. Ассемблерный листинг под MASM, бесполезно переносить на FASM, поскольку возможности, предоставляемые макросредствами, у них неодинаковые.
Человеку, упорно игнорирующего существование Linux/BSD, абсолютно все равно, на какое количество платформ был перенесен данный транслятор. А для кого-то это вопрос первостепенной важности!
Тем не менее, существует ряд основополагающих критериев, существенных для всех категорий программистов. Начнем с генерации отладочной информации, без которой отладка программы сложнее, чем "hello, word", превращается в настоящую пытку. Кое-кто попытается возразить, что ассемблерам, в отличии от языков высокого уровня, отладочная информация не нужна, ведь мнемоники машинных команд, что в листинге, что в отладчике — одни и те же. А метки?! А структуры?! А имена функций?! Уберите их — и код станет совершенно не читаемым! Можно воспользоваться отладочной печатью (просто вставлять макрос, выводящий значение регистров/переменных на экран/файл в указанных местах). Еще можно отлаживать программу, держа перед носом распечатку исходных текстов.
Проблема в том, что формат отладочной информации не стандартизован и различные трансляторы используют различные форматы, что ограничивает в выборе отладчиков или вынуждает использовать конвертеры сторонних производителей, FASM вообще не генерирует отладочной информации.
Если формат отладочной информации — это, скорее, проблема для профессионалов, то формат выходных файлов касается всех. Обыкновенный obj, из которого с помощью линкера можно изготовить все, что угодно — от exe до dll. Объектные файлы делятся на
  • omf (в редакциях от Microsoft и IBM)
  • coff, elf, aout
  • кучу разной экзотики в стиле as86, rdf, ieee и т.д
Также заслуживает внимания возможность "сквозной" генерации двоичных файлов, не требующая помощи со стороны линкера. А некоторые ассемблеры (например, FASM) даже позволяют "вручную" генерировать исполняемые файлы и динамические библиотеки различных форматов, полностью контролируя процесс их создания и заполняя ключевые поля по своему усмотрению. Впрочем, программы, целиком написанные на ассемблере — это либо вирусы, либо демки, либо учебные. Обычно на ассемблере пишутся лишь системно-зависимые компоненты или модули, критичные к быстродействию, которые затем линкуются к основному проекту и, если ассемблер генерирует только omf, а компилятор — coff, тогда возникает проблема сборки "разнокалиберных" форматов воедино. Линкер, умеющий это делать — ulink от Юрия Харона, он же обеспечивает возможности по сборке файлов "вручную", так что выбор конкретного ассемблерного транслятора целиком лежит на совести (и компетенции) программиста, но все-таки лучше, чтобы и ассемблер, и компилятор генерировали одинаковые форматы объектных файлов.
Другой немаловажный критерий — количество поддерживаемых процессорных архитектур, которых в линейке x86 набралось уже больше десятка. Конечно, недостающие команды можно реализовать с помощью макросов или запрограммировать непосредственно в машинном коде через директиву DB, но... если так рассуждать, то зачем вообще нужны ассемблеры, когда есть hex-редакторы?! Особое внимание следует обратить на платформы AMD x86-64 и Intel IA64. 64-разрядные архитектуры вытесняют x86, поэтому учиться программировать под них обязательно, так что поддержка со стороны транслятора должна быть обеспечена уже сейчас!
Ни один из трансляторов не поддерживает набор команд x86-процессоров в полном объеме. Например, на MASM'е невозможно написать jmp 0007h:00000000h и приходится прибегать к различным ухищрениям: либо реализовать команду через DB, что ненаглядно и неудобно, либо заталкивать в стек сегмент/смещение, а потом делать retf, но это длинно и к тому же воздействует на стек, которого у нас может и не быть.
Программирование на смеси 16- и 32-разрядного кода с кратковременным переходом в защищенный режим и возвращением обратно в реальный — на MASM'е скорее умрешь, чем такое запрограммируешь, но большинству программистов подобное трюкачество просто не нужно!
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 08:48   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

А вот что реально нужно большинству — так это интеграция в мировое сообщество. Свои собственные оси обычно пишут новички, только что начитавшиеся Юрова/Зубкова и открывшие для себя защищенный режим с его безграничными возможностями. В учебном плане это очень даже хорошо, но коммерческим программистам обычно приходится программировать под уже существующие системы — ту же Windows, например. И, если в состав DDK входит MASM в кучей исходных текстов драйверов, то пытаться собрать их под другим транслятором означает впустую убивать время. Опять-таки, если компилятору Microsoft Visual C++ задать ключ /FA, то он выдаст ассемблерный листинг в стиле MASM, точно так же поступит и IDA Pro, Borland C++ выберет TASM, а GCC - GNU Assembler (он же GAS). Вот это и называется интеграцией в среду программирования. Чистый ассемблер сам по себе мало кому интересен и практически всегда становится приложением к чему-то еще. Если вы пишите драйвера под Windows на Microsoft Visual C++, то разумнее всего остановить свой выбор на MASM'е, поклонникам же Borland C++ лучше TASM'а ничего не найти. Под Linux/BSD рулит GAS (GNU Assembler) уже хотя бы за счет того, что ассемблерные программы можно транслировать с помощью компилятора GCC, используя Си-сопроцессор с одной стороны и освобождаясь от головной боли с поиском стартового кода и библиотек, однако GAS использует AT&T-синтаксис, являющийся полной противоположностью Intel-синтаксису, которого придерживаются MASM, TASM, FASM, NASM/YASM. Разработчики вирусов и просто маленьких ассемблерных программ, написанных из любви к искусству, намного меньше ограничены в своем выборе и могут использовать все, что им по душе, вне зависимости от степени "поддержки".
Качество документирования играет весьма важную роль и еще важнее — кому принадлежит проект. Трансляторы, созданные энтузиастами-одиночками, могут умереть в любой момент, поэтому закладываться на них в долговременной перспективе не стоит. Коммерческие ассемблеры крупных компаний выглядят намного более стабильными и непоколебимыми, однако никаких гарантий, что в один "прекрасный" момент компания не забросит на своей продукт, у нас нет (достаточно вспомнить историю с TASM'ом). Открытые трансляторы, поддерживаемые независимой группой лиц, наиболее живучи. Стоило коллективу NASM'а чуть-чуть приостановить его развитие, как тут же появился YASM — "позаимствовавший" исходные тексты и добавивший все необходимое (поддержку x86-64, формат отладочной информации CodeView и так далее).
Последнее, на чем хотелось бы заострить внимание — это макросредства. Отношение к ним у программистов двоякое. Одни во всю пользуются плодами прогресса, программируя на смеси ассемблера, бейсика и препроцессора Си (существует даже проект HLA: High Level Assembler — Ассемблер Высокого Уровня), другие — презирают их, ратуя за чистоту ассемблерного кода. Макросы упрощают программирование, зачастую позволяя невозможное (например, шифровать код программы еще на стадии ассемблирования!), но переносимость программы от этого резко ухудшается и переход на другой транслятор становится труднореализуемым. Но как бы там ни было, поддержка макросов совсем не обязывает этими макросами пользоваться!
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 08:51   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

MASM

MASM — Macro Assembler — "Ассемблер с поддержкой Макросов".
MASM — продукт компании Microsoft для создания MS-DOS, а позднее и для Windows 9x/NT. После выхода версии 6.13 MASM на некоторое время затормозил в развитии, но потом здравый смысл взял вверх и последняя версия поддерживает unicode, все SSE/SSEII/SEEIII расширения (объявляемые двумя директивами .686/.XMM), а также архитектуру AMD x86-64. Платформа Intel IA64 не поддерживается, но Microsoft поставляет Intel-ассемблер IAS.EXE.
При помощи макросов MASM покрывает своими возможностями широкий круг задач: повторения однотипных операций с параметризацией (шаблоны), циклические макросы, условное ассемблирование и так далее, по сравнению с которым препроцессор языка Си выглядит жалкой подделкой. Имеется примитивная поддержка основных парадигм ООП хотя ассемблер и ООП концептуально несовместимы. Многие пишут даже без макросов на чистом ассемблере, считая свой путь идеологически наиболее правильным.
Сначала MASM распространялся в виде самостоятельного пакета, позже он был включен в состав DDK, которое вплоть до Windows 2000 DDK раздавалось бесплатно, а сейчас доступно подписчикам MSDN. Вполне полноценное DDK (с ассемблером) для Windows Server 2003 входит в Kernel-Mode Driver Framework, а сам транслятор MASM'а еще и в Visual Studio Express.
MASM'у посвящено множество книг, что упрощает процесс обучения, а в сети можно найти кучу исходных текстов ассемблерных программ и библиотек, освобождающих программиста от необходимости изобретать всё самому заново. Также MASM является выходным языков для многих дизассемблеров (Sourcer, IDA Pro). Все это делает MASM транслятором номером один в программировании под Windows/Intel.
Поддерживаются два выходных формата: 16/32 Microsoft OMF и (16)/32/64 COFF, что позволяет транслировать 16/32-разрядные программы под MS-DOS, работающие в реальном и защищенном режиме, 16-разрядные приложения и драйвера для Windows 3.x, 32-разрядные приложения и драйвера для Windows 9x/NT, а также 64-разрядные приложения и драйвера для Windows NT 64-bit Edition. Для создания бинарных файлов потребуется линкер, который умеет это делать (например, ulink от Юрия Харона). Кстати говоря, последние версии штатного Microsoft Linker'а, входящие в SDK и DDK, утратили способность собирать 16-разрядные файлы под MS-DOS/Windows 3.x и приходится возвращаться к старой версии, которая лежит в папке NTDDK\win_me\bin16.
MASM генерирует отладочную информацию в формате CodeView, которую Microsoft Linker может преобразовывать в PDB-формат, хоть и не документированный, но поддерживаемый библиотекой dbghelp.dll, позволяющей сторонним разработчикам "переваривать" отладочную информацию, поэтому файлы, оттранслированные MASM'ом, можно отлаживать в Soft-Ice, дизассемблировать в IDA Pro и прочих продуктах подобного типа.
Главный недостаток MASM'а — большое количество ошибок. Стоит открыть Knowledge Base, посмотреть на список официально подтвержденных ошибок. Особенно много ошибок в штатной библиотеке. Вот только несколько примеров: dwtoa и atodw_ex не понимают знака и по скорости очень тормозят, хотя в документации написано: "A high speed ascii decimal string to DWORD conversion for applications that require high speed streaming of conversion data"; ucFind не находит в строке подстроку, если длина подстроки равна 1 символу; функции BMHBinsearch и SBMBinSearch (поиск алгоритмом Бойера-Мура) реализованы с ошибками; некоторые функции обрушивают программу (если передать ustr2dw строку длиннее пяти байт - программа падает).
Другой минус — отсутствие поддержки некоторых инструкций и режимов адресации процессора, например, невозможно сделать jmp far seg: offset, а попытка создания смешанного 16/32 разрядного кода — настоящий кошмар, который приходится разгребать руками и всячески извращаться, преодолевая сопротивление "менталитета" транслятора.
MASM — типичный коммерческий продукт с закрытыми исходными текстами. Microsoft интенсивно продвигает высокоуровневое программирование, отказываясь от ассемблера везде, где это только возможно, поэтому не исключено, что через несколько лет MASM прекратит свое существование...
Тем не менее, несмотря на все эти недостатки, MASM остается самым популярным профессиональным транслятором ассемблера при программировании под Windows NT. MASM (Macro Assembler) — стандарт де-факто при программировании под Windows 9x/NT
Ссылки
  • Kernel-Mode Driver Framework: Среда разработки драйверов, бесплатно распространяемая Microsoft, в состав которой входит транслятор MASM'а со всеми необходимыми утилитами: http://www.microsoft.com/whdc/driver/wdf/KMDF_pkg.mspx;
  • Visual Studio Express Edition: Урезанная редакция Visual Studio, распространяемая на бесплатной основе с транслятором MASM'а и прочими необходимыми утилитами у себя внутри: http://msdn.microsoft.com/vstudio/express;

Последний раз редактировалось Mikl___; 03.12.2014 в 08:57.
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 08:56   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

MASM32 для Windows
Проект создан в 1998 году Стивом Хатчессоном, который собрал последние версии транслятора MASM'а, линкер от Microsoft, включаемые файлы, библиотеки, обширную документацию, статьи разных авторов, посвященные ассемблеру, и даже простенькую IDE в один дистрибутив, известный под "пакетом хатча" (hutch), бесплатно раздаваемый всем желающим на вполне лицензионной основе, вполне удобный комплект инструментов для программирования под Windows на ассемблере.
Ссылки
  • Последние версии MASM32'а плюс куча разных утилит, документации и того, что может понадобиться при программировании под Windows: http://www.movsd.com/ и http://masm32.com/
TASM
TASM — Turbo Assembler — "Скоростной Ассемблер".
Самый популярный транслятор ассемблера времен MS-DOS, созданный фирмой Borland, и полностью совместимый с MASM'ом вплоть до версий 6.x и поддерживающий свой собственный режим IDEAL с большим количеством улучшений и расширений.
Удобство программирования, скромные системные требования и высокая скорость трансляции обеспечивали TASM'у лидерство на протяжении всего существования MS-DOS. Но с появлением Windows популярность TASM'а стала таять буквально на глазах. Не сумев (или не захотев) добиться совместимости с заголовочными файлами и библиотеками, входящими в комплект SDK/DDK, фирма Borland решила поставлять свой собственный порт. Штатный линкер tlink/tlink32 не поддерживает возможности создания драйверов, а формат выходных файлов (Microsoft OMF, IBM OMF, Phar Lap), не поддерживается текущими версиями линкера от Microsoft (впрочем, 16-битные версии это умеют). Формат отладочной информации несовместим с CodeView и реально поддерживается только TurboDebugger'ом и soft-ice.
Последней версией транслятора стал TASM 5.0, поддерживающий команды вплоть до 80486 процессора. Отдельно был выпущен патч, обновляющий TASM до версии 5.3 и поднимающий его вплоть до Pentium MMX, однако команды Pentium II, например, как SYSENTER не работают. Поддержка уникода отсутствует.
В настоящее время Borland прекратила распространение своего ассемблера. Существует пакет TASM 5+, включающий в себя транслятор, линкер, какое-то подобие документации, несколько заголовочных файлов под Windows и пару демонстрационных примеров. Существует TASM32 фирмы Squak Valley Software — совершенно независимый кроссассемблер, ориентированный на процессоры 6502,6800/6801/68HC11, 6805, TMS32010, TMS320C25, TMS7000, 8048, 8051,8080/8085, Z80, 8096/80C196KC.
Для разработки прикладных приложений под Windows 16/32 и MS-DOS TASM подходит, особенно если вы уже имеете опыт работы с ним и некоторые собственные наработки (библиотеки, макросы), конвертировать TASM-программы под MASM — весьма проблематично.
Ссылки
  • TASM 5+ by Borland Corp.: Неофициальный пакет, содержащий последние версии транслятора TASM со всеми доступными патчами, документаций и прочими утилитами
  • еще одна ссылка на скачивание тасма

LzAsm
LzAsm — Lazy Assembler — "Ассемблер для ленивых" — автор - Половников Степан — реинкарнация TASMа с поддержкой новых команд процессора. Lazy Assembler совместим с режимом IDEAL TASM и поддерживающим команды из наборов MMX, SSE, SSEII, SSEIII, 3DNow!Pro.
Ссылки
  • Страница LAZY ASM'а, откуда можно скачать сам транслятор, документацию на английском языке и сопроводительные примеры к нему: http://www.file-extensions.org/lazy-...ile-extensions
FASM
FASM (расшифровывается как Flat Assembler — Ассемблер Плоского Режима) — крайне необычный транслятор с экзотичными возможностями. FASM — ассемблер с предельно упрощенным синтаксисом (никаких offset'ов и прочих захламляющих листинг директив), полной поддержкой всех процессорных команд (в том числе и jmp 0007:00000000), качественным кодогенератором, мощным макропроцессором и гибкой системой управления за форматом выходных файлов.
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 09:03   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

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'а мощный, позволяет писать программы на себе самом без единой ассемблерной строки. Ни на что не похожий синтаксис FASM'а напрягает, заставляя вгрызаться в плохо структурированную документацию и небольшое количество демонстрационных примеров, поставляемых вместе с транслятором. Категорическая несовместимость с MASM'ом чрезвычайно затрудняет разработку Windows-драйверов (в большинстве своем создаваемых на основе примеров из DDK). Прикладным задачам в свою очередь требуется SDK и желательно первой свежести. "Математические" задачи, перемножающие матрицы, вычисляющие координаты пересечения кривых в N-мерном пространстве или трансформирующие графику легко пишутся на FASM'е, поскольку не привязаны к конкретной операционной системе, никаких API-функций они не вызывают и вообще не лезут туда, где можно обойтись Си/Си++.
Ссылки
  • Страница FASM'а откуда можно скачать сам транслятор, документацию на английском языке и сопроводительные примеры к нему: http://flatassembler.net
  • Небольшая подборка статей, посвященная FASM'у (на русском языке): http://www.softoplanet.ru/lofiversio...php/t4404.html
NASM
NASM — Netwide Assembler — "Расширенный Ассемблер" авторы: Peter Anvin, Simon Tatham, Julian Hall. Имеет MASM-подобный синтаксис, мощную макросистему (несовместимую с MASM'ом и ничего не знающую об union'ах и других полезных вещей), поддерживает всю линейку x86-процессоров вплоть до IA64 в x86-режиме, богатство выходных файлов (bin, aout, aoutb, coff, elf, as86, obj, win32, rdf, ieee), генерация отладочной информации в форматах Borland, STABS и DWARF2 вкупе с портами под MS-DOS, Windows, Linux и BSD. Количество ошибок в трансляторе довольно велико, причем в отличии от работающих продуктов (MASM/TASM) при "хитрых ошибках" NASM не падает, а генерирует ошибочный (по структуре) объектный файл. В последней версии NASM'а, в зависимости от значения ключа -On, код может сгенерироваться в двух или более экземплярах или может пропасть весь экспорт (pubdef'ы).
Минусы NASM'а
  • отсутствие поддержки формата отладочной информации CodeView
  • некоторые странности синтаксиса
В частности, команда "push 1" не оптимизируется и транслятор умышленно оставляет место для 32-разрядного операнда. Если же мы хотим получить "короткий" вариант, размер операнда необходимо специфицировать явно: "push byte 1" или использовать опцию "-On" для автоматической оптимизации.
Также необходимо принудительно указывать длину переходов short или near, иначе можно нарваться на ругательство "short jump out of range". Существует возможность настроить транслятор на генерацию near-переходов по умолчанию.
NASM не помнит типы объявляемых переменных и не имеет нормальной поддержки структур.
Из мелких недочетов можно называть невозможность автоматического генерации короткого варианта инструкции "push imm8" и отсутствие контроля за соответствием транслируемых инструкций типу указанного процессора (команда "cpuid" под ".486" ассемблируется вполне нормально, а ведь не должна).
Непосредственная трансляция примеров из SDK/DDK под NASM'ом невозможна, так что разрабатывать на нем драйвера под Windows может только очень крутой поклонник или извращенец. NASM - один из лучших ассемблеров под Linux/BSD, а вот под Windows его позиции уже не так сильны (в основном из-за неполной совместимости с MASM'ом).
NASM — ассемблер под Linux/BSD с Intel-синтаксисом.
Ссылки
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 09:07   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

YASM

YASM — "Yet another assembler", "Yes, it's an assembler", "Your favorite assembler" — усовершенствованный вариант NASM'а, авторы: Peter Johnson, Michael Urman.
Когда развитие NASM'а затормозилось, его исходные тексты легли в основу нового транслятора YASM. Основные отличительные черты YASM'а от его предшественника: поддержка платформы AMD x86-64, большое количество исправленных ошибок, оптимизированный парсер, переваривающий синтаксис как NASM, так и GAS, более полная поддержка COFF (DJGPP) и Win32 obj выходных файлов, генерация отладочной информации в формате CodeView, интернационализация (выполненная через GNU-библиотеку gettext), и прочие мелкие улучшения, которых вполне достаточно, чтобы потеснить NASM особенно в мире UNIX-подобных систем, где GAS-синтаксис по-прежнему играет ведущую роль.
Под Windows же YASM не имеет никаких ощутимых преимуществ перед MASM'ом за исключением того, что поддерживает возможность генерации двоичных файлов, особенно удобных для создания shell-кода, но бесполезных для разработчика драйверов.
Ссылки
  • Страница YASM'а, откуда можно скачать сам транслятор, документацию на английском языке и сопроводительные примеры к нему: http://www.tortall.net/projects/yasm
HLA
HLA (High Level Assembly Language) — автор Randall Hyde, высокоуровневый ассемблер, на любителя. "Академический" проект очень высокоуровневого ассемблера.
HLA - это гибрид, работающий как очень мощный препроцессор для нескольких ассемблеров. частью целевой аудитории HLA являются студенты, которые должны изучить ассемблер и сделать на нем что-нибудь полезное, используя то ограниченное время, которое есть у них в университете.
HLA ассемблер, включающий в себя множество функций свойственных для высокоуровневых языков (таких как C, C++ и Java), которые позволяют быстро освоить основы ассемблера. HLA позволяет писать настоящий низкоуровневый код со всеми преимуществами языков программирования высокого уровня.
ССылки
  • HLA транслятор, документация на английском языке и огромное количество готовых примеров http://webster.cs.ucr.edu
GoAsm
Ассемблер для процессоров семейства x86, создан Jeremy Gordon для написания программ для операционных систем семейства Windows, способен создавать 32- и 64-битных версий, а также программы с поддержкой Unicode. GoAsm является проприетарным ПО и распространяется в бинарном формате.
Цель разработки

GoAsm создавался с целью создать компилятор с простым и ясным синтаксисом, производящий как можно более компактный код, скромными потребностями для обработки скриптов и возможностью добавления расширений.
Особенности GoAsm
GoAsm не создаёт 16-разрядный код и способен работать только в model flat (без сегментов), благодаря этому синтаксис очень прост.
В качестве формата выходных данных используется COFF Portable Executable format, и для создания исполняемых файлов необходимо использовать дополнительный компоновщик (например — GoLink или ALINK) и компилятор ресурсов (GoRC).
GoAsm способен файлы в формате Unicode (UTF-16 или UTF-8).
Синтаксис
Несмотря на то что используется Intel-синтаксис, синтаксис GoAsm несовместим ни с одним из существующих компиляторов.
GoAsm использует препроцессор сходный по синтаксису с препроцессором языка программирования C.
В GoAsm необходимо использовать квадратные скобки для чтения и записи памяти.
Поддерживаемые наборы инструкций
GoAsm поддерживает все стандартные инструкции (за исключением использующихся только в 16-разрядных программах). Инструкции x87 для работы с числами с плавающей точкой. Инструкции и синтаксис для работы с MMX, SSE, SSE2, 3DNow!, 3DNow!, FPU, MMX, XMM, SSE, SSE2 и 3DNow!
Другие инструменты разработанные Jeremy Gordon
  • GoAsm — ассемблер
  • GoLink — компоновщик
  • GoRC — компилятор ресурсов
  • GoBug — отладчик (версия для Windows XP является платной)
  • Paws — IDE
Ссылки
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 09:15   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

SOLAR Assembler
Автор Bogdan Valentin Ontanu. SOLAR Assembler современный многопроходный макроассемблер, предназначен для компиляции 16/32/64-разрядных программы запускаемых под Windows, Linux, MacOSX и Solar_OS
Особенности
  • Быстро обрабатывает большие и сложные проекты: скорость обработки до 350000 строк в секунду
  • Создает выходные файлы в формате PE32/64, Binary 16/32/64, DLL32/64
  • Создает OBJ-файлы в формате OMF32, COFF32/64, ELF32/64 и MachO32
  • Программы в 16/32/64-разрядном виде
  • Рекурсивные и вложенные макросы
  • Включает в себя богатый набор примитивов:
    • .IF .ELSEIF .ELSE .ENDIF с логическими операциями AND/OR/NOT для нескольких условий
    • PROC, ARGS, LOCALS, USES
    • INVOKE с поддержкой ADDR
    • STRUCT, ENUM, UNION
    • .REPEAT .UNITIL
    • MACRO, MARGS, VARARG, EXITM
    • #if, #ifdef, #if_used, #else
  • не требуются PROTO, проверяет аргументы процедур
  • включает в себя минимально расходующий память компилятор ресурсов
  • создает листинг в стандартном текстовом формате
  • создает отладочную информацию в COFF-формате и легкочитаемый текстовый формат
  • многоплатформенный, работает со следующими операционными системами:
    • WIn95, Win98, Windows XP, VISTA, Windows 7 32 и 64 разрядной
    • Mac OS X (10.5 leopard),
    • Unix / Linux и другие unix-подобные операционные системы, которые могут линковаться с ELF libc
Ссылки
Ассемблеры под UNIX
Единственный более-менее работающий транслятор под UNIX — GAS (GNU Assembler) завязан на компилятор GCC и имеет такой ужасный синтаксис, что писать на нем могут только мазохисты (примеров программ, запрограммированных на GAS'е практически нет).
Прочие ассемблеры
Существует также множество других видов ассемблера, число которых постоянно растет.
Остальные ассемблеры (типа A86, AS86) не позволяют писать 16/32-разрядный код или раздаются практически без документации.
  • ASM-86 Intel Corporation
  • WASM — Open Watcom Assembler — ассемблер фирмы Watcom http://openwatcom.org
  • JWasm http://www.japheth.de/JWasm.html
  • CodeX Assembler автор Marco Kaufmann свободнораспространяемый ассемблер для x86 платформы, поддерживает все инструкции микропроцессоров Intel до Pentium 4 включительно, а также набор AMD-инструкций 3D Now! Включает в себя интегрированный линкер, генерирует файлы следующих форматов:
    • 16-/32-разрядные Flat Model Binaries
    • 16-/32-разрядные приложения DOS
    • 32-разрядные Windows приложения (Console / GUI) и 32-разрядные Windows DLL-ки
    страница CodeX Assembler http://www.pageofmarco.de/codex/eng/
  • RosAsm ReactOS — 32-битовый Win32 x86 ассемблер, выпущенный согласно лицензии GNU GPL. Согласно своему имени, ассемблер поддерживает ReactOS, хотя проекты RosAsm и ReactOS независимы. RosAsm — IDE с полной интеграцией ассемблера, встроенного линкера, редактора ресурсов, отладчика и дизассемблера. Синтаксис сделан как продолжение NASM’а. RosAsm упаковывает исходный текст, от которого программы собираются непосредственно в пределах портативных исполняемых файлов. Поскольку RosAsm производит файлы PE напрямую, отдельный шаг линкования (компоновки) не требуется. Тем не менее, это означает, что компилятор не позволяет связываться с внешними модулями объекта, отличными от DLL, и он не поддерживает способность произвести программные модули, которые могут быть связаны с другими программами.
  • POasm автор Pelle Orinius. MASM-совместимый ассемблер (POASM) с поддержкой синтаксиса Intel и компоновщик (POLINK) Poasm и Polink можно найти в пакете MASM32
  • NewBasic++ Assembler http://www.cybertrails.com/~fys/newbasic.htm
  • Pass32 http://www.geocities.com/SiliconValley/Bay/3437/
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 09:22   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

За основу взяты
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 09:35   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

JWasm(краткий экскурс)

JWasm (автор - Andreas 'Japheth' Grech)- это форк ассемблера WASM, допиленый до совместимости с МАСМом, и не только:
поддержка выходных форматов:
  • Intel OMF
  • MS Coff (32/64-bit)
  • Elf (32/64-bit)
  • двоичный
  • Windows PE (32/64-bit)
  • DOS MZ
- существуют версии JWasm для
  • DOS
  • Windows
  • Linux.
Последняя версия 2.12 вышла 19.12.2013.
Главное и очень радующее отличие от МАСМа - это многопроходность, т. е. отпадает необходимость ставить секцию .data и определения 'EQU' и '=' в начале проги, перед секцией .code .
Ключики и опции командной строки в основном совпадают с МАСМом, но есть отличия:
JWasm [опции] asm-файл [опции] [asm-файл] ... [@env_var]
  • -<0|1|..|10>[p] тип процессора:
    • 0=8086 (default)
    • 1=80186
    • 2=80286
    • 3=80386,
    • 4=80486
    • 5=Pentium
    • 6=PPro
    • 7=P2
    • 8=P3
    • 9=P4
    • 10=x86-64
  • <p> разрешить привелегированные инструкции
  • -AT не поддерживается, но .com-файл получить можно, об этом ниже.
  • -Bl не поддерживается
  • -e<number> макс. кол-во ошибок (умолчание=50)
  • -eq не выводить сообщения об ошибках
  • -F не поддерживается
  • -Fe не поддерживается
  • -Fd[=<fname>] записать файл импорта
  • -Fi<fname> принудительно включтить <fname> в трансляцию
  • -Fm не поддерживается
  • -Fw<fname> задать имя файла ошибок
  • -FPi87 команды 80x87 (умолчание)
  • -fpc запретить команды FPU
  • -fp<n> тип FPU, <n>: 0=8087 (умолчание), 2=80287, 3=80387
  • -FR не поддерживается
  • -Fr не поддерживается
  • -H не поддерживается
  • -link не поддерживается
  • -m<t|s|c|m|l|h|f> модель памяти: (Tiny, Small, Compact, Medium, Large, Huge, Flat)
  • -nc=<name> имя класса для сегменнта кода
  • -safeseh Assert all exception handlers are declared
  • -Sc не поддерживается
  • -Sg включить генерируемый код в листинг
  • -Sp,Ss,Sl,St не поддерживается
  • -zcm добавлять префикс '_' к именам Си (умолчание)
  • -zcw НЕ добавлять префикс '_' к именам Си
  • -zf<0|1> задать тип FASTCALL: 0=стиль MS VC (умолчание), 1=регистровое соглашение OW
  • -Zg генерить код как Masm
  • -Zi[0|1|2|3] добавить отладочную инфу (OMF & COFF) для:
    • 0=глобальных имен
    • 1= +локальных
    • 2= +типов (умолчание)
    • 3= +констант
  • -zlc не добавлять OMF-записи о данных в коде
  • -zld не добавлять OMF-записи об оптимизации вызовов far call
  • -zl<f|p|s> запретить записи в таблице символов COFF:
    • f=o точке входа .file
    • p=o статических процедурах static procs
    • s=o доп. точках входа для секций
  • -Zne запретить расширения синтаксиса, НЕ поддерживаемые Masm'ом
  • -zt<0|1|2> тип декорации(включения параметров вызова в имя) для STDCALL:
    • 0=выкл
    • 1=без суффикса '@size' для ф-ций
    • 2=полная декорация (умолчание)
  • -Zv8 включить видимость PROC для Masm v8+
  • -zze выключить декорацию имён для экспортируемых символов
  • -zzs сохранить декорированное имя стартового адреса (только COFF)
  • @env_var имя файла или переменной окружения с опциями

выходные форматы:
  • bin бинарный файл
  • coff объектный файл формата COFF
  • elf объектный файл формата 32-bit ELF
  • elf64 объектный файл формата 64-bit ELF
  • mz бинарный файл формата DOS MZ
  • omf объектный файл формата OMF (умолчание)
  • pe бинарный файл формата PE, 32/64-bit
  • win64 объектный файл формата 64-bit COFF
Описание остальных опций можно найти в русифицированном мануале по МАСМу.

Имеем файлик hello.asm
Код:
ifdef DOSCOM
.code
    org 100h
start:
else
.stack
.code
start:  push    cs
    pop ds
endif
    mov dx, offset hello
    mov ah,9
    int 21h
    mov ax, 4c00h
    int 21h
 
hello   db  'Bye-bye, ugly MASM!$'
    end start
из которого можем получить hello.com командой
Код:
jwasm -mt -bin -Fo=hello.com hello.asm -DDOSCOM
или hello.exe командой
Код:
jwasm -ms -mz -Fo=hello.exe hello.asm
Страничка проекта: http://www.japheth.de/JWasm.html
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для шифрования раздела с виндой Жека90 Софт 1 12.06.2012 18:17
макрос для решения квадратных уравнений (перемещено из раздела Excel) sashkkk Помощь студентам 3 22.09.2010 23:06
Собираем команду для FAQ Aexx Свободное общение 112 14.10.2009 09:20
Формат по образцу для раздела... Busine2009 Microsoft Office Word 0 28.07.2009 08:05
Программа для копирования заданного раздела. С++ x007 Общие вопросы C/C++ 5 23.04.2009 23:52