目录
一、C语言中调用汇编函数
1.1 创建工程
1.2 选择芯片及配置设备
①这里我选择的是STM32F103VE芯片
②设备配置
1.3 编写代码
test4.c
test5.s
编译结果无误:
由于是仿真性实验,所以需要更改参数设置,具体操作步骤如下图:
1.4 调试
设置好后,点击debug进入调试:
1.5 结果显示
单步运行,观察结果:
x的初始值为20(16进制下为14)。
R0初始值为120(16进制下为78)。
二、汇编语言调用C语言函数并改写
要求:修改代码参数,要求将原汇编语言Init_1函数的类型改为int Init_1(init),此函数功能修改为传入一个整型数x,函数运行后返回整型数x+100。编程实现,并仿真跟踪调试。
2.1 test4.c改写
2.2 test5.s改写
修改原因:在arm编程里,函数调用过程中,子函数的参数值传递按顺序存放在r0,r1,r2,r3里,超过4个参数值传递放栈帧里,因此我们要实现x+100,可以在init()函数里直接添加x+100。
2.3 编译
编译结果没有问题,显示结果如下:
2.4 调试
点击debug进入调试。
可以看出R0初始值为16进制下的14:
2.5 结果显示
单步运行,R0十进制条件下加上100,因此,十进制下,由原来的20变为120;十六进制下,由原来的14变为78,显示结果如下图所示:
三、总结
通过完成C语言里调用汇编函数和汇编语言里调用C语言函数的相互转换,发现了简单的代码能完成许多复杂的功能,进一步让我了解到如何正确且恰当地引入汇编函数以及调用汇编函数。即使,我在完成作业的过程中遇到了许多困难,但我依旧不断尝试,不断完善,坚持下去,解决了问题。