基于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混合编程

工作状态

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

扫描二维码关注公众号,回复: 13711807 查看本文章

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

1. BX实现状态切换

在这里插入图片描述

2. BLX实现状态切换

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

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

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

押题

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

课堂测试题

1、

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

2、

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

3、

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

4、

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

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

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/118701892
今日推荐