如何C语言与汇编混编

2019-10-16 05:44发布

我想用汇编写SD卡与TFT的底层函数,封装成头文件形式,让C文件调用,需要设置什么吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
86806
2019-10-17 17:27
pathfinder 发表于 2016-8-21 18:51
我也遇到类似的问题,你把问题解决了吗,我的qq1264511336,可以一起学习讨论

居然有人挖坟,顺便回答下,混编非常方便,举个栗子

1、C 调用汇编函数
假如汇编文件“aaa.s”是这样的,注意 EXPORT AAA是必须的,这样C编译器才能找到
[mw_shl_code=asm,true]
EXPORT     AAA
AAA   ...
      bx      lr[/mw_shl_code]

然后C语言是这样调用的
[mw_shl_code=asm,true]
extern        int AAA(int  a);

main()
{
int b;
b=AAA(1);
}
[/mw_shl_code]

2、汇编 调用C函数
假如汇编文件“aaa.s”是这样的,注意 IMPORT AAA是必须的,这样让汇编知道AAA这个函数不在本文件内部
[mw_shl_code=asm,true]
IMPORT AAA
   ldr    r0,=AAA
   blx   r0
[/mw_shl_code]
C函数无需做特殊处理


**************
整体而言,混编时要注意内存分配,C语言中的变量地址是由编译器分配的,有一定的不可控性,建议位汇编和C单独划分内存块

另外要注意参数传递,正常是r0 - r3,这个相关资料有详细解释

一周热门 更多>