混合编程(汇编与高级语言如C、C++的混合编程)
---C语言嵌入汇编
---C语言调用汇编
---汇编调用C语言
------实例:功能:数据复制
void my_strcpy(char *src,char *des)
{
char ch;
__asm{
loop:
LDRB ch,[src],#1
STRB ch,[des],#1
CMP ch,#0
BNE loop
}
}
int main()
{
char *a ="Hello,nice to see you!";
char b[25];
my_strcpy(a,b);
return 0;
}
------C语言调用汇编步骤
1、汇编export
2、C语言中定义 extern function
3、C语言使用
C语言和汇编语言之间的参数传递是通过对应的R0~R3,即R0传递第一个参数,R1传递第二个参数,多于4个参数时借助栈来完成。函数的返回值通过R0来传递。
//main.c
extern void my_add(char * a,char * b);
int main()
{
char *a ,*b;
*a = 4;
*b = 5;
my_add(a,b);
return 0;
}
//my_sub.s
AREA asm,CODE,READONLY
EXPORT my_add
my_add
LDRB R4,[R0]
LDRB R5,[R1]
ADD R6,R4,R5
END
------汇编使用C语言步骤:
1、C语言实现函数
2、汇编import C中函数名
3、BL 函数名
4、返回:MOV PC ,LR
//汇编程序调用C函数
//汇编.s
AREA asm,CODE,READONLY
IMPORT fun
ENTRY
start
MOV R0,#3
MOV R1,#4
MOV R2,#5
BL fun
MOV R4,R0
END
//fun.c
int fun(int a,int b,int c)
{
return a+b+c;
}