ARM技术论坛
登录
直播中
mintsy
8年用户
1477经验值
擅长:MEMS/传感技术
私信
关注
[经验]
掌握STM32 ARM汇编指令的用法
ARM
STM32F103
汇编指令
启动文件
测试平台:
STM32
F103,ARM架构,需要了解ARM的汇编指令,了解MCU上电后的启动流程。
启动流程主要是硬件上电到进入main主函数之间的过程。
STM32使用ST HAL库开发时,可以使用ST HAL库中提供的启动文件,如:【startup_stm32f101xe.s】。
汇编语言编写。Keil MDK、gcc、IAR编译平台,略有不同,这里只选择Keil MDK平台的。
掌握一些基础的汇编指令的使用方法,并且可以自己写几个汇编函数,能读懂启动文件。
研究RTOS开发技术,需要掌握更多的汇编指令,可以手动编写平台移植相关的汇编函数
这里熟悉几个启动文件中常用的且重要的汇编指令。
汇编语法
汇编文件,经常以.s 或 .S结尾
分号 ; 用于汇编的单行注释
EQU指令
类似于C语言的#define,用于将一个数值(立即数)或寄存器(地址)赋给一个指定的符号名。
用例如下:
Stack_Size EQU 0x400
; 这里定义栈大小为:0x400,也就是1K Bytes。
AREA
指示汇编程序汇编一个新的代码段或数据段。
用例如下:
AREA STACK, NOINIT, READWRITE, ALIGN=3
; 段名:STACK
NOINIT 即不初始化
READWRITE:可读可写
ALIGN=3:8(2^3)字节对齐
SPACE
用于分配一定大小的内存空间,单位为字节。
用例:
Stack_Mem SPACE Stack_Size
; 这里分配一个:Stack_Size 字节大小的内存。Stack_Mem为标号,地址。
PROC
汇编子程序 开始
ENDP
汇编子程序 结束
EXPORT
导出符号(函数名),其他文件,如C文件,可以调用。
EXPORT Reset_Handler [WEAK]
; 这里 [WEAK],弱定义,外部文件可以重写这个函数。
IMPORT
导入符号,可以调用其他文件里定义的变量或函数
用例:
IMPORT SystemInit
; 这个SystemInit,来自外部文件:系统初始化与时钟配置。
LDR
加载(load)指令,从存储器中将一个32位的字数据传送到目的寄存器中
LDR R0, =SystemInit
; 把SystemInit函数地址,加载到MCU通用寄存器的R0。
BLX
BLX 带返回和状态切换的跳转指令
指令从ARM 指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM 状态切换到Thumb 状态,该指令同时将PC 的当前内容保存到寄存器R14 中。
LDR R0, =SystemInit
BLX R0
; 加载SystemInit函数地址, 跳转执行SystemInit。
BX
BX 带状态切换的跳转指令
指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。
DR R0, =__main
BX R0
; 加载__main 地址到R0,跳转执行__main,注意这个__main执行后,会进入用户的main.c中的main函数。
B
B 指令是最简单的跳转指令。
一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的目标地址,从那里继续执行。
【注意】存储在跳转指令中的实际值是相对当前PC 值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是 24 位有符号数,左移两位后有符号扩展为 32 位,表示的有效偏移为 26 位(前后32MB 的地址空间)
NMI_Handler PROC
EXPORT NMI_Handler [WEAK]
B .
ENDP
; 这个NMI_Handler汇编函数中,有个:【B .】 ,意思是说,如果进入这个函数,会:whiel(1),让程序无法返回。
STM32代码【死掉】时,注意是否有进入异常处理的函数,如:HardFault_Handler,默认也是【B .】即while(1),软件调试,可以停止调试,看看程序运行卡在哪里。
END
汇编文件的结束
小结
ARM汇编指令很多,用到时,查资料,慢慢积累,不断掌握使用的语法、用法。ST的编程手册里,有ARM汇编指令的介绍。
掌握部分STM32 ARM汇编用法,用于后期RTOS开发,如任务的上下文切换,可以用汇编高效的实现。
指令汇总
原作者:张世争
更多回帖
rotate(-90deg);
回复
相关帖子
ARM
STM32F103
汇编指令
arm
汇编
指令
详解
215
ARM
汇编
伪
指令
78
汇编
各类
指令
用法
及含义分析
35892
汇编
db
指令
的
用法
及含义解析
102378
arm
汇编
指令
集
92
arm
汇编
指令
集
120
ARM
汇编
伪
指令
详解
0
如何编写
ARM
指令
集中的基本
汇编
指令
2137
ARM
汇编
语言跳转
指令
的特殊
用法
还有吗
3016
常用
ARM
指令
集与
汇编
1
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分