C++代码中如何调用.asm文件中的函数?

deally 2007-07-28 11:46:54
我现在有个算法优化的.asm文件,里面有个函数,比如FunA,我现在想在C++文件想调用这个函数,请问该如何实现?
...全文
719 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nichdxray 2007-08-11
  • 打赏
  • 举报
回复
找个师傅请教下。!
我会黑客方面的.!
想交换学习下愿意的加QQ491666901
ollydbg23 2007-08-09
  • 打赏
  • 举报
回复
这个赞的!前面两楼给出的答案太好了!
combojiang 2007-08-03
  • 打赏
  • 举报
回复
例如
:汇编文件
.386
public _save
public _resume

_text segment byte public 'code'
assume cs:_text
_save proc near
push ebp
mov ebp,esp
mov esi,[ebp+8]
mov eax,[ebp+4]
mov [esi],eax
pop ebp
mov eax,0
ret
_save endp

_resume proc near
push ebp
mov ebp,esp
mov esi,[ebp+8]
mov eax,[esi]
mov [ebp+4],eax
pop ebp
mov eax,1
ret
_resume endp

_text ends
end


*****************************.cpp文件***************************************************
#include<stdio.h>
extern "C" int save(long * s);
extern "C" int resume(long * s);
void main(){
long sp;
printf("Both the code in the if and the code in the else will be exe!!!\n");
if(save(&sp)){
printf("return form the if\n");
return;
}else{
printf("return form the else\n");
resume(&sp);
}
return;
}
一剑 2007-08-03
  • 打赏
  • 举报
回复
liangbch(宝宝) :谢谢了,学了一招:)
苦行者 2007-08-02
  • 打赏
  • 举报
回复
的确像liangbch说的,在VC中加上MASM,去做编译即可达到所要的功能.
liangbch 2007-08-02
  • 打赏
  • 举报
回复
以VC6为例,详细的讲述如何用 .cpp 和 .asm混合编成:

1。工具集成:
1)首先你应该安装汇编器,比如masm,我用的是 Microsoft (R) Macro Assembler Version 6.15.8803,对应的汇编器执行文件时ml.exe,你应该把ml.err,ml.exe 复制到VC的bin目录(我这里是:D:\Program Files\Microsoft Visual Studio\VC98\Bin)

2)在你的project中添加.asm文件,the .asm文件应该和.dsp 位于同一目录。
3)选中project中的asm文件,单击右键,选择settings菜单,弹出一个对话框,打开custom Build选项卡,在commands 中输入:ml /coff /c $(InputName).asm,
在outputs 中输入 $(InputName).obj。
这样,就可以在VC集成环境中自动编译连接你的程序了。

2。函数接口:汇编语言写的函数要被C语言调用,一定要遵循一个规范,调用约定(Calling convention),这个规范定义了参数传递,堆栈平衡等。
1)在Cpp/h文件中声明函数的调用方式:
如 extern "C" void ADD(int *Result, int a,int b);
在cpp文件中调用汇编函数extern "C" 是必须的,在c文件中调用汇编函数不需也不能使用extern "C"。
2)书写汇编程序,汇编语言中的函数名 必须是cpp文件中声明的函数名前加下划线如_Add
第一个参数是 [esp+4],第二个函数时 [esp+8],如果函数有返回值,返回值送入eax,汇编代码中最后一条语句是ret,要注意堆栈平衡.

更多 关于c/c++中调用约定的知识 可参见:
http://www.3pcode.com/article/article_148/74048.htm
http://blog.vckbase.com/bluetopic/archive/2007/04/24/25738.html

foxdeng 2007-07-28
  • 打赏
  • 举报
回复
可以的,作法是:
1 将asm文件编译成.o文件
2 在c++文件中将要调用的函数用extern的方式申明为外部函数也编译成.o文件
3 将这两个文件一起链接为你要的可执行文件
大熊猫侯佩 2007-07-28
  • 打赏
  • 举报
回复
0 内嵌

1 调用dll
czlyc006 2007-07-28
  • 打赏
  • 举报
回复
asm源代码的话只有内联一条路可走了
deally 2007-07-28
  • 打赏
  • 举报
回复
不行.asm文件比较大,嵌入的话,很难看。
zhgwbzhd 2007-07-28
  • 打赏
  • 举报
回复
看看C和汇编混编的知识。
可以考虑用asm直接内潜汇编。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