目录
一、C语言调用汇编函数
二、将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100
三、在汇编函数中调用一个c语言写的函数
四、总结
五、参考文献
一、C语言调用汇编函数
先在项目下新建两个文件main.c和Func.s
main.c 和Func.s的代码如下
main.c
#includeextern void Init_1(void); int main(){ Init_1(); return 0; }
Func.s
AREA My_Function,CODE,READonLY
EXPORT Init_1
Init_1
MOV R1,#666
MOV R2,#888
LOOP
CMP R1,#10
BHS LOOP_END
ADD R2,#1
ADD R1,#1
B LOOP
LOOP_END
NOP
END
然后再进行编译调试
从运行的结果可以看出C语言成功调用了汇编语言,左上方的寄存器R1 R2也会遵循汇编程序的语法,从零开始一个一个的递加,直到R1等于10结束。
二、将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100
将main.c中的Init_1(void)中的void改为int x
在建立新的func.s文件
AREA My_Function,CODE,READonLY
EXPORT Init_1
Init_1
ADD R0,R0,#100
END
再编译运行
在寄存器R0处显示出了6E,而6E就正好是16进制的110,我们的所设置的整数为10 x+10就等于110
三、在汇编函数中调用一个c语言写的函数
我们将main.c改为
#includeextern int sum(int a,int b); int sum(int a,int b){ int c; a=10; b=10; c=a+b; return c; }
func.s改为
import sum
AREA MYCODE, CODE
EXPORT __main
__main
BL sum
END
然后再编译运行
然后可见在寄存器R0处得出了14的结果,在程序里面是设定为10+10得出100的结果,而14就是16进制的20,
四、总结
本次实验学习了在stm32的环境下用c和汇编语言混合编程,对其有了一定的了解,在整个过程中还是遇到了恨多的问题,在参考几位大佬之后最终得以完成。
五、参考文献
https://blog.csdn.net/qq_58174923/article/details/120677821



