Ассемблер

Как запустить код на ассемблере

Чтобы запустить код на ассемблере, сначала определите платформу и инструмент: 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 может остаться в папке. Убедитесь, что новый файл действительно создан

Что почитать дальше по ассемблеру

Если нужен общий маршрут по теме, откройте рубрику ассемблеру. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x