Как написать программу на ассемблере в visual studio

Язык ассемблера + Visual Studio 2019 — решение среды языка ассемблера в Visual Studio 2019

основная концепция

MASM: Microsoft Assembler (обычно известный как MASM) — это инструмент для разработки промышленного программного обеспечения, который поддерживается и обновляется основными поставщиками операционных систем более 30 лет. Он никогда не подвергался смягчению или компрометации как удобный для пользователя инструмент и разработан для профессиональных программистов, которые могут использовать его для кода уровня операционной системы и высокопроизводительных объектных модулей, исполняемых файлов и динамических библиотек.

MASM32 SDK: MASM32 SDK (далее MASM32) — это независимый проект, призванный упростить работу опытных программистов, начинающих программировать на ассемблере. Это сложная и требовательная форма программирования, которая требует высокой точности кодирования и требует хорошего понимания мнемоники Intel и архитектуры процессора x86, используемых в среде операционной системы Windows, но усилия были Обеспечивает небывалую гибкость и производительность. Лучший компилятор для достижения достаточно высокого уровня знаний. Чтобы

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

Официальный веб-сайт:http://www.masm32.com/

решение

1. УстановкаMASM32

скачать

Установка

Папка masm должна содержать как минимум эти 4 файла:masm.exe, link.exe, debug.exe, exe2bin.exe。

среди них:

masm.exe: ассемблер, используемый для сборки исходной программы (.asm) для получения целевой программы (.obj);

link.exe: программа-ссылка, используемая для подключения к целевой программе для получения исполняемой программы (.exe);

debug.exe: программа отладки, используемая для отладки исполняемых программ.

Во-вторых, настройте Visual Studio 2019

Откройте Visual Studio 2019

Создать новый проект

Изменить зависимости

Щелкните проект правой кнопкой мыши и выберите «Сборка зависимостей — сборка по выбору».

КонфигурацияMASM32

Щелкните правой кнопкой мыши проект и выберите свойства проекта.

Создание проекта в Visual Studio с ассемблерным модулем

контрольная работа

Создать исходный файл

Тестовый код

TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. ; Last update: 2/1/02 INCLUDELIB kernel32.lib .MODEL flat,stdcall ;.code ExitProcess PROTO, ; exit program dwExitCode:DWORD ; return code .data .code main PROC mov eax,10000h ; EAX = 10000h add eax,40000h ; EAX = 50000h sub eax,20000h ; EAX = 30000h push 0h call ExitProcess main ENDP END main

Результаты теста

Решения среды ассемблера в других версиях Visual Studio

Источник: russianblogs.com

Ассемблер для Windows используя Visual Studio

Многие из нас изучали ассемблер в университете, но почти всегда это ограничивалось простыми алгоритмами под DOS. При разработке программ для Windows может возникнуть необходимость написать часть кода на ассемблер, в этой статье я хочу рассказать вам, как использовать ассемблер в ваших программах под Visual Studio 2005.

Читайте также:
Как называлась программа преобразований разработанная пестелем

image

Создание проекта

В статье мы рассмотрим как вызывать ассемблер из С++ кода и обратно, передавать данные, а также использовать отладчик встроенный в Visual Studio 2005 для отладки кода на ассемблер.

Для начала нам нужно создать проект. Включаем Visual Studio, выбираем File > New > Project. В Visual Studio нет языка ассемблер в окне выбора типа проекта, поэтому создаем С++ Win32 проект. В окне настроек нового проекта выбираем «Empty Project».

image

По умолчанию Visual Studio не распознает файлы с кодом на ассемблер. Для того чтобы включить поддержку ассемблер нам необходимо настроить в проекте условия сборки указав какой программой необходимо компилировать файлы *.asm. Для этого выбираем пункт меню «Custom Build Rules. ».

image

В открывшемся окне мы можем указать специальные правила компиляции для различных файлов, Visual Studio 2005 уже имеет готовое правило для файлов *.asm, нам необходимо лишь включить его, установив напротив правила «Microsoft Macro Assembler» галочку.

image

Добавление исходного кода

