Ассемблер
Как запустить код на ассемблере
Чтобы запустить код на ассемблере, сначала определите платформу и инструмент: NASM для Linux x64 или Visual Studio Code, MASM для Visual Studio, TASM для старых DOS-задач через DOSBox. Затем соберите .asm в объектный файл, свяжите его через linker и запускайте уже готовую программу. Сам .asm-файл не запускается как обычный скрипт
Почему нельзя просто открыть .asm
Файл .asm — это текст. В нем написаны инструкции в человечески читаемом виде:
mov eax, 1
add eax, 2
Процессор выполняет не этот текст, а машинный код. Поэтому нужен assembler, который переведет текст в объектный файл, а затем linker, который соберет исполняемый файл
Вариант 1: Linux x64 и NASM
Минимальная схема:
nasm -f elf64 hello.asm -o hello.o
ld hello.o -o hello
./hello
Если команда nasm не найдена, установите NASM:
sudo apt install nasm binutils
Проверьте версию:
nasm -v
Здесь hello.asm — исходник, hello.o — объектный файл, hello — запускаемая программа
Вариант 2: Windows и MASM
В Visual Studio ассемблерный код обычно запускают внутри C++ проекта. Нужно установить C++ workload, включить MASM Build Customization, добавить .asm-файл и собрать проект
Для проверки MASM в Developer Command Prompt:
ml64
Если команда не находится, вероятно, открыт обычный терминал, а не специальная командная строка Visual Studio
Вариант 3: DOSBox и TASM
Для учебных DOS-примеров:
mount c c:\asm
c:
set path=c:\bin
tasm hello.asm
tlink hello.obj
hello.exe
Такой путь нужен для старых 16-битных программ. Код с int 21h и .model small не является Linux x64 кодом
Как понять, где ошибка
Если ошибка появилась при команде nasm, tasm или ml64, проблема обычно в синтаксисе, директивах или платформе примера. Если ошибка появилась при linking, проверьте точки входа, имена функций, global, extern и наличие объектного файла. Если программа запускается, но результат неверный, проблема уже в логике: регистры, флаги, стек, адреса
Полезная диагностика:
ls -l hello*
file hello
На Windows:
dir hello*
Проверьте, что после сборки появился новый исполняемый файл, а не запускается старый результат
Что делать, если код из интернета не запускается
Сначала определите, под что он написан:
syscall,rax,rdi,rsi— похоже на Linux x64;.model small,int 21h— DOS/TASM;.code,PROC,ENDP— часто MASM;section .text,global _start— часто NASM.
Если пример написан под другую среду, команда сборки из вашего проекта не обязана работать
Частые ошибки
Запускают объектный файл
.o или .obj — промежуточный файл. Запускается исполняемый файл
Не используют linker
Assembler часто не создает готовую программу сам. Нужен ld, gcc, link или tlink
Путают платформы
Linux, Windows и DOS требуют разных примеров и разных команд запуска
Смотрят не тот файл
После ошибки сборки старый .exe может остаться в папке. Убедитесь, что новый файл действительно создан
Что почитать дальше по ассемблеру
Если нужен общий маршрут по теме, откройте рубрику ассемблеру. Для соседних задач пригодятся эти разборы:
- Ассемблер онлайн: где запустить первый код
- Как выглядит код на ассемблере
- Как запустить программу на ассемблере
- Как запустить программу на ассемблере в DOSBox