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++» проверка поле проверка box рядом с 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]
Masm ассемблер для 7 винды 64 бит
Есть ли такой и где его скачать? (Именно масм, а не другие.) Я решил изучать ассемблер и в книгах в основном авторы пишут на масм ассемблере, а я для своей системы нашел только фасм ассемблер, если масм код вставить в фасм, то будет ошибка, вот и ищу масм ассеблер для 7 винды 64 битной. (Асмы, фасмы, запутался уже.)
Отслеживать
30.9k 13 13 золотых знаков 96 96 серебряных знаков 157 157 бронзовых знаков
задан 4 дек 2011 в 11:15
11 1 1 серебряный знак 2 2 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
есть и 32-битный , и 64-битный. Видел недавно в магазине книжку про 64-битный MASM.
Кажется, они ОБА входят в Visual Studio 2008 и 2010.
MASM 32 можно скачать здесь
Отслеживать
ответ дан 4 дек 2011 в 11:31
23.9k 2 2 золотых знака 37 37 серебряных знаков 69 69 бронзовых знаков
- ассемблер
- x86-64
- masm
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как условно включить файлы MASM .asm в зависимости от платформы / конфигурации (32/64-бит)
Я использую Visual Studio 2010. У меня есть два разных файла сборки MASM: один для 32-разрядных сборок, а другой — для 64-разрядных. Соответствующая часть моего .vcxproj выглядит так:
Моя проблема заключается в следующем: единственный файл, показанный в обозревателе решений, — это файл для любой конфигурации ( Win32 / x64 ), выбранной при открытии Visual Studio . Даже выгрузки и перезагрузки проекта недостаточно — я должен закрыть и снова открыть визуальную студию, чтобы отобразился другой файл.
Я бы предпочел, чтобы оба файла отображались постоянно, независимо от выбранной конфигурации. Я мог бы жить с изменением видимого элемента, в зависимости от того, какое решение выбрано.
Пример:
Visual Studio открывается с выбранной конфигурацией x64 . Отображается только asmcode64.asm :

Когда я перехожу к конфигурации Win32 (через раскрывающийся список «Платформы решений»), asmcode32.asm по-прежнему не отображается. Опять же даже разгрузка + перезагрузка не делает его видимым.
Не снимая выделения с Win32 , я могу закрыть Visual Studio и снова открыть ее. Только сейчас asmcode32.asm видно:

Что еще я могу сделать с моим файлом .vcxproj , чтобы показать оба файла?
Ошибка при вызове masm64 функции из C
я пытаюсь скомпилировать masm64 функцию и вызвать её из C в visual studio 2019. При компиляции отдельно ассемблерного файла всё проходит удачно, однако при попытке подружить ассемблер с C возникают ошибки. Что они означают и как можно их исправить? (Я почти уверен, что проблема в настройках проекта)

Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
задан 21 мая 2021 в 21:21
Вы бы все же использовали, как и положено, текст, а не копии экранов. Прочтите хотя бы вводную страницу сайта — вы же даже этого не сделали.
22 мая 2021 в 5:42
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Ну как бы вам сказать. Есть переводчик с английского, который знает только английский. Есть такой же француз. Вы даете каждому свой текст, они переводят, далее эти два текста складываются в один большой, все нормально.
Это аналог компиляторов языков ассемблера и С в объектный файл, который потом собирается в одну программу.
Но если вы дадите переводчику текст, в котором половина английская, половина французская. Переводчик просто скажет — «а тут идет не пойми что, это я не знаю, ошибка перевода, это не английское слово, не английская грамматика».
Что вам и говорит компилятор.
Максимум, что вы можете использовать в исходном тексте С (кстати, почему в С? вы же компилируете С++) — это ассемблерные вставки (В VC++ — __asm ), со всеми их ограничениями.