1)爲何要混合編程?
例子:LInux內核中的一些代碼就包含有彙編和c代碼
2)彙編和c/c++混合編程的方式
3)C語言嵌入彙編
如在linux內核代碼中的asm volatile{ }彙編代碼,asm開頭表示該段代碼爲彙編
例子:C語言中嵌入arm彙編,實現一個copy函數
#include<stdio.h>
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
5)彙編調用C語言
例子:
MyArm.c文件代碼
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
6彙編常用操作