”МАТИ” – Российский Государственный Технологический Университет им. К.Э. Циолковского Кафедра: “Проектирование вычислительных комплексов” Курсовая работа По курсу: “Операционные системы” На тему: “Инструментарий для программирования на ассемблере” Студент: Зломанов В.А. Группа: 6ВТИ-4ДБ-160 Работу принял: Балакирев Н.Е. Подпись: _____________ Москва 2010 СОДЕРЖАНИЕ Введение ..................................................................................................................................................3 Трансляторы ............................................................................................................................................4 Введение ............................................................................................................................................................4 Основополагающие критерии ..........................................................................................................................4 Генерация отладочной информации ...........................................................................................................4 Формат выходных файлов ............................................................................................................................4 Количество поддерживаемых процессорных архитектур .........................................................................4 Интеграция в мировое сообщество .............................................................................................................5 Качество документирования ........................................................................................................................5 Макросредства...............................................................................................................................................5 Обзор трансляторов ..........................................................................................................................................5 MASM ..............................................................................................................................................................5 TASM................................................................................................................................................................6 FASM ................................................................................................................................................................7 NASM ...............................................................................................................................................................8 YASM................................................................................................................................................................9 JWASM .............................................................................................................................................................9 POASM .............................................................................................................................................................9 HLA...................................................................................................................................................................9 Заключение ........................................................................................................................................................9 Линкеры .................................................................................................................................................11 Введение ..........................................................................................................................................................11 Список литературы ...............................................................................................................................13 Страница 2 из 13 Введение Компиляторы языков высокого уровня (Си, Паскаль) в определенной степени совместимы между собой и хотя исходный текст, предназначенный для одного компилятора, не всегда без переделок транслируется на другом, синтаксис и прочие языковые концепции остаются неизменными, позволяя «летать» между MS VS, Intel C++, GCC, Open WATCOM, сравнивая полноту поддержки Стандарта, скорость трансляции, качество кодогенерации, популярность компилятора и вытекающее отсюда изобилие (недостаток) библиотек и компонент к нему. А вот отсутствие каких-либо официальных стандартов по ассемблеру наносит существенные ограничения по переносимости кода и приводит к созданию множества трансляторов, что только усугубляет ситуацию. Поэтому стоит серьезно отнестись к выбору инструментов при работе над каким-либо проектом. Страница 3 из 13 Трансляторы Введение Как уже было сказано выше существуют значительные проблемы при выборе трансляторов. Помимо поддержки мнемоник машинных команд, каждый транслятор обладает своим собственным набором директив и макросредств, зачастую ни с чем не совместимых. Ассемблерный листинг, «заточенный», например, под MASM, бесполезно переносить на FASM, поскольку, возможности, предоставляемые макросредствами, у них сильно неодинаковые. Но ассемблер – это только инструмент, и возможно совместное использование нескольких трансляторов. На практике, обычно, так и поступают. Ставится конкретная задача и для ее решения выбирается наиболее подходящий инструмент. Естественно, чтобы сделать правильный выбор, необходимо знать какие ассемблеры вообще есть и чем они отличаются. Основополагающие критерии Можно выделить ряд основополагающих критериев, существенных для всех категорий программистов при выборе транслятора. Генерация отладочной информации Без данного критерия, отладка программы сложнее, чем «hello, world», превращается в настоящую пытку. Проблема в том, что формат отладочной информации не стандартизован и различные трансляторы используют различные форматы, что ограничивает нас в выборе отладчиков или вынуждает использовать конверторы сторонних производителей, а некоторые ассемблеры (например, FASM) не генерирует отладочной информации вообще. Конечно, можно воспользоваться отладочной печатью (вставить макрос, выводящий значение регистров/переменных на экран/файл в указанных местах), но какой в этом смысл при программировании, например, под Windows, когда существуют, различные отладчики? Формат выходных файлов Многие только пожмут плечами. Какой там формат? Обыкновенный obj, из которого с помощью линкера можно изготовить все, что душе угодно – от exe до dll. Но «обыкновенных» объектных файлов не бывает. Есть omf (в редакциях от Microsoft и IBM), coff,elf, aout и еще куча разной экзотики в стиле as86, rdf и т.д. Так же заслуживает внимания возможность «сквозной» генерации двоичных файлов не требующая помощи со стороны линкера. А некоторые ассемблеры (например, FASM) даже позволяют «вручную» генерировать исполняемые файлы и динамические библиотеки различных форматов полностью контролируя процесс их создания и заполняя ключевые поля по своему усмотрению. Но в настоящее время на ассемблере обычно пишутся не целиком программы, а модули, наиболее критичные к быстродействию, которые затем линкуются к основному проекту и, если ассемблер генерирует только omf, а компилятор – coff, то возникает проблема сборки «разнокалиберных» форматов воедино. Существует линкер умеющий это делать – ulink от Юрия Харона, являющийся одним из самых гибких линкеров в настоящее время. Но все-таки лучше, чтобы формат выходных файлов был одинаковым. Количество поддерживаемых процессорных архитектур Конечно, недостающие команды можно реализовать с помощью макросов или запрограммировать непосредственно в машинном коде через директиву DB, но возникает вопрос: зачем вообще нужны ассемблеры, когда есть hex-редакторы? Особое внимание следует обратить на платформы x86-64 (AMD64 и Intel 64 соответственно). Полный переход на 64битные ОС – лишь вопрос времени. Страница 4 из 13 Интеграция в мировое сообщество Под ней понимается количество доступных исходных кодов, библиотек и пр., а также поддержка и обновление со стороны производителя (например, TASM уже давно не поддерживается и используется в основном только в учебных целях в университетах). Качество документирования Играет весьма важную роль и еще важнее кому принадлежит проект. Трансляторы, созданные энтузиастами-одиночками, могут умереть в любой момент, поэтому закладываться на них в долговременной перспективе рискованно. Коммерческие ассемблеры крупных компаний выглядят намного более стабильными и непоколебимыми, однако, никаких гарантий, что в один «прекрасный» момент компания не прекратит поддержку своего продукта, у нас нет (вспомним про TASM).Открытые трансляторы, поддерживаемые независимой группой лиц, наиболее живучи. Стоило коллективу NASM’а чуть-чуть приостановить его развитие, как тут же появился YASM – «позаимствовавший» исходные тексты и добавивший все необходимое (поддержку x86-64, формат отладочной информации CodeView и т.д.). Макросредства Отношение к ним у программистов двоякое – одни вовсю пользуются плодами прогресса, другие же ратуют за чистоту ассемблерного кода. Существует даже проект HLA: High Level Assembler, программа на котором выглядит примерно так: program HelloWorld; #include( "stdlib.hhf" ) static hwString :string := "Hello World", nl; begin HelloWorld; // Push the address of the "Hello World" string push( hwString ); // Call an HLA Standard Library function that // will print the string whose address has // been pushed on the stack. call stdout.puts; end HelloWorld; Листинг 1. Программа, выводящая «Hello World» Макросы упрощают программирование, зачастую позволяя невозможное, но переносимость программы от этого резко ухудшается и переход на другой транслятор становится труднореализуемым. Тем не менее, поддержка макросов совсем не обязывает этими макросами пользоваться. Обзор трансляторов Вкратце опишем плюсы, минусы и возможности каждого транслятора, опираясь на основополагающие факторы. MASM Продукт жизнедеятельности ранней компании Microsoft, которой тот был нужен для создания MS-DOS, а позднее и для Windows 9x/NT. После выхода версии 6.13 продукт на Страница 5 из 13 некоторое время тормознул в развитии, но потом здравый смысл взял вверх и последние версии поддерживают Unicode, SSE-расширения, а так же архитектуру x86-64. Платформа Intel IA64 не поддерживается, но Microsoft поставляет Intel-ассемблер IAS.EXE. Аббревиатура расшифровывается, как Microsoft Macro Assembler. Макросы покрывают своими возможностями широкий круг задач: повторение однотипных операций с параметризацией (шаблоны), циклические макросы, условное ассемблирование и т.д. Имеется так же поддержка парадигмы программирования ООП, но она широкого распространения не получила, т.к. ассемблер и ООП концептуально несовместимы. Так же существует «пакет хатча», собранный Стивом Хатчессоном, содержащий библиотеки для работы с WinAPI, и, собственно, транслятор и линкер от Microsoft, и даже простенькую IDE, – все это делает данный пакет вполне удобным средство программирования под Win32. MASM’у посвящено множество книг, что упрощает процесс обучения, а в сети можно найти кучу исходных текстов ассемблерных программ и библиотек, освобождающих программиста от необходимости изобретать велосипед. Также MASM является выходным языком для многих дизассемблеров (Sourcer, IDA Proc). Все это делает MASM транслятором номером один в программировании под «Wintel». Поддерживаются два выходных формата 16/32 Microsoft OMF и 32/64 COFF. Для создания бинарных файлов потребуется линкер, который умеет это делать (например, ulink от Юрия Харона). Последние версии штатного линкера от Microsoft утратили способность собирать 16-разрядные файлы под MS-DOS/Windows 3.x. MASM (версии 6.х) генерирует отладочную информацию в формате CodeView, которую Microsoft Linker может преобразовывать в PDB-формат, хоть и не документированный, но поддерживаемый библиотекой dbghelp.dll, позволяющей сторонним разработчикам "переваривать" отладочную информацию, поэтому, файлы, оттранслированные MASM'ом, можно отлаживать в Soft-Ice, дизассемблировать в IDA Pro и прочих продуктах подобного типа. Новые версии MASM’a (7.х и выше) поддерживаются отладчиком OllyDbg. Возможно, стоит опасаться прекращения поддержки со стороны Microsoft’а, но т.к. MASM используется для разработки драйвером, то, скорее всего, поддержку не прекратят. Этот транслятор на данный момент является одним из самых популярных для программирования под Windows, но начал терять позиции, в связи с появление FASM’a, который в силу простоты (относительной) синтаксиса набирает популярность. TASM Самый популярный транслятор времен MS-DOS, созданный фирмой Borland, и полностью совместимый с MASM’ом вплоть до версиё 6.x и поддерживающий свой собственный режим IDEAL с большим количеством улучшений и расширений. Удобство программирования, скромные системные требования и высокая скорость трансляции обеспечивали TASM'у лидерство на протяжении всего существования MS-DOS (буква "T" означает Turbo). Но с появлением Windows популярность TASM'а стала таять буквально на глазах. Не сумев (или не захотев) добиться совместимости с заголовочными файлами и библиотеками, входящими в комплект SDK/DDK, фирма Borland решила поставлять свой собственный порт, причем далеко неидеальный. К тому же штатный линкер tlink/tlink32 не поддерживает возможности создания драйверов, а формат выходных файлов (Microsoft OMF, IBM OMF, Phar Lap), не поддерживается текущими версиями линкера от Microsoft (впрочем, 16-битные версии это умеют). В довершении ко всему, формат отладочной информации не совместим с CodeView и реально поддерживается только TurboDebugger'ом и Soft-ice. Страница 6 из 13 И хотя эти проблемы в принципе разрешимы: возможность низкоуровневого ассемблерного программирования (без включаемых файлов и макросов) осталась там же, где и была, несовместимость форматов компенсируется наличием конверторов, но… преимущества режима IDEAL над стандартным синтаксисам MASM'а день ото дня казались все менее и менее значительными, ряды поклонников редели и в конце концов проект загнулся. Последней версией транслятора стал TASM 5.0, поддерживающий команды вплоть до 80486 процессора. Отдельно был выпушен патч, обновляющий TASM до версии 5.3 и поднимающий его вплоть до Pentium MMX, однако, команды Pentium II такие, например, как SYSENTER как не работали, так и не работают. Поддержка Unicode тоже отсутствует. В настоящее время Borland прекратила распространение своего ассемблера и достать его можно только в магазинах торгующих старыми CD-ROM или у какого-нибудь коллекционера. Программист по кличке !tE выпустил пакет TASM 5+, включающий в себя транслятор, линкер, библиотекарь, какое-то подобие документации, несколько заголовочных файлов под Windows и пару демонстрационных примеров. В общем, TASM – это труп. Однако для разработки прикладных приложений под Windows 16/32 и MS-DOS он все-таки подходит, особенно, если вы уже имеете опыт работы с ним и некоторые собственные наработки (библиотеки, макросы), с которыми жалко расставаться, а конвертировать под MASM – весьма проблематично. Возможно, вам понравится бесплатный Lazy Assembler (автор – Половников Степан), совместимый с режимом IDEAL TASM и поддерживающим команды из наборов MMX, SSE, SSEII, SSEIII, 3DNow!Pro. Но последнее обновление (версия 0.56 от 6 августа 2007) говорит с практически 100%-ной вероятностью о том, что поддержка завершена. FASM FASM (расшифровывается как Flat Assembler – Ассемблер Плоского Режима) – это крайне необычный транслятор с экзотичными возможностями, которых все мы давно (и безуспешно!) ждали от крупных производителей, но те были слишком далеки от практического программирования и пытались формировать новые потребности (например, путем введения поддержки ООП), вместо того, чтобы удовлетворять те, что есть. Так продолжалось до тех пор, пока Томаш Гриштар (Tomasz Grysztar) – аспирант Ягеллонского университета в Кракове – не задумал написать свою собственную ось, названную Титаном и представляющую некоторое подобие DOS-системы для защищенного режима. Перебрав несколько ассемблерных трансляторов, но так и не обнаружив среди них подходящего, Томаш пошел на довольно амбициозный шаг, решив разработать необходимый инструментарий самостоятельно. Это произошло в 1999-03-23, 14:24:33 (дата создания первого файла) и уже к началу мая 1999 года появилась версия, способная транслировать сама себя (FASM написан на FASM'е). Операционная система в результате одной случайной катастрофы пала смертью храбрых, а вот исходные тексты FASM'а — остались и с тех пор он продолжает активно развиваться. Что же такое FASM? Это ассемблер с предельно упрощенным синтаксисом (никаких offset'ов и прочих захламляющих листинг директив), полной поддержкой всех процессорных команд (в том числе и jmp 0007:00000000h), качественным кодогенератором, мощным макропроцессором и гибкой системой управления за форматом выходных файлов. FASM распространяется в исходных текстах на бесплатной основе и к настоящему моменту перенесен на MS-DOS, Windows 9x/NT, LINUX, BSD, поддерживает Unicode и все x86 процессоры вплоть до Pentium-4 с наборами мультимедийных инструкций MMX, SSE, SSEII, SSEIII, SSE4.2, AMD 3DNow!, а так же платформу x86-64, позволяя генерировать не только Microsoft COFF, но и готовые bin, mz, pe и elf файлы. То есть, фактически, FASM позволяет обходиться без линкера, однако, при этом раскладку секций в PE-файле и таблицу импорта приходится создавать "вручную" с помощью специальных директив ассемблера, что выглядит Страница 7 из 13 очень заманчиво, но на практике все же намного удобнее сгенерировать COFF и скомпоновать его с модулями, написанными на языках высокого уровня. Макроязык FASM'а настолько мощный, что позволяет писать программы на себе самом без единой ассемблерной строки, вот например (см. листинг 2): 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 Листинг 2. Программа, целиком написанная на интерпретируемом языке FASM'a Все это были достоинства. Теперь поговорим о недостатках. Ни на что не похожий синтаксис FASM'а напрягает даже матерых программистов, заставляя их вгрызаться в плохо структурированную документацию и небольшое количество демонстрационных примеров, поставляемых вместе с транслятором. На это требуется время, которое, в конечном счете, ничем не компенсируется, поскольку, круг задач, на которых FASM реально рвет MASM, крайне мал. Категорическая несовместимость с MASM'ом чрезвычайно затрудняет разработку Windows-драйверов (в большинстве своем создаваемых на основе примеров из DDK). Прикладным задачам в свою очередь требуется SDK и желательно первой свежести, а не второй, да и программы, целиком написанные на ассемблере, – это совсем не то, чего требует бизнес-машина. «Математические» задачи, перемножающие матрицы, вычисляющие координаты пересечения кривых в N-мерном пространстве или трансформирующие графику – легко пишутся на FASM'е, поскольку не привязаны к конкретной операционной системе, никаких API-функций они не вызывают и вообще не лезут туда, где можно обойтись Си/Си++. Если бы FASM поддерживал генерацию отладочной информации, его (с некоторой натяжкой) еще было бы можно рассматривать как серьезный инструмент, а так… он остается игрушкой, пригодной для мелких задач типа "hello, world", вирусов, демок и прочих произведений хакерского творчества. Хотя следует отметить, что на нем написана, например, MenuetOS. Наконец, ни у кого нет гарантий, что создатель FASM'а не утратит к нему интереса (хотя последний stable-релиз датируется 13.06.2009, а preview-релиз 28.10.2009), а ведь без поддержки новых процессорных инструкций всякий транслятор обречен на медленное, но неизбежное вымирание. Открытость исходных текстов тут не поможет, помимо них нужна еще и команда. Нужны «носители знания», способные удержать детали проекта у себя в голове, а тот факт, что FASM написан на себе самом, увы, читаемости листингам отнюдь не добавляет. NASM Транслятор NASM (расшифровывается как Netwide Assembler – Ассемблер Шириной Во Всю Сеть или просто Расширенный Ассемблер) вырос из идеи, поданной на comp.lang.asm.x86 (или возможно на alt.lang.asm — сейчас точно никто и не помнит), когда не было ни одного хорошего свободного ассемблера под x86. Выходными форматами являются COFF, PE, aout, ELF, Mach-O, а так собственный формат RDOFF. Также NASM умеет генерировать двоичные файлы, полезные, например, для написания загрузчиков ОС. Имеется поддержка SSE (в т.ч. и версии AMD SSE5) и прочего. На сайте так же есть неплохая документация к транслятору, доступная на английском языке. Страница 8 из 13 После некоторого застоя в поддержке быстренько развился проект YASM, но сейчас поддержка возобновилась последняя стабильная версия 2.07 от 19.07.2009, а RC-версии 2.08 штампуют чуть ли не каждые две недели и сейчас является одним из самых популярных трансляторов под GNU/Linux. YASM Когда развитие NASM'а затормозилось, его исходные тексты легли в основу нового транслятора – YASM, что в зависимости от настроения может расшифровываться и как: Yes, it's an assembler, и как Your favorite assembler, и как Yet another assembler, и даже как Why an assembler (последнее – шутка). Главной отличительной чертой от предшественника является поддержка синтаксиса GAS, что добавляет возможности потеснить NASM в мире UNIX, где GAS-синтаксис играют немаловажную роль. Поддерживается и архитектура x86-64, текущие наборы инструкций SSE и т.п. Постоянно развивается user’s manual (последняя версия 20 января 2010 года) и, что приятно, разработчики пытаются перевести мануал на русский язык, но качество, мягко говоря, страдает. YASM умеет создавать bin, coff, elf, mach-o, pe, а также xdf файлы, а также генерирует отладочную информацию в форматах STABS, DWARF2 и CodeView. В общем, YASM является вполне конкурентно-способным продуктом и можно говорить практически со 100%-ной уверенностью, что поддержка NASM/YASM не прекратится, а если и прекратиться, то появится схожий продукт. JWASM Разрабатывался как MASM-совместимый ассемблер с Intel-синтаксисом. По сути является переписанным WASM’ом. Умеет создавать файлы в форматах OMF, MS COFF (32/64), elf (32/64), bin и DOS mz. Является бесплатным для некоммерческого использования. На данный момент ведется поддержка ведется Japheth и последняя версия 2.02 от 19.01.2010. Но нет никаких гарантий, что поддержка прекратиться, на данный момент вряд ли может считаться какой-либо серьезной конкуренцией другим продуктам, хотя и имеет немало преимуществ. POASM Ассемблер с MASM-синтаксисом, входящий в пакет Pelles C, а также в «пакет хатча», отличительной особенностью является поддержка архитектуры ARM (Windows Mobile). Ориентирован на Windows. На данный момент практически отсутствуют какие-либо примеры написания программ, поэтому не пользуется особой популярностью. Так же обладает сносной документацией, но не более того. HLA Ассемблер был разработан в качестве обучающего средства для студентов University of California, Riverside. Основной идеей было перенести знания студентов C/C++ и Pascal’а на низкий уровень. На данный момент поддержкой занимается сообщество. Существует англоязычная документация на сайте университета (см. список литературы). Заключение Попробуем подвести итог, обобщив все вышесказанное в нескольких словах: 1. MASM (Microsoft Macro Assembler) – стандарт де-факто при программировании под Windows 9x/NT, но имеющий непонятное будущее. Страница 9 из 13 2. TASM (Turbo Assebler) – представляет интерес исключительно при программировании под MS-DOS (и то, без поддержки новых команд для x86-64) и академических целей. 3. LZASM (Lazy Assembler) – попытка воскресить TASM, окончившаяся такой же судьбой, как и предшественник. 4. FASM (Flat Assembler) – быстроразвивающийся и весьма самобытный ассемблер, не имеющий собственного линкера, что предоставляет серьезные ограничения. 5. NASM (Netwide Assembler) – хороший ассемблер под GNU/Linux/BSD с Intelсинтаксисом. 6. YASM (Yet Another Assembler) – усовершенствованный вариант NASM’а. 7. JWASM (JWASM Macro Assembler) – хороший MASM-подобный ассемблер, но не обладающий достаточной популярностью. 8. POASM – относительно свежий ассемблер с Intel-синтаксисом, обладает поддержкой ARM-архитектуры. 9. HLA (High Level Assembler) – высокоуровневый ассемблер на любителя, обладающий большим количеством примеров. Страница 10 из 13 Линкеры Введение Линкер (по-нашему, компоновщик) – это программа, которая на вход получает один или несколько объектных файлов и библиотек, и соединяет их воедино в один исполняемый файл или новую библиотеку. Как правило, каждая IDE включает в себя отдельный линкер, или позволяет использовать внешний. Самому компоновщику параметры можно задавать, как из среды разработки, так и из командной строки, но последний способ неудобен, но обладает большими возможностями. В отличии от компиляторов и трансляторов, линкеры обладают однотипными возможностями и единственными критериями их выбора являются: поддержка нужного формата входных файлов, форматы выходных файлов и различные дополнительные возможности по компоновке. Поэтому линкер выбирается непосредственно под определенные требования. Обзор линкеров link Компоновщик от Microsoft умеет работать с файлами формата MS COFF (32/64), на выходе получая .exe или dynamic-link library (DLL). Старые версии (например, поставляемые в MASM 6.13) умели так же работать и с OMF (16/32) файлами, но сейчас эту поддержку за ненадобностью убрали (по крайней мере в официальном описании она отсутствует). Обладает рядом возможностей по компоновке, в т.ч. установкой базового адреса программы, создания отладочной информации и т.д. По компоновщику msdn.microsoft.com. имеется достаточно хорошая документация на сайте tlink Компоновщик от Borland, поставляемый вместе с TASM’ом. Умеет работать только с OMF-файлами, а создавать DOS-mz, .com и PE (в версии 5.0+ от !tE). В общем пригоден только для работы в паре с TASM’ом. alink Разработан Anthony A.J. Williams’ом… и успешно заброшен. Последняя версия вышла в сентябре 1998 года. Умеет работать с lib и obj-файлами формата OMF (MS/Intel) и MS-COFF, но импорт библиотек в формате MS COFF не поддерживается. Умеет создавать MS-DOS (exe и com) – файлы, а также Win32 PE и DLL, что делает этот компоновщик неплохой альтернативой tlink, но, к сожалению, единственная отладочная информация, которую он может предоставить – это map-файл. Так же практически нет какихлибо настроек процесса компоновки. В общем, складывается мнение, что линкер был разработан для какой-то конкретной цели, а потом успешно заброшен. wlink Компоновщик, входящий в пакет Open Watcom. Умеет работать с файлами следующих форматов: OMF (Intel/MS/Phar Lap), COFF, ELF, OMF library, AR (MS совместимый) library Страница 11 из 13 format. Выходными могут являться: DOS-exe (com/exe), elf, bin, exe/dll (win16/32), OS/2 (executable/dll), QNX. Отличительной особенностью данного компоновщика является отличная документация на английском языке, где подробнейшим образом написано как им пользоваться (pdf-файл на 269 страниц). Так же имеет внушительный перечень настроек процесса компоновки. К сожалению, смущает отсутствие поддержки x86-64, но Open Watcom продолжает существовать и, возможно, мы скоро увидим версию с поддержкой оной. jwlink Модифицированная версия линкера Open Watcom (последней версии), по заявлению автора (он же автор JWasm), она «более совместима с линкером от MS». Документации нет, но, надо думать, что ее вполне можно взять от wlink. К компоновщику так же предоставляется небольшой текстовый файл, где описаны различия относительно wlink. Еще одним преимуществом является то, что ненужно скачивать тяжеловесный пакет Open Watcom, а можно скачать отдельно этот линкер (207 Кб). polink Компоновщик, входящий в состав Pelles C, а также в «пакет хатча». По своим возможностям напоминает «обрезанный» линкер от Microsoft. GoLink Разрабатывается Jeremy Gordon’ом и входит в состав Go tools for Windows + Assembler. Соответственно нет никаких гарантий, что проект перестанет поддерживаться (хотя на данный момент все в порядке). Исповедует минимализм и простоту. Обладает минимальным набором настроек процесса компоновки. По словам автора «линкер делает то, что должен – связывает один или несколько объектных файлов в исполняемый». Умеет работать с MS COFF (32) и создавать, опять же, PE (exe). Так же может генерировать отладочную информацию для отладчика GoBug. Имеется скудный мануал на сайте «производителя». GNU Linker Линкер, входящий в состав GCC, прежде всего рассчитанный на работу под Linux с соответствующей поддержкой elf-формата, так же имеется версия и под Windows, но обладает достаточной багистастью, чтобы его не использовать. ulink Пожалуй, самый мощный из компоновщиков, созданный Юрием Хароном, и «заточенный» под MS-DOS/Windows. Обладает вполне достойной документацией, поставляемой отдельно в .chm-файле. Поддерживает входные файлы форматов OMF, COFF, MS COFF. Умеет создавать все возможные файлы – от простого bin до Win64. Чтобы постоянно не мучиться с командной строкой или писать батники, можно часто-используемые библиотеки и настройки прописать в конфигурационном файле. Так же является, возможно, единственным компоновщиком, который умеет работать одновременно с разными форматами входных файлов (OMF и COFF, например). Но по заявлению автора: «Допустима «смешанная» компоновка – с использованием модулей оттранслированных разными компиляторами. Однако при использовании более чем одной RTL одновременно, Вы должны хорошо понимать что делаете.». Страница 12 из 13 Список литературы 1. Крис Касперски – «Сравнение ассемблерных трансляторов» 2. Крис Касперски – «Аржитектура x86-64 под скальпелем ассемблерщика» 3. http://msdn.microsoft.com/ – MASM, link 4. http://www.masm32.com/ – «пакет хатча» 5. http://flatassembler.net/ – FASM 6. http://www.nasm.us/ – NASM 7. http://www.tortall.net/projects/yasm/ – YASM 8. http://www.japheth.de/JWasm.html – JWASM 9. http://www.pellesc.de/ – POASM 10. http://webster.cs.ucr.edu/AsmTools/HLA/index.html – High Level Assembler 11. http://alink.sourceforge.net/ – Alink 12. http://www.openwatcom.org/ – Open Watcom Linker 13. http://www.jorgon.freeserve.co.uk/ – The Go tools for Windows + Assembler 14. http://webster.cs.ucr.edu/AsmTools/GoAsm/Doc/GoLink.htm – GoLink 15. http://gcc.gnu.org/ – GCC 16. http://en.wikipedia.org/ Страница 13 из 13