Ответ 1
Как создать x64-проект со смешанным исходным кодом с помощью файла сборки x64 в Visual Studio:
1) Запустите Visual Studio (Community) 2015 и выберите FILE - New - Project
.
2) В следующем окне выберите Win 32 Console Application
.
3) Вы получаете подтверждение. Нажмите на Next >
.
4) В следующем окне вы можете принять настройки по умолчанию. Нажмите на Finish
.
5) Теперь выберите PROJECT - Build Customizations...
6) В следующем окне отметьте " masm(.targets,.props)
и нажмите " OK
.
7) Выберите Build - Configuration Manager...
8) Измените платформу Active solution platform
на x64
9) Создать callee.asm: PROJECT - Add New Item
.
10) В следующем окне выберите C++File(.cpp)
и - ВАЖНО! - дать ему имя с расширением .asm
. Нажмите на Add
.
10) Теперь проверьте, имеет ли файл .asm
правильные свойства. В обозревателе решений щелкните правой кнопкой мыши файл и выберите " Properties
.
11) На странице свойств вы должны увидеть как минимум:
Excluded From Build (empty) or No
Item Type Microsoft Macro Assembler
В Command Line
убедитесь, что ml64.exe
выбран в качестве ассемблера.
Нажмите на OK
.
12) Теперь вы можете заполнить файлы контентом.
ConsoleApplication1.cpp:
#include <iostream>
using namespace std;
extern "C" void hello_from_asm();
int main()
{
cout << "Hello from CPP" << endl;
hello_from_asm();
return 0;
}
callee.asm:
PUBLIC hello_from_asm
EXTERN puts:PROC
.data
hello1 db "Hello from ASM.",0
.code
hello_from_asm PROC
push rbp
mov rbp, rsp
sub rsp, 32 ; Shadow Space
and spl, -16 ; Align stack at 16
lea rcx, hello1
call puts
leave ; Restore stack (rsp) & frame pointer (rbp)
ret
hello_from_asm ENDP
END
13) Сборка .exe
и запустите его с CTRL-F5.
Приложение будет открыто в новом окне.