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 см. в справочнике по командной строке ML и ML64.
Встроенный сборщик или использование ключевого ASM
слова не поддерживается для целевых объектов x64 или ARM64. Чтобы перенести код x86, использующий встроенный сборщик в x64 или ARM64, можно преобразовать код в C++, использовать встроенные компоненты компилятора или создать исходные файлы на языке сборщика. Компилятор Microsoft C++ поддерживает встроенные функции, позволяющие использовать специальные инструкции по функциям, например привилегированное, битовое сканирование или тестирование, заблокированные и т. д., как можно ближе к кроссплатформенной манере. Сведения о доступных встроенных функций см. в разделе "Встроенные компоненты компилятора".
Добавление файла на языке сборки в проект Visual Studio C++
Система проектов Visual Studio поддерживает файлы языка сборщика, созданные с помощью MASM в проектах C++. MASM полностью поддерживает исходные файлы на языке сборки x64 и создает их в файлы объектов. Затем эти файлы объектов можно связать с кодом C++, созданным для целевых объектов x64. Это один из способов преодолеть отсутствие встроенного сборщика x64.
Добавление файла на языке сборки в существующий проект Visual Studio C++
Выберите проект в обозревателе решений. В строке меню выберите "Проект", "Сборка настроек".
В диалоговом окне "Файлы настройки сборки Visual C++" установите флажок рядом с masm(.targets,.props). Нажмите кнопку "ОК ", чтобы сохранить выделение и закрыть диалоговое окно.
В строке меню выберите "Проект", "Добавить новый элемент".
В диалоговом окне "Добавление нового элемента" выберите файл C++ (.cpp) в центральной области. В элементе управления "Изменение имени" введите новое имя файла с расширением
.asm
вместо.cpp
него. Нажмите кнопку "Добавить", чтобы добавить файл в проект и закрыть диалоговое окно.
Создайте код на языке сборки в добавленном .asm
файле. При сборке решения вызывается сборщик MASM для сборки .asm
файла в файл объекта, который затем связан с проектом. Чтобы упростить доступ к символам, объявите функции сборщика как extern "C"
в исходном коде C++ вместо использования соглашений об оформлении имен C++ в исходных файлах на языке сборщика.
Директивы ml64-specific
В исходном коде для сборщика можно использовать следующие директивы ml64, предназначенные для x64:
Директива 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]
См. также
Справочные материалы по ассемблеру Microsoft Macro Assembler