Как установить nasm на Windows 10

Обновлено: 21.11.2024

Как компилировать и запускать программу сборки в NASM?

  1. Скопируйте ассемблерный код.
  2. Открыть блокнот.
  3. Вставьте код.
  4. Сохранить на рабочем столе как «assembly. асм”
  5. Удерживая клавишу Shift, щелкните правой кнопкой мыши на рабочем столе и в раскрывающемся списке выберите "Открыть командное окно здесь".
  6. Введите следующие две команды:
  7. nasm -f сборка win32. asm -o test.o.
  8. ld test.o -o Assembly.exe.

Как запустить NASM в Ubuntu?

Откройте терминал Linux. Введите whereis nasm и нажмите ENTER. Если он уже установлен, появится строка вроде nasm: /usr/bin/nasm. В противном случае вы увидите просто nasm:, тогда вам необходимо установить NASM.

Можно ли использовать NASM в Windows?

NASM означает сетевой ассемблер. если вы хотите ввести редактирование и выполнить программу на ассемблере, вам необходимо установить NASM в Windows 10 с помощью DosBox. NASM можно использовать для записи 16-битных, 32-битных и 64-битных программ. NASM — один из самых популярных ассемблеров для Linux.

Как загрузить NASM в Ubuntu?

  1. Запустите команду update, чтобы обновить репозитории пакетов и получить последнюю информацию о пакетах.
  2. Выполните команду установки с флагом -y, чтобы быстро установить пакеты и зависимости. sudo apt-get install -y nasm.
  3. Проверьте системные журналы, чтобы убедиться в отсутствии связанных ошибок.

Как я могу прокомментировать Nasm?

Какой уровень у Nasm?

Нужны ли какие-либо предварительные условия для сертифицированного персонального тренера NASM? Рекомендуется иметь диплом 3-го уровня в области фитнес-инструкторов и персональных тренировок. Вы можете получить 3-й уровень со скидкой через наши пакеты дипломов 3-го уровня.

Кем аккредитован NASM?

Национальная комиссия по сертификации агентств

Сколько времени нужно, чтобы получить сертификат NASM?

примерно 10–12 недель

Сложно ли пройти Nasm?

Насколько сложен тест NASM? Что ж, с учетом того, что процент сдачи экзамена NASM составляет всего 65%, а плата за повторное тестирование настолько высока, лучше иметь правильное направление для изучения наиболее важных областей.

Срок действия Nasm истекает?

Срок действия учетных данных NASM-CPT истечет, если все требования повторной сертификации не будут выполнены до даты истечения срока действия сертификации. По истечении 90 дней взимается дополнительная плата, а заявку на повторную сертификацию необходимо подать до истечения одного года после истечения срока действия учетных данных.

Что лучше: NASM или ACE?

Если вы чувствуете, что у вас возникнут сложности с коучингом клиентов, и вы хотите улучшить свои навыки в этой области, воспользуйтесь ACE. Если вы чувствуете, что хотите получить больше знаний о том, как разработать эффективную программу тренировок, используйте NASM.

Что проще, NASM или ACE?

Сложность экзамена и процент сдачи NASM имеет процент сдачи 64,3%, а ACE — 65%. Это означает, что экзамен с более низкими требованиями к сдаче, но с тем же процентом сдачи, является более сложным экзаменом.

Стоит ли NASM Elite?

Тем не менее, если вы мотивированы и хотите узнать больше о фитнесе, программа самообучения стоимостью 699 долларов – это все, что вам нужно. Тот факт, что NASM широко признан и аккредитован NCCA, также означает, что цена того стоит, поскольку сертификация — отличный способ начать карьеру.

Какой сертификат личного тренера пользуется наибольшим уважением?

Сертификации личного тренера с возможностью аккредитации NCCA являются самыми уважаемыми в отрасли. NCCA является золотым стандартом для сторонних сертификатов по личному обучению. Некоторые из этих сертификатов включают NASM, ACE, Fitness Mentors и ISSA.

Стоит ли становиться персональным тренером?

