基于ARM Cortex-M3微控制器(STM32系列)基础知识(五)——汇编语言与C语言的混合编程

要求

在这里插入图片描述

ATPCS 介绍

在这里插入图片描述

ATPCS中寄存器的使用规则

在这里插入图片描述
在这里插入图片描述
在进行子函数调用时,当子函数中有参数时,子程序间通过寄存器R0、R1、R2、R3来传递参数,如果参数多于4个,则多出的部分用堆栈传递,被调用的子程序在返回前无须恢复寄存器R0~R3的内容。

在子程序中,使用寄存器R4~R11来保存局部变量。如果在子程序中使用到了R4~R11中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器则不必进行这些操作。在Thumb 程序中,通常只能使用寄存器R4~R7来保存局部变量。

寄存器R12用作子程序间scratch寄存器(用于保存SP,在函数返回时使用该寄存器出栈),记作ip。在子程序间的连接代码段中常使用这种规则。

寄存器R13用作数据栈指针,记作sp,sp中存放的是当前使用的栈的栈顶的地址。在子程序中寄存器R13不能用作其他用途。寄存器sp在进入子程序时的值和退出子程序时的值必须相等。

寄存器R14称为连接寄存器,记作lr。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14则可以用作其他用途。

寄存器R15是程序计数器,记作pc。它不能用作其他用途。
在这里插入图片描述

数据栈使用规则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参数传递规则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ARM和Thumb混合编程

工作状态

在这里插入图片描述
在这里插入图片描述

工作状态切换编程(有时间看,没时间不看)

1. BX实现状态切换

在这里插入图片描述

2. BLX实现状态切换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.LDR、LDM及POP指令实现程序状态的切换

在这里插入图片描述
在这里插入图片描述

押题

在这里插入图片描述
在这里插入图片描述

课堂测试题

1、

在这里插入图片描述
答案:

2、

在这里插入图片描述
解析:
在这里插入图片描述
故选CEDF

3、

在这里插入图片描述
答案:CD

4、

在这里插入图片描述
答案:
BD;C

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值