初探 c/c++ 与 汇编 之间的交叉编译 命令行实现

本文介绍了如何在Windows环境下使用VC6.0进行C/C++与汇编的交叉编译,详细阐述了调用约定、名字修饰规则,并提供了编译汇编函数和调用C/C++函数的实例及批处理文件示例。
摘要由CSDN通过智能技术生成

也不知道怎么了,最近想搞搞这个东西,嘿嘿,,可能觉得某些方面对速度要求不高的用c/c++就可以了且很方便,可对速度要求高的用汇编来实现也是个不错的选择。。而通常情况下,这两条都希望有,所以想到了交叉编译,当然写成DLL形式再接口调用也未尝不可,只是有时希望整合一下,嘿嘿。。。。罗嗦了吧,哈哈,下面开始吧。

 

说明:

1.调用约定

  统一采用_stdcall方式压栈,通常用于Win32 Api中,函数采用从右到左的压栈方式,

  自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。

      比如:int f(void *p) 编译后为 _f@4(在外部汇编语言里可以用这个名字引用这个函数)

2.名字修饰约定

      C或者C++函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函数定义或者原型时生成的字符串。

      修饰名由函数名、类名、调用约定、返回类型、参数等共同决定。

      a、C编译时函数名修饰约定规则:

  __stdcall调用约定决定了在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参数的字节数,

  格式为_functionname@number

     b、C++编译时函数名修饰约定规则:

  通过extern "C"强制采用C编译时的函数名修饰约定规则a。

3. 以下程序均以上面两条约定方式、windows vc6.0包 环境实现,其他方式也未尝不可,只是这种方式用的多一点吧。。

 

C/C++调用汇编函数

也不想多说什么,给个具体的例子吧

我们要通过C/C++来调用下面的汇编函数GetArgument PROC a:DWORD

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值