Большинству персональных тренеров платят только за то время, которое они физически тратят на тренировки клиентов, поэтому в итоге они работают по графику, когда клиенты хотят тренироваться рано утром и поздно вечером. Работа персонального тренера по фитнесу того стоит.

Хорошо ли зарабатывают личные тренеры?

Да, зарабатывать хорошие деньги личным тренером вполне реально. Даже личные тренеры начального уровня могут зарабатывать более 25 долларов в час и легко до 100 долларов в час, если они опытные. Частные личные тренеры могут зарабатывать еще больше в час, взимая до 100 долларов США в час.

Сколько стоит NASM?

Стоимость сертификации по персональным тренировкам NASM варьируется от 699 до 2199 долларов США.

Цель: установить MinGW и NASM для компиляции файла .asm, а затем создать исполняемый файл .exe.

2.1: Установите компилятор GCC¶

Мы будем использовать MinGW для компиляции наших сборочных проектов

Найдите установщик на сайте MinGW или загрузите его напрямую с этого сайта.

Запомните каталог установки по умолчанию и нажмите "Продолжить" .

MinGW может работать неправильно, если вы установите его в другой каталог, отличный от каталога по умолчанию.

Поэтому мы рекомендуем использовать каталог установки по умолчанию.

Установщик загрузит и установит MinGW.

Убедитесь, что программа установки загрузила и установила все выбранные элементы.

Выберите mingw32-base-bin и примените изменения.

Из меню: Установка ➜ Применить изменения

Установка может занять некоторое время в зависимости от вашего интернет-соединения.

Нажмите кнопку "Закрыть", когда пакеты закончат загрузку.

Убедитесь, что ming32-base-bin установлен.

Теперь вы можете закрыть окно программы установки.

2.2: Загрузка сетевого ассемблера (NASM)¶

Найдите программу установки на сайте NASM или загрузите версию Windows 10 x64 напрямую с этого сайта.

Запустите программу установки от имени администратора

Вам нужно будет запустить программу установки от имени Администратора, если вошедший в систему пользователь не может писать в C:\MinGW\bin .

Установить в C:\MinGW\bin

Проще всего установить его в тот же каталог, что и компилятор GCC. В противном случае вам придется добавить системные пути для обоих приложений.

Часть 3: Установка пути к ассемблеру¶

Система Windows должна знать, где найти gcc.exe и nasm.exe, что она и сделает, задав путь=C:\MinGW\bin;%path%

Сначала мы проверим, распознает ли Windows gcc и nasm с помощью командной строки. Затем мы установим путь как часть системного пути.

Проверьте выполнение программ в CMD¶

Примечание

Этот путь задается ТОЛЬКО для этого экземпляра CMD. Вы должны запустить команду снова, когда закроете окно CMD. Или вы можете указать абсолютный путь к файлу.

Вы можете добавить его на постоянной основе в системные переменные среды.

Открыть командную строку (CMD)

Установите временный путь, выполнив: path=C:\MinGW\bin;%path%

Проверьте правильность заданного пути

Тип: эхо %path%

Введите: gcc --version Убедитесь, что отображается версия файла.

Введите: nasm --version Убедитесь, что отображается версия файла.

Ошибки¶

Если вы получили нераспознанную ошибку, значит, путь задан неправильно или вы установили MinGW или NASM в другой каталог.

Попробуйте выполнить его, указав полный путь: C:\MinGW\bin\gcc --version

Проверьте путь установки: каталог C:\MinGW\bin

Установить путь в системе Windows¶

Укажите путь к вашему ассемблеру и компилятору в пути Windows, чтобы все приложения могли его найти.

В противном случае необходимо указать полный путь к приложениям.

Откройте дополнительные свойства системы в Windows. Есть несколько способов:

Скопируйте и вставьте одну из этих команд в проводник Windows или меню "Пуск"

Дополнительные системные настройки
-ИЛИ-

Перейдите из панели управления: Панель управления > Система и безопасность > Система

Нажмите кнопку "Переменные среды"

