c语言调用asm过程(环境:vc6.0和nasm)

1.调用约定(calling convension)大致分为两种:stdcall和cdecl.主要区别是调用结束后是caller(调用函数)还是callee(被调用函数)清空堆栈中的参数.stdcall规定callee负责清空堆栈中的参数.cdecl规定caller清空堆栈里的参数.

2.首先下载nasm(for windows),解压缩将nasm.exe所在路径加入到系统变量PATH,方便编译,省得输入长串的路径名.

3.新建一个win32 console application工程,增加一个asm文件,右键选择'设置',命令中填入:nasm $(InputName).asm -f win32 -o Debug/$(InputName).obj,表示用nasm编译器将.asm文件编译成win32格式的obj文件,输出填入:Debug/$(InputName).obj,这样asm文件就可以在vc中编译了,obj文件会存放在该目录中Debug文件.

4.在c源文件中使用extern "C" _stdcall int yourpro(int a,int b)声明要调用的汇编函数,在asm源文件中使用global声明被调用的函数.例子如下:

#c源文件

#include <stdio.h>
extern "C" int _cdecl add(int a,int b);
void main(){
 add(4,8);
}

 

 

;asm源文件

[SECTION code]
[BITS 32]
global _add    ;
_add:
 push ebp   ;
 mov ebp,esp   ;
 sub esp,40h   ;
 push ebx   ;
 mov eax,[ebp+8]  ;
 mov ebx,[ebp+12] ;
 add eax,ebx   ;
 pop  ebx   ;
 add esp,40h   ;
 pop  ebp   ;
 ret     ;

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值