目录
一、keil的配置
1)参考帖子
看另一个帖子,有项目创建和芯片的环境配置:ARM汇编基础基于Keil创建STM32汇编程序的编写,创建项目和环境配置后就可以进行下面步骤了。
2)创建文件
1.这里需要创建两个文件,一个c语言和汇编语言的。
2.源代码
main.c
#include<stdio.h>
extern void Init_1(void);
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语言嵌入汇编语言
1)实现调用函数(无参数)
1.先编译,编译成功后调试:
2.调试一下,我们点击F10,观察左边R1,R2的变化:
3.变化后,结果符合代码预期,R1,R2 从初值“0”循环加“1”,直至R1的值等于“10”时退出循环,R1,R2的值变为10:
2)原汇编语言 Init_1函数的类型改为 int Init_1(init)
1.修改代码
main.c
#include<stdio.h>
extern void Init_1(int x);
int main(){
Init_1 (10);
return 0;
}
Func.s
AREA My_Function,CODE ,READONLY
EXPORT Init_1
Init_1
ADD R0,#100
2.调试,编译,16进制0x6E换算成10进制就是110(100+10):
最后结果符合代码预期,函数传入整型数“0”,函数运行后返回整型数“0+100”,即100,存放在寄存器R0中。
三、汇编语言调用C语言函数
1)编写代码
main.c里实际写了一个函数:
#include<stdio.h>
int add(int x,int y)
{
int p = x+y ;
return p ;
}
Func.s里是程序:
AREA My_Function,CODE ,READONLY
IMPORT add
ENTRY
EXPORT main
main
MOV R0,#10
MOV R1,#20
BL add
END
2)调试
经过仿真调试,可以看到R0寄存器的与推出的值一样为30:
四、总结
了解了在汇编中使用c的函数调用和在c中使用汇编函数调用,主要是对汇编语言有了一点理解,和里面参数传递过程的学习。