Оригинальный автор(ы) | Саймон Тэтхэм , Джулиан Холл |
---|---|
Разработчик(и) | Х. Питер Анвин , Чан Сок Бэ, Джим Кукунас, Фрэнк Б. Котлер, Сирилл Горцунов |
Первоначальный выпуск | Октябрь 1996 г (1996-10) |
Стабильный релиз | 2.16.03 [1] / 17 апреля 2024 г. (17 April 2024) |
Репозиторий |
|
Написано в | Сборка , С [2] |
Операционная система | Unix-подобный , Windows , OS/2 , MS-DOS |
Доступно в | Английский |
Тип | x86 ассемблер |
Лицензия | BSD 2-пункт |
Веб-сайт | www.nasm.us |
Netwide Assembler ( NASM ) — ассемблер и дизассемблер для архитектуры Intel x86 . Его можно использовать для написания 16-битных , 32-битных ( IA-32 ) и 64-битных ( x86-64 ) программ. Он считается одним из самых популярных ассемблеров для Linux и чипов x86 . [3]
Первоначально он был написан Саймоном Тэтхэмом при содействии Джулиана Холла. По состоянию на 2016 год [update]он поддерживается небольшой командой во главе с Х. Питером Анвином . [4] Это программное обеспечение с открытым исходным кодом , выпущенное на условиях упрощенной (2-пунктной) лицензии BSD . [5]
NASM может выводить несколько двоичных форматов, включая COFF , OMF, a.out , Executable and Linkable Format (ELF), Mach-O и двоичный файл (.bin, двоичный образ диска, используемый для компиляции операционных систем ), хотя позиционно-независимый код поддерживается только для объектных файлов ELF . Он также имеет свой собственный двоичный формат, называемый RDOFF. [6]
Разнообразие выходных форматов позволяет перенацеливать программы практически на любую операционную систему x86 (ОС). Он также может создавать плоские двоичные файлы , пригодные для записи загрузчиков , образов постоянной памяти (ПЗУ) и в различных аспектах разработки ОС. [6] Он может работать на платформах, отличных от x86, как кросс-ассемблер , таких как PowerPC и SPARC , хотя он не может генерировать программы, пригодные для использования этими машинами.
NASM использует вариант синтаксиса ассемблера Intel вместо синтаксиса AT&T . [7] Он также избегает таких функций, как автоматическая генерация переопределений сегментов (и связанной с ними директивы ASSUME), используемых MASM и совместимыми ассемблерами. [6]
Версия NASM 0.90 была выпущена в октябре 1996 года. [5]
Версия 2.00 была выпущена 28 ноября 2007 года, в нее была добавлена поддержка расширений x86-64 . [4] Версии для разработки не загружаются на SourceForge.net , но проверяются на GitHub с бинарными снимками, доступными на веб-странице проекта.
Также доступна поисковая система для документации NASM. [8]
В июле 2009 года, начиная с версии 2.07, NASM был выпущен под упрощенной (2-пунктовой) лицензией BSD. Ранее, поскольку он был лицензирован под LGPL , это привело к разработке Yasm, полностью переписанной под новой лицензией BSD . Yasm предлагал поддержку x86-64 раньше, чем NASM. Он также добавил поддержку синтаксиса GNU Assembler .
Формат файла перемещаемого динамического объекта (RDOFF) используется разработчиками для проверки целостности возможностей вывода объектных файлов NASM. Он в значительной степени основан на внутренней структуре NASM, [9] по сути состоящей из заголовка, содержащего сериализацию вызовов функций выходного драйвера, за которым следует массив разделов, содержащих исполняемый код или данные. Инструменты для использования формата, включая компоновщик и загрузчик, включены в дистрибутив NASM.
До версии 0.90, выпущенной в октябре 1996 года, NASM поддерживал вывод только исполняемых файлов в плоском формате (например, файлов DOS COM ). В версии 0.90 Саймон Тэтхэм добавил поддержку интерфейса вывода объектных файлов и файлов DOS .OBJ только для 16-битного кода. [10]
Таким образом, в NASM не было 32-битного объектного формата. Чтобы устранить этот недостаток и в качестве упражнения по изучению интерфейса объект-файл, разработчик Джулиан Холл собрал первую версию RDOFF, которая была выпущена в версии NASM 0.91. [10]
Начиная с этой первоначальной версии, было одно крупное обновление формата RDOFF, которое добавило индикатор длины записи для каждой записи заголовка, [11] что позволяет программам пропускать записи, формат которых они не распознают, и поддерживает несколько сегментов; RDOFF1 поддерживал только три сегмента: text , data и bss (содержащий неинициализированные данные). [9]
Формат RDOFF настоятельно не рекомендуется к использованию и был отключен, начиная с версии NASM 2.15.04. [12]
два самых популярных ассемблера для Linux, GNU Assembler (GAS) и Netwide Assembler (NASM)