MS Visual Studio 2010 как использовать созданный файл .asm

Я хотел бы спросить о чем-то, что я хочу попробовать с Visual Studio 2010.

Я создаю файл .asm из файла .cpp, установив опцию в "Assembler Output" в свойствах проекта → C/С++ → Output Files (/FA).

Мой вопрос: как я могу на следующем этапе использовать этот .asm сгенерированный файл, чтобы снова связать его с тем, не используя больше .cpp файл, в случае, если я хочу сделать некоторые изменения внутри файла .asm, а затем ссылку снова, сохраняя изменения, которые я сделал на уровне сборки.

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

Ответы

Ответ 2

Я сделал это недавно. Вот повторение ответа, который я дал здесь compile-assembly-output-generated-by-vc. Оказывается, вы все еще можете сделать это в 32-битном режиме в MSVC2012, но я думаю, что 64-битный режим безнадежен.

Для 32-битного режима вот что вы делаете.

Создайте пустой проект и исходный файл Source.cpp

 #include <stdio.h>
 int main() {
     printf("hello world\n");
     return 0;
 }
  • Правильно лижу свой проект и выберите "Настроить сборку" и
    выберите masm, как описано здесь http://www.masm32.com/board/index.php?topic=9231.0
  • В разделе С++/OutputFiles выберите Assembly Output/FA
  • Comipile в 32-разрядном режиме Режим деблокирования
  • Загрузите файл Source.asm в MSVC, чтобы просмотреть его. Это пока не сработает. Необходимы несколько изменений.
  • В С++/Оптимизация отключает всю оптимизацию программы (удаляет /GL). Это добавляет строку INCLUDELIB MSVCRT
  • В Linker/Advanced установите последний параметр "Изображение имеет безопасные обработчики исключений" на No (/SAFESEH:NO)
  • Теперь у вас должен быть файл Source.asm, который будет делать то же самое, что и файл Source.cpp. Скопируйте Source.cpp из каталога Release в тот же каталог, что и Source.cpp(чтобы он не удалялся при сборке/очистке).
  • Добавьте Source.asm(как существующий файл) в исходные файлы и удалите Source.cpp из сборки.
  • Перестроить, и вы должны увидеть "Hello World", не меняя никаких конвейерных линий вручную.

Я использовал это для более сложных функций. Обычно я делаю это на отдельном модуле и использую extern "C" в имени функции, чтобы удалить имя языка С++.