c++中调用64位汇编函数

众所周知从vs2005开始微软就不支持在c++中内联汇编了。会出现如下的错误

如果我们要在程序中内联汇编的话就要把汇编单独编译成一个文件,然后自定义规则生成obj,在链接的时候添加进去。
网上有32位的汇编与C++相互调用的例子,今天说的是X64的,其实也就是有一点差别。
步骤如下:
1.编写一个ASM文件
extern        MessageBoxA:proc
.data
text     db 'Hello x64!', 0
caption  db 'My First x64 Application', 0

.code
  MyMessage proc 
  
        xor r9,r9
        lea r8, caption
        lea rdx, text
       xor rcx,rcx
       call MessageBoxA

  ret 
  MyMessage endp

end
要注意X64汇编与X32的不同,尤其是参数的传递,这方面可以参考论坛里面的X64教程。
2.用VS2008创建一个项目,然后把ASM添加进去。
3.修改自定义规则如下。

4.编写调用函数
#include "stdafx.h"
#include 
#include 
extern "C" int __stdcall  MyMessage ();

int main(int argc, _TCHAR* argv[])
{

  MyMessage();
 system("pause");
 return 0;
}
5编译链接
6.执行结果

你可能感兴趣的:(汇编,64位,C++)