Как добавить поддержку masm в visual studio 2008
Перейти к содержимому

Как добавить поддержку masm в visual studio 2008

  • автор:

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++

  1. Выберите проект в обозревателе решений. В строке меню выберите «Проект«, «Сборка настроек«.
  2. В диалоговом окне «Файлы настройки сборки Visual C++» проверка поле проверка box рядом с masm(.targets,.props). Нажмите кнопку «ОК «, чтобы сохранить выделение и закрыть диалоговое окно.
  3. В строке меню выберите «Проект«, «Добавить новый элемент«.
  4. В диалоговом окне «Добавление нового элемента» выберите файл 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 :

asmcode64.asm is shown

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

Не снимая выделения с Win32 , я могу закрыть Visual Studio и снова открыть ее. Только сейчас asmcode32.asm видно:

enter image description here

Что еще я могу сделать с моим файлом .vcxproj , чтобы показать оба файла?

Ошибка при вызове masm64 функции из C

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

Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
задан 21 мая 2021 в 21:21

Вы бы все же использовали, как и положено, текст, а не копии экранов. Прочтите хотя бы вводную страницу сайта — вы же даже этого не сделали.

22 мая 2021 в 5:42

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Ну как бы вам сказать. Есть переводчик с английского, который знает только английский. Есть такой же француз. Вы даете каждому свой текст, они переводят, далее эти два текста складываются в один большой, все нормально.

Это аналог компиляторов языков ассемблера и С в объектный файл, который потом собирается в одну программу.

Но если вы дадите переводчику текст, в котором половина английская, половина французская. Переводчик просто скажет — «а тут идет не пойми что, это я не знаю, ошибка перевода, это не английское слово, не английская грамматика».

Что вам и говорит компилятор.

Максимум, что вы можете использовать в исходном тексте С (кстати, почему в С? вы же компилируете С++) — это ассемблерные вставки (В VC++ — __asm ), со всеми их ограничениями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *