
你是指内联汇编吧?比如下面这个例子:
#include <stdio.h>int func(int a, int b)
{
return a - b
}
int main()
{
//计算 12-5
int a = 12, b = 5 //给定两个数
int res //用来记录结果
__asm{ //内联汇编
push b //b压栈
push a //a压栈,注意C中函数接受参数的时候入栈是反着的
call func //调用函数func, 返回值保存在eax里
mov res, eax //将eax里的值赋给res
}
printf("%d\n", res) //输出结果,得到7
return 0
}
.global _C函数名然后在汇编里面
BL _C函数名
注意调用的前.设置好堆栈就好了.
当然..如果C函数是单独一个文件的话,,还是需要编译这个文件,
并加入链接里面,如果写在其他文件里面的.makefile里面不需要额外的东西
范例汇编文件.调用C文件的..mycmp函数
xxxx.asm
.global _mycmp
BL _mycmp
yyyyy.c
void mycmp(void)
{}
汇编中:EXPORT MMU_EnableICache
MMU_EnableICache
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_I
mcr p15,0,r0,c1,c0,0
MOV_PC_LR
然后C中调用 MMU_EnableICache()
调用汇编则更简单,
unsigned int UserAppPTR = 0x00081040//设置成汇编入口的绝对地址。
void (*UserAPP)(void)
UserAPP = (void (*)(void))UserAppPTR
UserAPP()
恩,一般来说在C中调用汇编比较常见,而且是非必要才用
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)