免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6754 | 回复: 11
打印 上一主题 下一主题

[函数] C里面怎样调用汇编语言函数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-23 17:54 |只看该作者 |倒序浏览
在一个C语言文件里调用了另外一个用NASM编写的函数,
C文件使用以下命令:
gcc -c main.c
生成了main.o 目标文件
nasm invoke.asm -f aout
生成了 invoke.o 目标文件

但,使用ld连接的时候出错,请问问题出在那里?谢谢。
gcc -o main invoke.o main.o

[ 本帖最后由 Lilov 于 2006-2-23 18:00 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-02-23 22:34 |只看该作者
gcc -o main main.o invoke.o

论坛徽章:
0
3 [报告]
发表于 2006-02-24 10:58 |只看该作者
问题解决了,原来用 NASM 编写的汇编函数 需要在函数名前面加上下横线,这样C里面才能正确地调用它。

论坛徽章:
0
4 [报告]
发表于 2006-02-24 11:04 |只看该作者
你是在 windows 下编程吧

论坛徽章:
0
5 [报告]
发表于 2006-02-24 11:08 |只看该作者
是的,在Windows 下编程,请问在Linux下有什么区别的?

另外,需要在函数名前加 下划线 实在是不方便,请问有什么方法可以设置 gcc编译器输出的目标文件能与Nasm输出的目标文件正确地连接?

[ 本帖最后由 Lilov 于 2006-2-24 11:13 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-02-24 11:28 |只看该作者
原帖由 Lilov 于 2006-2-24 11:08 发表
是的,在Windows 下编程,请问在Linux下有什么区别的?

另外,需要在函数名前加 下划线 实在是不方便,请问有什么方法可以设置 gcc编译器输出的目标文件能与Nasm输出的目标文件正确地连接?


加下划线的原因你看这个帖子:
http://bbs.chinaunix.net/viewthr ... &extra=page%3D2

论坛徽章:
0
7 [报告]
发表于 2006-02-24 11:49 |只看该作者
谢谢,C++对函数名的处理我也是有点了解的。但,现在是 C里面调用 汇编函数,不是C++里使用C函数。

论坛徽章:
0
8 [报告]
发表于 2006-02-24 11:57 |只看该作者
原帖由 Lilov 于 2006-2-24 11:49 发表
谢谢,C++对函数名的处理我也是有点了解的。但,现在是 C里面调用 汇编函数,不是C++里使用C函数。


你还是没有看清楚...
我那个帖子说了为什么编译器把C函数翻译成汇编函数的时候要加一个下划线


原帖由 Lilov
原来用 NASM 编写的汇编函数 需要在函数名前面加上下横线,这样C里面才能正确地调用它。


这不就解释了为什么NASM要加下划线才能被C调用了么?

论坛徽章:
0
9 [报告]
发表于 2006-02-24 12:15 |只看该作者
原帖由 converse 于 2006-2-24 11:57 发表


你还是没有看清楚...
我那个帖子说了为什么编译器把C函数翻译成汇编函数的时候要加一个下划线




这不就解释了为什么NASM要加下划线才能被C调用了么?


还是不明白,请converse指点迷津,NASM汇编的时候不加下划线是因为汇编里面没有函数重载,那C语言里面也没有函数重载,但为什么又要加下划线呢?(C++ 汇编生成的函数名,为什么不能直接使用返回类型+函数参数+函数名,而一定要在前面加下划线?)
难道是为了区别源代码里面的函数吗?请指点,谢谢。

[ 本帖最后由 Lilov 于 2006-2-24 12:18 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-02-24 12:43 |只看该作者
具体为什么要加个下划线我也不是很清楚,不过这个好像是各家编译器默认的行为,至少在VC和GCC下面都是这样的,所以如果想让你的汇编函数可以在C编译器中调用也只能加一个下划线了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP