Всем привет! я долго искал статью на эту тему, но так как очень много кто использует GNU компилятор или линукс вариант написания, то мне это не подходит, эта статья призвана кратко разобрать основы inline ассемблера для С в MSVC вариации, также стоит отметить, что я буду разбирать все организационные моменты с расчетом на то, что вы уже несколько лет пользуйтесь Visual Studio и C/C++ в частности, хотя бы на уровне джуна-самоучки, коим я и являюсь, поэтому новичкам стоит гуглить некоторые моменты, еще так же стоит отметить, что на ассемблере я пишу крайне редко, поэтому иногда использую костыли, если вы нашли подобный подход и не согласны с ним, предложите свою версию в комментариях с аргументацией и я изменю код, еще важно отметить что я не хочу по 10 раз переписывать уже готовые хорошие статьи, и вместо своего пояснения иногда буду вставлять ссылки на отличные статьи, которые могут объяснить тему лучше, и при этом будут рабочими для нашего варианта, всем продуктивного изучения!
Начнем с настройки VS
перейдите в VS Installer, нажмите изменить текущую установленную версию, я использую community версию Visual Studio 2022, установите галочку на

Далее перейдите во кладку отдельные компоненты и через поиск найдите и установите галочку на этот компонент:

и нажмите изменить/modify, чтобы компоненты докачались, откройте измененную версию VS, создайте проект с шаблоном Консольное приложение С++, далее, придумайте имя проекта и впишите его расположение, снова кнопка далее, и создать
В обозревателе решений найдите созданный по умолчанию .cpp файл и удалите его, создайте новый пустой файл с названием main.c, нажмите на него в обозревателе решений правой кнопкой мыши, выберите свойства, найдите дополнительно

и в поле компилировать как выберете компилировать как код С (/TC)
(для особо пытливых умов, /TC означает или как Turbo C, далее прогуглить не сложно)
примените изменения

выберите вариант компиляции Debug x86, это обязательно, т.к. в x64 простой синтаксис MSVC ассемблера уже не распознается так как мы хотим, и там абсолютно другой подход

#include <stdio.h> typedef char byte; /* я часто использую тип данных byte, который в С обозначается char, что лично мне неудобно*/ int main() { __asm { } return 0; }
Теперь при нажатии сочетания клавиш CTRL+F5 проект должен корректно выполниться без отладки, напоминаю что если консоль сразу закрылась без ошибок, то просто добавьте перед return 0
строку system("pause");
, а если хотите почувствовать себя хакером то system("color A");
перед __asm {
Мы завершили настройку! Проверьте, что нет никаких ошибок и ждите следующего выпуска!
ссылка на оригинал статьи https://habr.com/ru/articles/894860/
Добавить комментарий