Ассемблер
Как запустить программу на ассемблере
Чтобы запустить программу на ассемблере, нужно пройти минимум два шага: собрать исходный файл .asm ассемблером и получить исполняемый файл или объектный файл для линковки. .asm — это текст с инструкциями. Он не запускается двойным кликом, пока вы не превратили его в формат, понятный операционной системе
Общая схема
program.asm -> ассемблер -> program.o -> линкер -> program.exe или program
Иногда ассемблер сразу делает исполняемый файл. Например, FASM может собрать простой пример напрямую. NASM чаще создает объектный файл, который затем передается линкеру
Вариант NASM на Linux
Пример команд:
nasm -f elf64 hello.asm -o hello.o
ld hello.o -o hello
./hello
Здесь:
nasmсобирает исходник;-f elf64задает формат объектного файла;ldсвязывает объектный файл;./helloзапускает готовую программу.
Если программа ничего не выводит, проверьте код выхода:
echo $?
Для первых упражнений это нормальный способ убедиться, что программа выполнилась
Вариант MASM в Visual Studio
На Windows с Visual Studio используется MASM. Обычно удобнее создать проект C/C++ и добавить .asm-файл, включив поддержку MASM в настройках сборки. Для 64-битного кода используется ml64.exe
Важный момент: пример из NASM нельзя просто вставить в MASM. Отличается синтаксис, директивы и оформление секций
Вариант TASM в DOSBox
Если у вас учебное задание под TASM, часто используют DOSBox:
tasm program.asm
tlink program.obj
program.exe
Такой способ подходит для старых 16-битных примеров. На современной Windows такие программы напрямую обычно не запускаются, поэтому нужен DOSBox
Вариант FASM
FASM часто позволяет собрать исполняемый файл одной командой:
fasm program.asm program.exe
Это удобно для первых экспериментов, но все равно нужно следить, под какую ОС и формат написан код
Почему программа не запускается
Частые причины:
- вы пытаетесь открыть
.asm, а не.exe; - код написан под другой ассемблер;
- выбран неправильный формат: 16-bit, 32-bit или 64-bit;
- нет линковки;
- программа собрана под Linux, но запускается в Windows;
- пример требует DOSBox, а вы запускаете его в обычной командной строке.
Как проверить путь
Сначала определите три вещи:
- Каким ассемблером написан пример: NASM, MASM, FASM, TASM.
- Под какую систему: Linux, Windows, DOS, микроконтроллер.
- Что должно получиться: объектный файл, exe или raw binary.
После этого выбирайте команду запуска
Частые ошибки
Запускают исходник
Файл .asm нужно сначала собрать. Он не является программой
Смешивают учебные примеры
TASM-код для DOSBox не обязан работать в NASM на Linux
Забывают линковку
Если после сборки получился .o или .obj, это еще не всегда исполняемый файл
Что почитать дальше по ассемблеру
Если нужен общий маршрут по теме, откройте рубрику ассемблеру. Для соседних задач пригодятся эти разборы:
- Как запустить программу на ассемблере в DOSBox
- Как запустить код на ассемблере
- Как написать в Linux программу на ассемблере x64: Hello World
- CMP в ассемблере
Как проверить результат на практике
Для ассемблера важно сначала понять, под какую среду написан пример: DOSBox/TASM, Linux x64/NASM, Visual Studio/MASM или микроконтроллер. Один и тот же смысл может записываться разным синтаксисом, поэтому не переносите команды между средами вслепую. Создайте отдельную папку для примера, сохраните файл с расширением .asm, выполните сборку именно тем инструментом, который указан в уроке, и сравните вывод или состояние регистров с ожидаемым результатом
Если пример не собирается, читайте первую ошибку ассемблера: обычно она указывает на строку, неизвестную инструкцию, неверную метку, неправильную секцию или конфликт синтаксиса. Исправляйте одну ошибку за раз. В ассемблере это особенно важно, потому что маленькая опечатка в метке, регистре или размере операнда может полностью изменить поведение программы