1)为何要混合编程?
例子:LInux内核中的一些代码就包含有汇编和c代码
2)汇编和c/c++混合编程的方式
3)C语言嵌入汇编
如在linux内核代码中的asm volatile{ }汇编代码,asm开头表示该段代码为汇编
例子:C语言中嵌入arm汇编,实现一个copy函数
#include
void my_strcopy(char *src,char *dest)
{
char ch;
__asm{//汇编
loop:
LDRB ch,[src],#1
STRB ch,[dest],#1
CMP ch,#0
BNE loop
}
}
int main()
{
char *src ="hello arm";
char dest[64];
my_strcopy(src,dest);
printf("%s\n",dest);
return 0;
}
4)C语言调用汇编
例子:C语言代码中调用汇编代码
Mymain.c文件代码
extern void my_strcopy(char *src,char *dest);
int main()
{
char *s ="hello arm";
char d[64];
my_strcopy(s,d);
}
MyArm.c文件代码
AREA myARM,CODE,READONLY
EXPORT my_strcopy
my_strcopy
loop
LDRB R4,[R0],#1
CMP R4,#0
BEQ over
STRB R4,[R1],#1
B loop
over
END
int cFun(int a,int b,int c)
{
return a+b+c;
}
Mymain.c文件代码
AREA myARM,CODE,READONLY
IMPORT cFun
ENTRY
START
MOV R0,#1 //给函数cFun的a传值
MOV R1,#2 //给给函数cFun的b传值
MOV R2,#3 //给给函数cFun的c传值
BL cFun
MOV R4,R0
END