Выберите «Путь» в разделе «Переменные пользователя», а затем нажмите кнопку «Изменить».

Нажмите «Создать», а затем добавьте переменную для папки bin NASM и GCC: C:\MinGW\bin

Вы должны добавить оба пути, если вы установили NASM в другую папку.

Нажмите OK во всех окнах

Закройте и снова откройте окна командной строки, чтобы получить новое приглашение.

Перед продолжением убедитесь, что NASM и GCC правильно отображают версии.

© Copyright 2020, BilimEdtech | СС BY 4.0 | Под лицензией Creative Commons Attribution 4.0 International

Netwide Assembler, NASM, представляет собой ассемблер 80 x 86, разработанный для переносимости и модульности. Он поддерживает ряд форматов объектных файлов, включая Linux и , , , Microsoft 16-bit и . Он также будет выводить простые двоичные файлы. Его синтаксис разработан таким образом, чтобы быть простым и легким для понимания, подобно синтаксису Intel, но менее сложным. Он поддерживает , , , и коды операций, а также поддерживает макросы.

1.1.1 Зачем нужен еще один ассемблер?

  • это хорошо, но не бесплатно, и, в частности, вы не получите никаких 32-битных возможностей, пока не заплатите. Это тоже только для DOS.
  • бесплатен, и его можно портировать через DOS и Unix, но это не очень хорошо, так как он разработан как серверная часть для , который всегда предоставляет правильный код. Таким образом, его проверка ошибок минимальна. Кроме того, его синтаксис ужасен с точки зрения любого, кто пытается написать что-либо в нем. Кроме того, вы не можете написать в нем 16-битный код (правильно).
  • специально для Minix и Linux, и (по крайней мере, моя версия), похоже, не имеет много (или какой-либо) документации.
  • не очень хорош, и (был) дорог, и работает только под DOS.
  • лучше, но по-прежнему стремится к совместимости с MASM, что означает миллионы директив и тонны бюрократии. И его синтаксис, по сути, такой же, как у MASM, с вытекающими отсюда противоречиями и причудами (хотя некоторые из них он устраняет с помощью идеального режима). Это тоже дорого. И это только для DOS.

Итак, вот, для вашего удовольствия от программирования, NASM. В настоящее время он все еще находится на стадии прототипа — мы не обещаем, что он сможет превзойти любой из этих ассемблеров. Но, пожалуйста, пожалуйста, присылайте нам отчеты об ошибках, исправления, полезную информацию и все, что вы можете достать (и спасибо многим людям, которые уже сделали это! Вы все знаете, кто вы есть ), и мы улучшим его до неузнаваемости. Снова.

1.1.2 Лицензионные условия

Пожалуйста, см. файл , поставляемый как часть любого архива дистрибутива NASM, для условий лицензии, при которой вы можете использовать NASM. NASM теперь находится под так называемой Стандартной общественной лицензией GNU Lesser General Public License, LGPL.

1.2 Контактная информация

Текущая версия NASM (начиная с 0.98.08) поддерживается командой разработчиков, доступных через список рассылки (см. ссылку ниже). Если вы хотите сообщить об ошибке, сначала прочитайте раздел 10.2.

У NASM есть веб-страница по адресу . Если его там нет, погуглите для нас!

Исходные авторы могут быть отправлены по электронной почте как и . Последний больше не участвует в команде разработчиков.

Новые выпуски NASM загружаются на официальные сайты, а также на и .

Объявления публикуются в , и

Если вам нужна информация о бета-версиях NASM и текущем статусе разработки, подпишитесь на рассылку, зарегистрировавшись на сайте .

1.3 Установка

1.3.1 Установка NASM в MS-DOS или Windows

После получения DOS-архива для NASM (где обозначается номер версии NASM, содержащейся в архиве), распакуйте его в отдельный каталог (например, ).

Архив будет содержать четыре исполняемых файла: исполняемые файлы NASM и , а также исполняемые файлы NDISASM и . В каждом случае файл, имя которого заканчивается на, является исполняемым файлом, предназначенным для работы под управлением Intel или Intel, а другой — 16-разрядным исполняемым файлом.

