Введение

Сборщик для архитектуры Intel x86

Netwide Assembler (NASM) — это ассемблер и дизассемблер для архитектуры Intel x86. Он может использоваться для написания 16-битных, 32-битных (IA-32) и 64-битных (x86-64) программ. Он считается одним из самых популярных ассемблеров для Linux и процессоров x86. Изначально он был написан Саймоном Татемом при участии Джулиана Холла. По состоянию на 2016 год его поддерживает небольшая команда под руководством Х. Питера Анвина. Это программное обеспечение с открытым исходным кодом, распространяемое по упрощенной (двухпунктной) лицензии BSD.

Особенности

NASM может выводить несколько бинарных форматов, включая COFF, OMF, a.out, исполняемый и компонуемый формат (ELF), Mach O и бинарный файл (.bin, образ диска, используемый для компиляции операционных систем), хотя позиционно-независимый код поддерживается только для ELF-объектных файлов. У NASM также есть собственный бинарный формат, называемый RDOFF. Разнообразие выходных форматов позволяет адаптировать программы практически к любой x86 операционной системе (ОС). Он также может создавать плоские бинарные файлы, пригодные для записи загрузчиков, образов памяти только для чтения (ROM) и в различных областях разработки ОС. Он также избегает таких возможностей, как автоматическая генерация переопределений сегментов (и связанной с ними директивы ASSUME), используемых MASM и совместимыми ассемблерами. В июле 2009 года, начиная с версии 2.07, NASM был выпущен под упрощенной (двухпунктной) лицензией BSD. Ранее, из-за лицензирования под LGPL, это привело к разработке Yasm, полной переработке под новой лицензией BSD. Yasm предложил поддержку x86-64 раньше, чем NASM. Он также добавил поддержку синтаксиса GNU Assembler.

РДОФФ

Перемещаемый динамический формат объектного файла (RDOFF) используется разработчиками для тестирования целостности возможностей вывода объектных файлов NASM. Он в значительной степени основан на внутренней структуре NASM, по сути представляя собой заголовок, содержащий сериализацию вызовов функций выходного драйвера, за которым следует массив секций, содержащих исполняемый код или данные. Инструменты для работы с этим форматом, включая компоновщик и загрузчик, входят в состав дистрибутива NASM. До выпуска версии 0.90 в октябре 1996 года NASM поддерживал вывод только исполняемых файлов плоского формата (например, файлов DOS COM). В версии 0.90 Саймон Татам добавил поддержку интерфейса вывода объектных файлов и файлов DOS OBJ только для 16-битного кода. Таким образом, NASM не поддерживал 32-битный формат объектов. Чтобы решить эту проблему и в качестве упражнения для изучения интерфейса объектных файлов, разработчик Джулиан Холл создал первую версию RDOFF, которая была выпущена в версии NASM 0.91, обеспечивая возможность пропуска программ записей, формат которых они не распознают, и поддержку нескольких сегментов; RDOFF1 поддерживал только три сегмента: текст, данные и bss (содержащие неинициализированные данные).