Перейдем к написанию исходного кода нашего проекта. Начнем с добавления исходного кода на c++. Добавим новый файл в папку Source Files. В качестве Template выбираем C++ File и вводим желаемое имя файла, например main.cpp. Напишем функцию, которая будет считывать имя введенное пользователем, оформив это в виде функции readName() которая будет возвращать ссылку на считанное имя. Мы получим примерно следующее содержимое файла:

#include void main () < printf(«Hello, what is your name?n»); >void* readName()

Теперь, когда мы знаем имя пользователя мы можем вывести приветствие, его будет выводить функция sayHello() которую мы напишем на ассемблер, чтобы использовать эту функцию сначала мы должны указать что она будет определена в другом файле, для этого добавим блок к main.cpp:

extern «C»

Этот блок говорит компилятору, что функция sayHello() будет объявлена в другом файле и будет иметь правила вызова «C». Компилятор C++ искажает имена функций так, что указание правил вызова обязательно. Кроме того мы хотим использовать функцию readName() из функции sayHello(), для этого необходимо добавить extern «C» перед определением функции readName(), это позволит вызывать эту функцию из других файлов используя правила вызова «C».

Пришло время добавить код на ассемблер, для этого добавим в Source Folder новый файл. Выбираем тип Text File (.txt) и в поле название заменяем .txt на .asm, назовем наш файл hello.asm. Объявим функцию sayHello() и укажем внешние функции, которые мы хотим использовать. Получим следующий код:

.686 .MODEL FLAT, C .STACK .DATA helloFormat BYTE «Hello %s!»,10,13,0 .CODE readName PROTO C printf PROTO arg1:Ptr Byte, printlist: VARARG sayHello PROC invoke readName invoke printf, ADDR helloFormat, eax ret sayHello ENDP END

Читайте также:
Программа MSI для видеокарты как настроить

Теперь мы можем запустить проект, для этого просто выбираем Debug > Start Without Debugging или нажимаем комбинацию Ctrl-F5. Если все сделано верно, вы увидите окно программы:

image

Немного усложним задачу, попробуем написать на ассемблер функцию принимающую параметр и возвращающую значение. Для примера напишем функцию calcSumm() которая будет принимать целое число и возвращать сумму его цифр. Изменим наш код на С++ добавив в него информацию о функции calcSumm, ввод числа и собственно вызов функции.

Добавим функцию в файл hello.asm, возвращаемое значение помещается в eax, параметры объявляются после ключевого слова PROC. Все параметры можно использовать в коде процедуры, они автоматически извлекутся из стека. Также в процедурах можно использовать локальные переменные. Вы не можете использовать эти переменные вне процедуры. Они сохранены в стеке и удаляются при возврате из процедуры:

Запустив проект мы увидим следующий результат выполнения:

image

Отладка

Конечно в данной задаче нет ничего сложного и она вовсе не требует использования ассемблер. Более интересным будет рассмотреть, а что же нам дает Visual Studio для разработки на ассемблер. Попробуем включить режим отладки и установим точку остановки в hello.asm, запустим проект, мы увидим следующее:

image

Окно Disassembly (Debug > Windows > Disassembly) показываем команды ассемблер для данного объектного файла. Код который мы написали на С++ показывается черным цветом. Disassembled code показывается серым после соответствующего ему кода на C++/ассемблер. Окно Disassembly позволяет отлаживать код и осуществлять stepping по нему.

Окно регистров (Debug > Windows > Registers) позволяет посмотреть значение регистров.

Окно памяти (Debug > Windows > Memory) позволяет посмотреть дамп памяти, слева мы видим шестнадцатеричные адрес, справа шеснадцатеричные значения соответствующих ячеек памяти, можно перемещаться, вводя адрес в соответствующее поле в верху окна.

Источник: habr.com

MASM для x64 (ml64.exe)

Visual Studio включает как 32-разрядные, так и 64-разрядные размещенные версии MASM (ассемблер макросов Майкрософт) для целевого кода x64. Называется ml64.exe, это ассемблер, который принимает язык ассемблера x64. Программы командной строки MASM устанавливаются при выборе рабочей нагрузки C++ во время установки Visual Studio. Средства MASM недоступны для отдельной загрузки.

