一、C语言调用汇编函数
建立工程
选择芯片STM32F103VE
配置环境
编写C语言程序
#include<stdio.h>
extern void Init_1(void);
int main()
{
Init_1();
return 0;
}
编写汇编语言
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
修改设置以进行模拟仿真
运行结果
二、代码改写
要求将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100。
#include<stdio.h>
extern int Init_1(int x);
int main()
{
Init_1(1);
return 0;
}
AREA My_Function,CODE,READONLY
EXPORT Init_1
Init_1
ADD R0,#100
END
从C语言中传入的数值默认存在R0寄存器中,在R0寄存器中加100
运行结果
在十六进制下101为65
三、在汇编语言中调用C语言程序
#include<stdio.h>
extern int Init_1();
int Init_1()
{
int x=1;
return x+100;
}
IMPORT Init_1
AREA MYCODE, CODE
EXPORT __main
__main
BL Init_1
END
运行结果
在十六进制下101为65
四、总结
初次尝试C与汇编语言混合编程,尝试了在C语言中调用汇编语言与在汇编语言中调用C语言,对寄存器功能有初步了解,还有不足需要继续学习。
五、参考
*** error 65: access violation at C:0x003D : no 'execute/read' permission_xiaobai06的博客-CSDN博客https://blog.csdn.net/qq_40766654/article/details/102572078Keil下STM32的C与汇编语言混合编程_m0_58414679的博客-CSDN博客https://blog.csdn.net/m0_58414679/article/details/120683774?spm=1001.2014.3001.5501