首页
社区
课程
招聘
[原创]c++中调用64位汇编函数
发表于: 2011-5-17 23:16 13173

[原创]c++中调用64位汇编函数

2011-5-17 23:16
13173

众所周知从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 <stdio.h>
#include <windows.h>
extern "C" int __stdcall  MyMessage ();

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

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


不足之处请大家多多指教


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 1981
活跃值: (771)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
2
vs2005什么时候不支持内联汇编了
2011-5-17 23:22
0
雪    币: 84
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢lz的asm汇编写法,我还没有用过这种做法,之前用的也就是内嵌汇编,关键字__asm要带两个下划线
2011-5-17 23:54
0
雪    币: 153
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
x64不支持
2011-5-18 06:17
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
众所周知从vs2005开始微软就不支持在c++中内联汇编了......

应该说:从VS2005开始,c/c++基本不需要内联汇编了.
2011-5-18 11:07
0
雪    币: 38
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
支不支持内联汇编那是c语言的特性,与ide无关
2011-5-19 16:50
0
雪    币: 5
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
支持一下 . 支持一下 .
2011-5-22 12:30
0
雪    币: 1099
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
原来现在的编译工具进化这么快
2011-5-23 17:23
0
游客
登录 | 注册 方可回帖
返回
//