目录
一、在C语言中调用汇编语言函数
1、首先创建一个工程test2。
2、在test2中添加C语言。
3、在test2中添加汇编语言。
4、编译运行程序
二、在汇编语言中调用C语言函数
1、编写C语言代码
2、编写汇编语言函数
3、编译程序
4、调试运行程序
三、总结
一、在C语言中调用汇编语言函数
1、首先创建一个工程test2。
新建工程和在工程中添加代码详情可以参考我之前的一个博客:
Keil环境下创建STM32汇编语言工程分析HEX文件内容并观察ARM寄存器变化情况_shutupbb的博客-CSDN博客
2、在test2中添加C语言。
此次程序的功能为传入一个整型数x,函数运行后返回整型数 x+100。首先编写一个C语言程序,但在里面声明一下汇编语言的函数。
#includeextern int Init_1(int x); //声明汇编语言的函数 int main(void) { int x=10; Init_1(x); //调用汇编语言函数 return 0; }
3、在test2中添加汇编语言。
编写一个汇编语言程序,实现函数功能。
AREA My_Function,CODE,READonLY
EXPORT Init_1
Init_1
ADD R0,R0,#100
bx lr
END
此处要注意汇编语言的格式,第一行要空格,第二行也要按tab键空格,否则会报错。
4、编译运行程序
点击右上角的Bulid键,进行软件的编译。
运行成功,没有报错。
点击调试按钮进行程序的调试运行。
可以看到变量值x为A,换成十进制即为10,与我们所设定的相符。
单步调试至函数运行完成,我们可以观察到寄存器R0的值发生变化,变为6E,转换为十进制即为110,即10+100,证明函数调用成功了。
二、在汇编语言中调用C语言函数
1、编写C语言代码
#include
extern void ASM(); //声明汇编语言函数
int Init_1(int x)
{
return x+100;
}
int main()
{
ASM(); //再次调用汇编函数
return 0;
}
#includeextern void ASM(); //声明汇编语言函数 int Init_1(int x) { return x+100; } int main() { ASM(); //再次调用汇编函数 return 0; }
2、编写汇编语言函数
AREA My_Function,CODE,READonLY
import Init_1 //引入C语言函数Init_1
EXPORT ASM //声明函数ASM
ASM
MOV R0,#10 //R0赋值为10
BL Init_1
bx lr
END
3、编译程序
与之前步骤相同,没有出现错误
4、调试运行程序
与之前步骤相同,经过单步调试之后我们可以观察到寄存器R0的值为A,换算成十六进制为10,即初始值设定成功了。
继续调试,最后运行完成可以看到此时R0为6E,换算成十六进制为110,运行成功。
三、总结
无论是在C语言中调用汇编语言函数还是在汇编语言中调用C语言函数,必须完成的一步就是声明需要调用的全局函数,这样才能在另外的程序中找到并且调用它。同时,在编写汇编语言时,需要注意格式问题,具体要求上文已告诉。