Единственный файл, который необходимо запустить NASM, — это его собственный исполняемый файл, поэтому скопируйте (по крайней мере) один из и в каталог в вашем PATH или, альтернативно, отредактируйте, чтобы добавить каталог в ваш файл . (Если вы устанавливаете только версию, вы можете переименовать ее в .)

Все — NASM установлен. Вам не нужно, чтобы каталог nasm присутствовал для запуска NASM (если вы не добавили его в свой ), поэтому вы можете удалить его, если вам нужно сэкономить место; однако вы можете сохранить документацию или тестовые программы.

Если вы загрузили исходный архив DOS, каталог также будет содержать полный исходный код NASM и подборку файлов Makefile, которые вы можете (надеюсь) использовать для перестроения вашей копии NASM с нуля.

1.3.2 Установка NASM в Unix

После получения исходного архива Unix для NASM (где обозначается номер версии NASM, содержащейся в архиве), распакуйте его в каталог, например . Архив при распаковке создаст собственный подкаталог.

NASM — это автоматически настраиваемый пакет: распаковав его, перейдите в каталог, в который он был распакован, и введите . Этот сценарий оболочки найдет лучший компилятор C для сборки NASM и соответствующим образом настроит Makefile.

После автоматической настройки NASM вы можете ввести сборку двоичных файлов и , а затем установить их и установить справочные страницы и файлы . В качестве альтернативы вы можете предоставить такие опции, как скрипт configure (дополнительные сведения см. в файле), или установить программы самостоятельно.

NASM также поставляется с набором утилит для работы с пользовательским форматом объектных файлов, которые находятся в подкаталоге архива NASM. Вы можете создать их с помощью и установить с помощью , если хотите.

В этом руководстве показано, как писать программы на ассемблере для архитектуры x86-64.

Вы будете писать как (1) автономные программы, так и (2) программы, которые интегрируются с C.

Мы не будем слишком заморачиваться.

Ваша первая программа

Прежде чем изучать nasm, убедитесь, что вы умеете вводить текст и запускать программы.

Убедитесь, что установлены и nasm, и gcc. Сохраните одну из следующих программ как hello.asm, в зависимости от платформы вашего компьютера. Затем запустите программу в соответствии с данными инструкциями.

Если вы используете ОС на базе Linux:

Если вы используете macOS:

Структура программы NASM

NASM основан на строках. Большинство программ состоят из следующих за ними одного или нескольких файлов . Строки могут иметь необязательный . За большинством строк следует ноль или более символов .

Как правило, вы помещаете код в раздел с именем .text, а ваши постоянные данные — в раздел с именем .data.

Подробнее

Ваши первые несколько инструкций

Три вида операндов

Зарегистрировать операнды

В этом руководстве нас интересуют только целочисленные регистры и регистры xmm. Вы уже должны знать, что такое регистры, но вот краткий обзор. 16 целочисленных регистров имеют ширину 64 бита и называются:

(Обратите внимание, что 8 регистров имеют альтернативные имена.) Вы можете обращаться с младшими 32-битами каждого регистра как с самим регистром, но используя следующие имена:

Вы можете рассматривать младшие 16 бит каждого регистра как регистр, но используя следующие имена:

По историческим причинам биты с 15 по 8 R0 .. R3 названы так:

И, наконец, есть 16 регистров XMM, каждый из которых имеет ширину 128 бит, с именами:

Изучите эту картинку; надеюсь, это поможет:

Операнды памяти

  • [ число ]
  • [рег.]
  • [ reg + reg*scale ] масштаб только 1, 2, 4 или 8
  • [рег.+номер]
  • [ reg + reg*масштаб + число ]

Число называется смещением; простой регистр называется базовым; регистр со шкалой называется индексом.

Непосредственные операнды

Они могут быть написаны разными способами. Вот несколько примеров из официальной документации.

Инструкции с двумя операндами памяти встречаются крайне редко

Определение данных и резервирование пространства

Эти примеры взяты из главы 3 документации. Чтобы поместить данные в память:

