一、无参数调用函数
项目结构:

?
1.function代码

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
2.main.c代码
?
#include<stdio.h>
extern void Init_1(void);
int main(){
Init_1 ();
return 0;
}
}
3.点击编译
编译结果:

?4.调试运行
可以得到R1、R2的值
?
二、将原汇编语言Init_1函数改为Int Init_1(init)
1.function.s代码:

AREA My_Function,CODE ,READONLY
EXPORT Init_1
Init_1
ADD R0,#100
2. main.c代码:

#include<stdio.h>
extern void Init_1(int x);
int main(){
Init_1 (0);
return 0;
}
?3.点击编译

4.点击调试
?三、汇编语言调用C语言函数
?1.gg,c代码:

#include<stdio.h>
extern void Init_1(int x);
int main(){
Init_1 (0);
return 0;
}
?2.function代码:

EXPORT f
AREA f ,CODE, READONLY
IMPORT g
MOV R0, #1
ADD R1, R0, R0
ADD R2, R1, R0
ADD R3, R2, R0
ADD R4, R3, R0
ADD R5, R4, R0
STR R4, [SP, #-4]!
STR R5, [SP, #-4]!
BL g
ADD SP, SP, #4
ADD SP, SP, #4
STOP B STOP
END
?3.直接点击调试

四、总结
通过实验,学会了如何使用汇编语言和C语言程序之间的调用,更加了解参数在寄存器中的变化
五、参考文献?
Keil下STM32的C与汇编语言混合编程
|