Cortex-M系列:在C文件中插入汇编

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

本文旨在阐述如何在Cortex-M系列CPU的C文件中插入汇编程序。通过观察C语言生成的汇编程序,在必要时刻知道如何写更为复杂的汇编代码。通过学习ARM工具链生成的汇编程序,可实现较高效的汇编指令学习,更重要的在于知道程序有多大的优化空间。特别地,理解数组处理方式,能更深刻地理解数组越界到底会有怎样的影响;理解文本池访问的方式,能更直观地知道常量以及const关键字在汇编中是如何体现的。

本文承接参考链接[3]和[7],故对一些概念没有再具体讲解。

目录

1 Cortex-M7程序生成

1.1 基本概念

1.2 书写规范[6]

1.3 嵌入汇编

1.4 内联汇编

1.5 其他汇编形式

2 C函数例子——基本运算

2.1 加法测试

2.2 乘除减和移位

2.3 浮点测试

2.4 数组处理,SP相关寻址

2.5 多参数调用

2.6 排他访问

2.7文本池访问

3 参考资料


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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值