Инструкции по скачиванию и установке копии Visual Studio см. в разделе Установка Visual Studio. Если вам нужны только средства командной строки, а не полная интегрированная среда разработки, скачайте средства сборки для Visual Studio.

Чтобы использовать ml64.exe в командной строке, запустите командную строку разработчика для целевых объектов x64. Командная строка разработчика задает необходимый путь и другие переменные среды. Сведения о запуске командной строки разработчика см. в статье Создание кода C/C++ в командной строке.

Сведения о параметрах командной строки ml64.exe см. в справочнике по Command-Line ML и ML64.

Читайте также:
Настройки программы Почта на iPhone

Встроенный ASM ассемблер или использование ключевое слово не поддерживается для целевых объектов x64 или ARM64. Чтобы перенести код x86, использующий встроенный ассемблер, в x64 или ARM64, можно преобразовать код в C++, использовать встроенные функции компилятора или создать исходные файлы на языке ассемблера. Компилятор Microsoft C++ поддерживает встроенные функции, позволяющие использовать специальные инструкции, например привилегированное, битовое сканирование или тестирование, interlocked и т. д., максимально близко к кроссплатформенным способом. Сведения о доступных встроенных возможностях см. в разделе Встроенные функции компилятора.

Добавление файла языка ассемблера в проект Visual Studio C++

Система проектов Visual Studio поддерживает файлы языка ассемблера, созданные с помощью MASM в проектах C++. MASM полностью поддерживает исходные файлы на языке ассемблера x64 и создает их в объектные файлы. Затем можно связать эти объектные файлы с кодом C++, созданным для целевых объектов x64. Это один из способов преодолеть отсутствие встроенного ассемблерного ассемблеров x64.

Добавление файла языка ассемблера в существующий проект Visual Studio C++

  1. Выберите проект в обозревателе решений. В строке меню выберите Проект, Настройки сборки.
  2. В диалоговом окне Файлы настройки сборки Visual C++ проверка флажок рядом с masm(.targets,.props). Нажмите кнопку ОК , чтобы сохранить выделенный фрагмент и закрыть диалоговое окно.
  3. В строке меню выберите Проект, Добавить новый элемент.
  4. В диалоговом окне Добавление нового элемента выберите файл C++ (.cpp) в центральной области. В элементе управления Изменение имени введите новое имя файла с расширением .asm вместо .cpp . Нажмите кнопку Добавить , чтобы добавить файл в проект и закрыть диалоговое окно.

Создайте код языка ассемблера в файле, .asm который вы добавили. При сборке решения вызывается ассемблер MASM для сборки .asm файла в объектный файл, который затем связывается с проектом. Чтобы упростить доступ к символам, объявите функции ассемблера как extern «C» в исходном коде C++, а не используйте соглашения об оформлении имен C++ в исходных файлах языка ассемблера.

Директивы ml64

В исходном коде на языке ассемблера, предназначенном для x64, можно использовать следующие директивы ml64:

Директива PROC также обновлена для использования с ml64.exe.

32-разрядный режим адреса (переопределение размера адреса)

MASM выдает переопределение размера адреса 0x67, если операнд памяти содержит 32-разрядные регистры. Например, в следующих примерах создается переопределение размера адреса:

mov rax, QWORD PTR [ecx] mov eax, DWORD PTR [ecx*2+r10d] mov eax, DWORD PTR [ecx*2+r10d+0100h] prefetch [eax] movnti rax, QWORD PTR [r8d]

MASM предполагает 64-разрядную адресацию, если 32-разрядное смещение отображается только как операнд памяти. В настоящее время нет поддержки 32-разрядной адресации с такими операндами.

Наконец, при смешивании размеров регистров в операнде памяти, как показано в следующем коде, возникает ошибка.

mov eax, DWORD PTR [rcx*2+r10d] mov eax, DWORD PTR [ecx*2+r10+0100h]

Источник: learn.microsoft.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru