Использование Visual Studio 2008 для сборки, компоновки, отладки и выполнения ассемблерного кода MASM 6.11

StackOverflow https://stackoverflow.com/questions/112412

Вопрос

Я хотел бы использовать Visual Studio 2008 в максимально возможной степени при эффективной компиляции / связывании / сборке / etc кода, как если бы все эти процессы сборки выполнялись инструментами, поставляемыми с MASM 6.11.Точная версия MASM не имеет значения, пока она находится в диапазоне 6.x, поскольку именно ее мой колледж использует для обучения 16-разрядной сборке.

Я провел некоторые исследования на эту тему и пришел к выводу, что есть несколько вариантов:

  1. Перенастроите VS для вызова исполняемых файлов MASM 6.11 с теми же флагами и т.д., что и MASM 6.11 изначально.
  2. Создайте промежуточный пакетный файл (ы), который будет вызван VS, чтобы затем вызвать соответствующие команды для компоновщика MASM и т.д.
  3. Перенастроите встроенные в VS инструменты / правила сборки (ассемблер, компоновщик и т.д.), Чтобы обеспечить среду, идентичную той, которая используется MASM 6.11.

Вариант (2) был поднят, когда я понял, что опций, доступных в интерфейсе "Внешних инструментов" VS, может быть недостаточно для корректного вызова инструментов сборки MASM, поэтому пакетный файл для интерпретации строгого метода передачи аргументов VS может быть полезен, поскольку многое из того, что я узнал о том, как заставить это работать, связано с моим вызовом вручную ML.exe , LINK.exe, и т.д. из командной строки.

Ниже приведено несколько ссылок, которые могут оказаться полезными при ответе на мой вопрос.Пожалуйста, имейте в виду, что я прочитал их все, и ни одно из них не является реальным решением.Я могу только надеяться, что мое указание MASM 6.11 не помешает кому-либо дать, возможно, более обобщенный ответ.

Метод, аналогичный варианту (2), но с пользователями в потоке невозможно связаться:
http://www.codeguru.com/forum/archive/index.php/t-284051.html
(кроме того, у меня есть сомнения по поводу необходимости промежуточного пакетного файла)

Устаревшее объяснение на мой вопрос:
http://www.cs.fiu.edu /~downeyt/cop3402/masmaul.html

Вероятно, самое близкое, к чему я пришел к окончательному решению, но относится к набору инструментов из чего-то помимо MASM, также использующих пакетный файл:
http://www.kipirvine.com/asm/gettingStarted/index.htm#16-bit

Я прошу прощения, если моя терминология для инструментов, используемых на каждом этапе процесса code -> exe, отключена, но поскольку я пытаюсь воспроизвести все этапы между завершением написания кода и генерацией исполняемого файла, я не думаю, что это имеет большое значение.

Это было полезно?

Решение

Файл правил MASM находится по адресу (удаление 32-разрядной системы (x86)):

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCProjectDefaults\masm.rules

Скопируйте этот файл в каталог вашего проекта и добавьте его в пользовательские правила сборки для вашего проекта.Затем "Изменить файл правила ...", выберите правило сборки MASM и "Изменить правило сборки ...".

Добавление свойства:

  • Тип пользовательского свойства: Строка
  • Значение по умолчанию: *.inc
  • Описание: Добавьте дополнительные зависимости от файлов MASM.
  • Отображаемое имя: Дополнительные зависимости
  • Доступен только для чтения: Ложь
  • Имя: Дополнительные зависимости
  • Название страницы свойств: Общая информация
  • Переключатель: [значение]

Установите значение Дополнительных зависимостей равным [Дополнительные зависимости].Теперь сборка должна автоматически обнаруживать изменения в *.inc, и вы можете отредактировать свойства для отдельного asm-файла, чтобы указать другие.

Другие советы

Вы можете создать проект makefile.В Visual Studio в разделе File / New / Project выберите Visual C++ / Makefile project.

Это позволяет вам запустить произвольную команду для создания вашего проекта.Это не обязательно должен быть C / C ++.Это даже не обязательно должен быть традиционный файл NMake makefile.Я использовал его для компиляции драйвера, используя пакетный файл и используя скрипт NAnt.

Должно быть довольно легко заставить его запустить набор инструментов MASM 6.x.

Я бы предложил определить пользовательские правила сборки в зависимости от расширения файла.(Visual Studio 2008, по крайней мере, в профессиональной версии, может генерировать файлы .rules, которые можно распространять).Там вы можете определить пользовательские инструменты сборки для asm-файлов.Используя этот подход, вы должны быть в состоянии оставить этап компоновки как есть.

Давным-давно мы использовали MASM32 текст ссылки в качестве среды разработки, помогающей студентам осваивать ассемблер.Вы могли бы проверить их пакетные файлы, что они делают для сборки и связывания.

вместо пакетных файлов почему бы не использовать пользовательский шаг сборки, определенный в файле?

Если вы собираетесь использовать Visual Studio, не могли бы вы предоставить им скелетный проект на C / C ++ с точкой входа для консольного приложения, вызывающего функцию, у которой есть пустой блок встроенной сборки, и позволить им заполнить в нем свои результаты?

Почему бы вам не воспользоваться путеводителем Ирвина?Библиотека Irvine хороша, и если вы хотите, вы можете игнорировать ее и работать с Windows procs напрямую.Я искал руководство, подобное этому, и Irvine's было лучшим решением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top