Есть и другие формы; проверьте документы NASM. Позже.

Чтобы зарезервировать место (без инициализации), вы можете использовать следующие псевдоинструкции. Они должны находиться в разделе с именем .bss (вы получите сообщение об ошибке, если попытаетесь использовать их в разделе .text):

Еще один пример

Вот программа для macOS для изучения:

  • cmp выполняет сравнение
  • je переходит к метке, если предыдущее сравнение было равно. У нас также есть jne (прыгать, если не равно), jl (прыгать, если меньше), jnl (прыгать, если не меньше), jg (прыгать, если больше), jng (прыгать, если не больше), jle (прыгать, если меньше или равно), jnle (перейти, если не меньше или равно), jge (перейти, если больше или равно), jnge (перейти, если не больше или равно) и многие другие.
  • equ на самом деле не настоящая инструкция. Он просто определяет аббревиатуру для использования самим ассемблером. (Это глубокая идея.)
  • Раздел .bss предназначен для доступных для записи данных.

Использование библиотеки C

Написание автономных программ только с системными вызовами — это круто, но редко. Мы хотели бы использовать хорошие возможности библиотеки C.

Помните, как в C выполнение «начинается» с функции main ? Это потому, что библиотека C на самом деле имеет метку _start внутри себя! Код в _start выполняет некоторую инициализацию, затем вызывает main , затем выполняет некоторую очистку, а затем выполняет системный вызов для выхода. Так что вам просто нужно реализовать main . Мы можем сделать это в сборке!

Если у вас Linux, попробуйте следующее:

Под macOS это будет выглядеть немного иначе:

В macOS функции C (или любые функции, которые экспортируются из одного модуля в другой) должны начинаться с префикса подчеркивания. Стек вызовов должен быть выровнен по 16-байтовой границе (подробнее об этом позже). А при доступе к именованным переменным требуется префикс rel.

Соглашения о вызовах

Как мы узнали, что аргумент puts должен быть передан в RDI? Ответ: в отношении звонков соблюдается ряд соглашений.

Понял? Нет? Нужно больше примеров и практики.

Вот программа, иллюстрирующая, как нужно сохранять и восстанавливать регистры:

Смешение C и ассемблера

Эта программа представляет собой простую функцию, которая принимает три целочисленных параметра и возвращает максимальное значение.

Вот программа на C, которая вызывает функцию языка ассемблера.

Условные инструкции

  • s (знак)
  • z (ноль)
  • с (нести)
  • о (переполнение)

У условных инструкций есть три основные формы: j для условного перехода, cmov для условного перемещения и set для условного набора. Суффикс инструкции имеет одну из 30 форм: s ns z nz c nco no p npp pe po e nl le nleg ng ge nge na aae nae b nb be nbe .

Аргументы командной строки

Вы знаете, что в C main — это обычная старая функция, и у нее есть пара собственных параметров:

Как вы уже догадались, argc будет иметь значение rdi, а argv (указатель) — значение rsi. Вот программа, которая использует этот факт для простого вывода аргументов командной строки программе, по одному на строку:

Более длинный пример

Обратите внимание, что в библиотеке C аргументы командной строки всегда являются строками. Если вы хотите обрабатывать их как целые числа, вызовите atoi . Вот изящная программа для вычисления x y .

Инструкции с плавающей запятой

Аргументы с плавающей запятой помещаются в регистры xmm. Вот простая функция для суммирования значений в двойном массиве:

Обратите внимание, что инструкции с плавающей запятой имеют суффикс sd; это самый распространенный, но мы увидим некоторые другие позже. Вот программа на C, которая его вызывает:

Разделы данных

Текстовый раздел доступен только для чтения в большинстве операционных систем, поэтому вам может понадобиться раздел данных. В большинстве операционных систем раздел данных предназначен только для инициализированных данных, а у вас есть специальный раздел .bss для неинициализированных данных. Вот программа, которая усредняет аргументы командной строки, которые должны быть целыми числами, и отображает результат в виде числа с плавающей запятой.

Рекурсия

Как ни странно, для реализации рекурсивных функций не требуется ничего необычного. Вы просто должны быть осторожны, чтобы сохранить регистры, как обычно. Типичная стратегия — вталкивание и выталкивание рекурсивного вызова.

Пример вызывающего абонента:

Параллелизм SIMD

Вот функция, которая одновременно добавляет четыре числа с плавающей запятой:

Насыщенная арифметика

Вот пример. Он также иллюстрирует, как вы загружаете регистры XMM. Вы не можете загружать немедленные значения; вы должны использовать movaps для перемещения из памяти. Есть и другие способы, но в этом руководстве мы не рассмотрим все.

Графика

Локальные переменные и фреймы стека

Во-первых, прочитайте статью Эли Бендерски. Этот обзор более полный, чем мои краткие заметки.

При вызове функции вызывающая сторона сначала помещает параметры в правильные регистры, а затем выдает инструкцию вызова. Дополнительные параметры, помимо тех, которые охвачены регистрами, будут помещены в стек перед вызовом. Инструкция call помещает адрес возврата на вершину стека. Итак, если у вас есть функция

Тогда при входе в функцию x будет в edi, y будет в esi, а адрес возврата будет на вершине стека. Куда мы можем поместить локальные переменные? Простой выбор находится в самом стеке, но если у вас достаточно регистров, используйте их.

Если вы работаете на машине, поддерживающей стандартный ABI, вы можете оставить rsp там, где он есть, и получить доступ к «дополнительным параметрам» и локальным переменным непосредственно из rsp, например:

Итак, наша функция выглядит так:

Если бы наша функция выполняла еще один вызов, вам пришлось бы настроить rsp, чтобы в это время она не мешала.

В Windows вы не можете использовать эту схему, потому что, если произойдет прерывание, все, что выше указателя стека, будет замазано. Этого не происходит в большинстве других операционных систем, потому что есть «красная зона» в 128 байтов после указателя стека, которая защищена от таких вещей. В этом случае вы можете сразу освободить место в стеке:

поэтому наш стек выглядит так:

Вот функция. Обратите внимание, что мы должны не забыть заменить указатель стека перед возвратом!

Использование NASM в macOS

  • Этот формат объектного файла — macho64 , а не elf64 .
  • Номера системных вызовов совершенно разные.
  • Символы, используемые модулями, будут начинаться с префикса подчеркивания.
  • Похоже, компоновщик gcc в macOS не разрешает абсолютную адресацию, если вы не измените некоторые настройки. Поэтому добавляйте rel по умолчанию, когда вы ссылаетесь на помеченные ячейки памяти, и всегда используйте lea для получения адресов.
  • Кроме того, оказывается, что иногда в Linux требование выравнивания 16-битного стека не применяется, но оно всегда применяется в macOS.

Итак, вот средняя программа, написанная для macOS.

Использование NASM в Windows

  • Первые четыре целочисленных параметра передаются в RCX, RDX, R8 и R9.Остальные должны быть помещены в стек.
  • Вызываемый объект должен сохранять RBX, RBP, RDI, RSI, RSP, R12, R13, R14 и R15.
  • Передаются первые четыре параметра с плавающей запятой, как вы уже догадались, XMM0, XMM1, XMM2 и XMM3.
  • Возвращаемые значения идут в формате RAX или XMM0.

ВАЖНО. Есть одна вещь, которую очень трудно найти в любой документации: соглашение о вызовах x64 требует, чтобы вы выделяли 32 байта теневого пространства перед каждым вызовом и удаляли его после вашего вызова. Это означает, что ваша программа «hello world» выглядит так:

Вы заметили, что мы на самом деле зарезервировали 40 байт? Тридцать два байта теневого пространства — минимальное требование. В нашей основной функции мы вызываем другую функцию, поэтому наш стек должен быть выровнен по 16-байтовой границе. Когда вызывается main, адрес возврата (8 байт) был помещен в буфер обмена, поэтому мы должны «добавить» дополнительные 8 байтов в теневое пространство.

Читайте также: