Сетевой ассемблер
Оригинальный автор(ы) | Саймон Тэтэм , Джулиан Холл |
---|---|
Разработчик(и) | Х. Питер Анвин , Чан Сок Бэ , Джим Кукунас , Фрэнк Б. Котлер , Сирилл Горцунов |
Первоначальный выпуск | октябрь 1996 г |
Стабильная версия | 2.16.03 [1] / 17 апреля 2024 г |
Репозиторий | |
Написано в | Сборка , С [2] |
Операционная система | Unix-подобный , Windows , OS/2 , MS-DOS |
Доступно в | Английский |
Тип | x86 сборка |
Лицензия | 2-пункт BSD |
Веб-сайт | www |
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 , исполняемый и связываемый формат (ELF), Mach-O и двоичный файл (.bin, образ двоичного диска, используемый для компиляции операционных систем ), хотя код не зависит от позиции. поддерживается только для объектных файлов ELF . Он также имеет собственный двоичный формат под названием RDOFF. [6]
Разнообразие выходных форматов позволяет переориентировать программы практически на любую операционную систему (ОС) x86. Он также может создавать плоские двоичные файлы , которые можно использовать для записи загрузчиков , образов постоянной памяти (ПЗУ) и в различных аспектах разработки ОС. [6] Он может работать на платформах, отличных от x86, как кросс-ассемблер , таких как PowerPC и SPARC , но не может генерировать программы, используемые на этих машинах.
NASM использует вариант ассемблерного синтаксиса Intel вместо синтаксиса AT&T . [7] Он также позволяет избежать таких функций, как автоматическое создание переопределений сегментов (и связанной с ними директивы ASSUME), используемых MASM и совместимыми ассемблерами. [6]
Примеры программ
[ редактировать ]Коллекцию примеров программ можно найти в Wikibooks: Примеры программ Netwide Assembler .
Разработка
[ редактировать ]Версия 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 поддерживал только три сегмента: текст , данные и bss (содержащие неинициализированные данные). [9]
Формат RDOFF категорически устарел и отключен, начиная с NASM 2.15.04. [12]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Релиз 2.16.03» . 17 апреля 2024 г. Проверено 23 апреля 2024 г.
- ^ «NASM, сетевой ассемблер» . Гитхаб . 25 октября 2021 г.
- ^ Рам Нараян. «Ассемблеры Linux: сравнение GAS и NASM» . ИБМ . Архивировано из оригинала 3 октября 2013 года.
Два самых популярных ассемблера для Linux: GNU Assembler (GAS) и Netwide Assembler (NASM).
- ^ Jump up to: а б «Сетевой ассемблер» . Проверено 27 июня 2008 г.
- ^ Jump up to: а б «История версий NASM» . Проверено 3 августа 2019 г.
- ^ Jump up to: а б с «Руководство НАСМ» . Архивировано из оригинала 23 февраля 2009 года . Проверено 15 августа 2009 г.
- ^ Рэндалл Хайд . «NASM: Сетевой ассемблер» . Архивировано из оригинала 12 сентября 2010 года . Проверено 27 июня 2008 г.
- ^ «Поисковая система документов NASM» . Архивировано из оригинала 23 января 2010 года . Проверено 14 сентября 2009 г.
- ^ Jump up to: а б «Руководство NASM, глава 6» . Проверено 27 июня 2008 г.
- ^ Jump up to: а б «НАСМ ЦВС» . 8 июня 2008 года . Проверено 27 июня 2008 г.
- ^ «V1-V2.txt» . 4 декабря 2002 г. Проверено 27 июня 2008 г.
- ^ «Формат перемещаемого динамического объектного файла (устаревший)» .
Дальнейшее чтение
[ редактировать ]- Джефф Дантеманн (2000). Язык ассемблера шаг за шагом . Дж. Уайли и сыновья. ISBN 0-471-37523-3 .
Внешние ссылки
[ редактировать ]- Официальный сайт
- Netwide Assembler на SourceForge
- Специальное издание для Win32 и BeOS.
- Сравнение GAS и NASM в IBM
- «Сетевой ассемблер» . Бесплатный код . : конвертер между исходным форматом ассемблеров NASM и GAS