Nasm - это Netwide Assembler, ассемблер x86/x64 с открытым исходным кодом. Он нацелен на переносимость, модульность и простой синтаксис.

Nasm - это Netwide Assembler, ассемблер x86/x64 с открытым исходным кодом. Он нацелен на то, чтобы быть портативным, модульным и иметь более простой синтаксис, чем наиболее часто используемый ассемблерный газ с открытым исходным кодом. Он поддерживает целый ряд форматов вывода, включая ELF, PE/COFF и простой двоичный (a.out).

Для получения общей информации о x86 asm см. Множество ссылок на справочные руководства / документы, руководства по оптимизации / производительности, инструменты и советы по отладке в вики-странице тегов x86.

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

  • Домашняя страница NASM
  • Руководство NASM
  • более старая версия приложения A NASM, в которой есть текстовые описания каждой записи инструкций, а также ЦП, в котором они были представлены (8086, 186, 386 и т. д.), но она включает только MMX и старше; текущая версия приложения лишена текста, потому что SSE2/AVX/etc. есть так много инструкций.

  • https://yasm.tortall.net/ YASM - это NASM-совместимый ассемблер с некоторыми приятными функциями (например, длинные NOP по умолчанию), но разработка застопорилась и он не поддерживает AVX512.

  • x264 имеет очень большой набор макросов NASM, которые пытаются абстрагироваться от соглашений о вызовах x86_32, win64, linux64, а также выполнять проверку на уровне функций ЦП. (например, чтобы объявить функцию / блок как SSSE3 и отловить случайное использование инструкции SSE4.1).

    Это очень навязчиво и заставляет ваш исходный код выглядеть значительно отличным от обычного x86 asm (макросы для имен регистров). Он лицензируется отдельно (ISC, а не GPL), поэтому его можно использовать в других проектах.

    Один его экземпляр можно найти в дереве исходных текстов libvpx (видеокодек VP8/9). Сам x264 также имеет копию, и посмотрите эти проекты для функций DSP, использующих ее.