Ассемблер
Как запустить ассемблер в Visual Studio
Чтобы запустить ассемблер в Visual Studio, создайте C++ проект, включите MASM Build Customization, добавьте .asm-файл, напишите ассемблерную процедуру и вызовите ее из C++. В Visual Studio ассемблер обычно не запускают как отдельную кнопку «Run asm», а собирают вместе с проектом
Быстрый порядок действий
- Откройте Visual Studio Installer и проверьте C++ workload.
- Создайте C++ Console App.
- В проекте включите
Build Customizations -> masm. - Добавьте файл
math.asm. - Напишите процедуру.
- Объявите ее в
main.cpp. - Нажмите
BuildилиStart Debugging.
Минимальный asm-файл
math.asm:
.code
AddTwo PROC
mov eax, ecx
add eax, edx
ret
AddTwo ENDP
END
main.cpp:
#include <iostream>
extern "C" int AddTwo(int a, int b);
int main() {
std::cout << AddTwo(2, 5) << std::endl;
}
Если все настроено правильно, программа выведет:
7
Как понять, что .asm собрался
Если Visual Studio ругается на unresolved external symbol AddTwo, значит C++ видит объявление, но linker не нашел реализацию. Частые причины:
.asm-файл не участвует в сборке;- MASM Build Customization не включен;
- имя процедуры не совпадает;
- забыли
extern "C"в C++; - проект собирается не под ту платформу.
Как отладить
Поставьте breakpoint в C++ перед вызовом AddTwo, затем используйте Step Into. Также откройте окна регистров и дизассемблирования. Для x64 Windows первые аргументы будут в rcx и rdx, поэтому в примере используются ecx и edx для int
Если Step Into не заходит в asm-файл, проверьте настройки отладки и участие файла в сборке
Запуск через командную строку
Если вы хотите запускать MASM руками, используйте Developer Command Prompt, где доступны ml и ml64. Но для новичка проще начать с проекта Visual Studio, потому что IDE сама связывает объектные файлы
Что делать, если пример не запускается
Проверьте платформу проекта: x64 или x86. Для x64 используйте ml64 и x64-соглашение вызова. Для x86 примеры могут использовать другие регистры и другой способ передачи аргументов. Затем откройте свойства .asm-файла и убедитесь, что это не просто текстовый файл, а элемент, который обрабатывается MASM
Если Visual Studio собирает проект, но окно сразу исчезает, добавьте вывод в C++ или запустите проект из терминала. Это уже не ошибка ассемблера, а обычное поведение консольного приложения
Частые ошибки
Нажимают Run на .asm-файле
Запускается проект, а не отдельный исходник. .asm нужно собрать
Не совпадают имена
AddTwo PROC и extern "C" int AddTwo(...) должны совпадать по имени
Копируют 32-битный пример в x64
Проверьте платформу проекта: x86 или x64
Не включили masm customization
Без этого .asm может быть обычным текстовым файлом внутри проекта
Что почитать дальше по ассемблеру
Если нужен общий маршрут по теме, откройте рубрику ассемблеру. Для соседних задач пригодятся эти разборы:
- Как установить ассемблер в Visual Studio
- Как установить ассемблер в Visual Studio Code
- Ассемблер онлайн: где запустить первый код
- Как писать на ассемблере в Visual Studio