Сетевой ассемблер

Ассемблер для архитектуры Intel x86

НАНМ
Оригинальный автор(ы)Саймон Тэтхэм , Джулиан Холл
Разработчик(и)Х. Питер Анвин , Чан Сок Бэ, Джим Кукунас, Фрэнк Б. Котлер, Сирилл Горцунов
Первоначальный выпускОктябрь 1996 г .; 28 лет назад (1996-10)
Стабильный релиз
2.16.03 [1]  / 17 апреля 2024 г. ; 6 месяцев назад (17 April 2024)
Репозиторий
  • github.com/netwide-assembler/nasm
Написано вСборка , С [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]

Смотрите также

Ссылки

  1. ^ "Выпуск 2.16.03". 17 апреля 2024 г. Получено 23 апреля 2024 г.
  2. ^ "NASM, Netwide Assembler". GitHub . 25 октября 2021 г.
  3. ^ Рам Нараян. "Ассемблер Linux: сравнение GAS и NASM". IBM . Архивировано из оригинала 3 октября 2013 г. два самых популярных ассемблера для Linux, GNU Assembler (GAS) и Netwide Assembler (NASM)
  4. ^ ab "The Netwide Assembler" . Получено 27 июня 2008 г.
  5. ^ ab "История версий NASM" . Получено 3 августа 2019 г.
  6. ^ abc "NASM Manual". Архивировано из оригинала 23 февраля 2009 года . Получено 15 августа 2009 года .
  7. ^ Рэндалл Хайд . "NASM: The Netwide Assembler". Архивировано из оригинала 12 сентября 2010 года . Получено 27 июня 2008 года .
  8. ^ "NASM Doc Search Engine". Архивировано из оригинала 23 января 2010 года . Получено 14 сентября 2009 года .
  9. ^ ab "NASM Manual Ch. 6" . Получено 27 июня 2008 г. .
  10. ^ ab "NASM CVS". 8 июня 2008 г. Получено 27 июня 2008 г.
  11. ^ "V1-V2.txt". 4 декабря 2002 г. Получено 27 июня 2008 г.
  12. ^ «Формат файла перемещаемого динамического объекта (устарел)».

Дальнейшее чтение

  • Джефф Дантеманн (2000). Язык ассемблера шаг за шагом . J Wiley and Sons. ISBN 0-471-37523-3.
  • Официальный сайт
  • Netwide Assembler на SourceForge
  • Специальное издание для Win32 и BeOS.
  • Сравнение GAS и NASM в IBM
  • "Netwide Assembler". Freecode .: конвертер между исходным форматом ассемблеров NASM и GAS
Retrieved from "https://en.wikipedia.org/w/index.php?title=Netwide_Assembler&oldid=1241266844"