本文旨在阐述如何在Cortex-M系列CPU的C文件中插入汇编程序。通过观察C语言生成的汇编程序,在必要时刻知道如何写更为复杂的汇编代码。通过学习ARM工具链生成的汇编程序,可实现较高效的汇编指令学习,更重要的在于知道程序有多大的优化空间。特别地,理解数组处理方式,能更深刻地理解数组越界到底会有怎样的影响;理解文本池访问的方式,能更直观地知道常量以及const关键字在汇编中是如何体现的。
本文承接参考链接[3]和[7],故对一些概念没有再具体讲解。
目录
1 Cortex-M7程序生成
编译的整个过程为:预编译、编译、汇编、链接
1.1 基本概念
格式:
[标号] <指令|条件|S> <操作数>;[注释]
注:指令指伪指令或汇编指令;条件和S见“表5.3 Cortex-M 汇编语言的后缀”[1]。
1、在ARM工具链和GNU工具链的伪指令是不同的,即不同的编译器GNU的伪指令可能不同。一般GNU工具链的伪指令以“.”为开头。下面我将在Keil5中使用ARM工具链测试一些汇编指令,都是在.c文件中编写和调用。
2、汇编指令到具体CPU手册找,如[2]
2、操作数可以是下表的寄存器,也可以是立即数“#0x01”,或是定义的常量(在ARM工具链中,用“EQU”定义,用“=常量名”引用),或是指针的本质用法("[R3]")。
| 寄存器 |
__asm中的字符串 |
| APSR |
"apsr" |
| BASEPRI |
"basepri" |
| BASEPRI_MAX |
"basepri_max" |
| CONTROL |
"control" |
| EAPSR(EPSR+APSR) |
"eapsr" |
| EPSR |
"epsr" |
| FAULTMASK |
"faultmask" |
| IAPSR(IPSR+APSR) |
"iapsr" |
| IEPSSR(IPSR+EPSR) |
"iepsr" |
| IPSR |
"ipsr" |
| MSP |
"msp" |
| PRIMASK |

本文深入探讨在Cortex-M系列CPU的C文件中嵌入汇编程序的方法,包括嵌入汇编、内联汇编等技巧,并通过实际C函数示例,如基本运算、数组处理等,展示如何优化程序执行效率。
最低0.47元/天 解锁文章
860

被折叠的 条评论
为什么被折叠?



