一、混合编程的原因
c语言对于我们来说还是比较容易理解的,而汇编语言的效率高,有效结合这两者的优点,会为我们编程带来更多便利。
二、C语言嵌入汇编语言
2.1 实现调用函数(无参数)
c语言程序调用汇编语言里的函数,代码如下:
- main.c
#include<stdio.h>
extern void Init_1();
int main(){
Init_1();
return 0;
}
- func.s
AREA My_Function,CODE,READONLY ;固定格式
EXPORT Init_1
Init_1
MOV R1,#0
MOV R2,#0
LOOP
CMP R1,#10
BHS LOOP_END
ADD R2,#1
ADD R1,#1
B LOOP
LOOP_END
NOP
END
- 在汇编函数那一行前设置断点,即可看到c语言调用汇编函数,如图:
2.2 实现调用函数,有参数
- c语言调用汇编语言写的函数有参数有返回值,代码如下:
- main2.c:
#include<stdio.h>
extern int Init_2(int);
int main(){
int result=Init_2(10);
return 0;
}
- func2.s:
AREA My_Function,CODE,READONLY
EXPORT Init_2
Init_2
ADD R0,R0,#100
BX LR ;返回
END
- 当汇编函数运行完之后,r0的值与我们所设想的一样为110,如下图:
三、汇编语言嵌入C语言
- 在汇编语言中调用c语言函数,代码如下:
- main3.s:
AREA main,CODE,READONLY
import addf
ENTRY
EXPORT __main
__main
mov r0,#10 ;给两个参数赋值
mov r1,#12
bl addf ;调用函数
end
- fun3.c
#include<stdio.h>
int addf(int a,int b){
int result=a+b;
return result;
}
经过仿真调试,可以看到R0寄存器的与推出的值一样,为22
四、小结
用keil5来试验c语言调用汇编语言和用汇编语言来调用c语言的过程都是一样的,无非就是调用的主体不同,不过汇编语言还是不太熟悉,需要进一步熟悉。