STM32的C与汇编语言混合编程

一、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语言函数的相互转换,发现了简单的代码能完成许多复杂的功能,进一步让我了解到如何正确且恰当地引入汇编函数以及调用汇编函数。即使,我在完成作业的过程中遇到了许多困难,但我依旧不断尝试,不断完善,坚持下去,解决了问题。

四、参考资料

arm编程,关于函数调用形参实参在通用寄存器和栈帧里的对应关系。用汇编透视c语法操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值