X64平台C/C++与汇编混编工程搭建说明
图片不好上传,直接下载详细文档即可,地址
http://download.csdn.net/detail/zhangpu1980/6417239
1. 电脑配置
2. VisualStudio 2012混编设置
2.1. VS2012版本
2.2. 混编工程创建步骤
2.2.1. 创建空白工程
2.2.1.1. Step1
2.2.1.2. Step2
2.2.1.3. Step3
2.2.2. 添加测试cpp文件
2.2.2.1. Step1
2.2.2.2. Step2
2.2.2.3. Step3
2.2.2.4. Step4添加测试代码
#include <iostream>
#include "windows.h"
using namespace std;
//汇编语言外暴漏函数
extern "C" double __stdcallCombineA(int a, int b, int c, int d, int e, double f);
//与汇编语言功能相同的C函数
double CombineC(int a, int b, int c, intd, int e, double f)
{
return(a + b + c + d +e)/(f + 1.5);
}
//测试主函数
void main()
{
cout<<CombineC(1,2,3,4,5,6.1)<<endl;
cout<<CombineA(1,2,3,4,5,6.1)<<endl;
}
2.2.3. 添加测试asm文件
2.2.3.1. Step1
2.2.3.2. Step2
2.2.3.3. Step3添加测试汇编代码
;CombineA(int a, int b, int c, int d,int e, double f)
.data
realVal REAL8 + 1.5;
.code
PUBLIC CombineA
CombineA PROC
ADD ECX, DWORD PTR [RSP+28H]
parameter:
ADD ECX, R9D
ADD ECX, R8D
ADD ECX, EDX
MOVD XMM0, ECX
CVTDQ2PD XMM0, XMM0
MOVSD XMM1, realVal
ADDSD XMM1, MMWORD PTR [RSP+30H]
DIVSD XMM0, XMM1
RET
CombineA ENDP
End
2.2.4. 配置asm文件编译属性
2.2.4.1. 修改编译环境为X64
如果没有X64,则选择New
修改为x64
2.2.4.2. 设置asm文件属性
2.2.4.3. 讲上面的Does not…修改为Custom Build Tool
2.2.4.4. 属性页左侧多出一项自定义编译设置
2.2.4.5. 修改Command line和Outputs
Command line:
ml64.exe /DWIN_X64 /Zi /c /Cp /Fl /Fo$(IntDir)\X64asm.obj X64asm.asm
Outputs
$(IntDir)\X64asm.obj
注意:上述红色字体如果改为$(InputName)会报错,“找不到.asm文件”,所以我修改为了文件名,这样编译就通过了。
同理,可以设置release模式。
2.2.4.6. 编译asm文件
2.2.4.7. 编译成功
2.2.5. 编译整个工程
2.2.6. 输出结果正确
至此,X64环境下VS2012混合编程成功
图片不好上传,直接下载详细文档即可,地址
http://download.csdn.net/detail/zhangpu1980/6417239