Подтвердить что ты не робот

Компиляция сборки в Visual Studio

Как скомпилировать код сборки с помощью Visual Studio?

Я хочу скомпилировать и запустить исходный файл сборки в Visual Studio 2010.

Я создал проект Visual C++ и вставил некоторый код сборки в файл code.asm:

.586              ;Target processor.  Use instructions for Pentium class machines
.MODEL FLAT, C    ;Use the flat memory model. Use C calling conventions
.STACK            ;Define a stack segment of 1KB (Not required for this example)
.DATA             ;Create a near data segment.  Local variables are declared after
                  ;this directive (Not required for this example)
.CODE             ;Indicates the start of a code segment.

clear PROC
   xor eax, eax 
   xor ebx, ebx 
   ret 
clear ENDP 
END

Однако проблема заключается в том, когда вы пытаетесь скомпилировать это, вы получаете:

LINK : error LNK2001: unresolved external symbol _mainCRTStartup

Я пошел и masm.targets настройку сборки masm.targets (щелкните правой кнопкой мыши проект> Построить настройки..), но безрезультатно.

4b9b3361

Ответ 1

Мне кажется, что пользовательские правила сборки для файлов .asm не включены. Щелкните правой кнопкой мыши проект, пользовательские правила сборки, отметьте "Microsoft Macro Assembler". С директивой "END clear" и отключением инкрементной привязки я получаю чистую сборку.

Он отличается от VS2010:

  • Щелкните правой кнопкой мыши Проект, Настроить настройки, отметьте " masm".
  • Щелкните правой кнопкой мыши файл .asm, Свойства, измените Тип элемента на Макросборник Microsoft.

Ответ 2

Командная строка:

Скомпилируйте код с помощью

ml /c /Cx /coff code.asm

В качестве вывода вы получите код .obj.

Ссылка на:

link code.obj /SUBSYSTEM:console /out:go.exe /entry:clear

Теперь вы можете запустить go.exe.

В качестве альтернативы, сделайте все за один раз:

ml /Cx /coff code.asm /link /SUBSYSTEM:console /link /entry:clear

Visual Studio (не решено)

Ответ 3

В Visual Studio включен макросмастер MASM. Меньшие фрагменты кода ассемблера часто записываются в встроенная сборка в программе на C или С++.

Чтобы интегрировать файл ассемблера в проекте Visual Studio, создайте обычный проект C/С++ (командная строка или графический интерфейс) и просто добавьте файл, заканчивающийся на .asm, в список исходных файлов.

Чтобы указать как точку входа, выполните следующие инструкции:

  • Откройте страницу свойств проекта диалоговое окно. Для получения дополнительной информации см. настройка Свойства проекта Visual С++.

  • Щелкните папку Linker.

  • Перейдите на страницу Дополнительные свойства.

  • Измените свойство Entry Point.

(Это было взято из документации Visual Studio.)

Я могу подтвердить инструкцию Hans Passant. Кроме того, согласно в этой статье, если вы сначала добавите флажок "настроить настройки" masm, а затем добавьте файл, он автоматически будет признанный как файл ассемблера. Кроме того, не указывать имя точки входа в директиве END, но вместо этого указывать его в настройках проекта также работает для меня.

Ответ 4

Проблема заключается в том, что ваш код сборки является просто функцией. Чтобы скомпилировать и связать ссылку, вам нужно иметь процедуру запуска, как и Main в C/С++. Вы можете указать символ начала, указав в своей директиве END. Как:

END clear

Или, если вы хотите, вы можете связать файл .obj, сгенерированный сгенерированным Cob С++.obj.