NASM (Netwide Assembler) – свободный ассемблер для архитектуры Intel x86. Используется для написания 16-, 32- и 64-разрядных программ.
NASM был создан Саймоном Тэтхемом совместно с Юлианом Холлом и в настоящее время развивается небольшой командой разработчиков на SourceForge.net. Первоначально он был выпущен согласно его собственной лицензии, но позже эта лицензия была заменена на GNU Lesser General Public License после множества проблем, вызванных выбором лицензии. Начиная с версии 2.07 лицензия заменена на «упрощённую BSD» (BSD из 2 пунктов).
NASM может работать на платформах, отличных от x86, таких как SPARC (Scalable Processor ARChitecture) и PowerPC (или сокращённо PPC), однако код он генерирует только для x86 и x86-64. Находясь в одной операционной системе, можно беспрепятственно откомпилировать исполняемый файл для другой.
NASM успешно конкурирует со стандартным в Linux- и многих других UNIX-системах ассемблером GNU Assembler. Считается, что качество документации у NASM выше, чем у GNU Assembler. Кроме того, ассемблер gas по умолчанию использует AT&T-синтаксис, ориентированный на процессоры не от Intel, в то время как NASM использует вариант традиционного для x86-ассемблеров Intel-синтаксиса; Intel-синтаксис используется всеми ассемблерами для DOS и Microsoft Windows, например, MASM (Microsoft Macro Assembler), TASM (Turbo Assembler), flat assembler (fasm).
Компиляция программ в NASM состоит из двух этапов. Первый – ассемблирование, второй – компоновка. На этапе ассемблирования создаётся объектный код. В нём содержится машинный код программы и данные, в соответствии с исходным кодом, но идентификаторы (переменные, символы) пока не привязаны к адресам памяти. На этапе компоновки из одного или нескольких объектных модулей создаётся исполняемый файл (программа). Операция компоновки связывает идентификаторы, определённые в основной программе, с идентификаторами, определёнными в остальных модулях, после чего всем идентификаторам даются окончательные адреса памяти или обеспечивается их динамическое выделение.
Для компоновки объектных файлов в исполняемые в Microsoft Windows можно использовать свободный бесплатно распространяемый компоновщик alink (для 64-х битных программ компоновщик GoLink), а в Linux – компоновщик ld, который есть в любой версии этой операционной системы.
Для ассемблирования файла нужно ввести следующую команду:
nasm -f format filename -o output
Поддерживаемые форматы NASM
NASM поддерживает множество форматов выходных файлов, среди них:
Пригоден как для файлов данных, так и для модулей с исполняемыми кодами – например,
Формат выходного файла можно задать с помощью ключа командной строки -f. Форматы могут расширять синтаксис некоторых инструкций и добавлять собственные инструкции.
Ссылки