赞
踩
赋值
;将0x40013800 赋值给变量USART1_BASE(寄存器地址)
USART1_BASE EQU 0x40013800
用法:AREA sectionname{,attr}{,attr}…
sectionname:要指定的段名
attr:段属性
属性枚举
ALIGN=expression
默认情况下,ELF 段在四字节边界上对齐。expression 可以拥有 0 到 31 的任何整数。段在 2expression 字节边界上对齐。例如,如果 expression 是 10,则段是在 1KB 边界上对齐。这与 ALIGN 命令所指定的方式并不相同。
ASSOC=section
section 指定一个关联的 ELF 段。sectionname必须包含在含有 section 的任何链接中。
CODE
包含机器指令。READONLY 是默认值。
COMDEF
是一个公共段定义。这是包含代码或数据的 ELF 段。其必须等同于与其它源文件中拥有相同名称的任何其它段须是同一段。拥有相同名称的同一 ELF 段在存储器的相同段中被链接程序覆盖。如果有任何段不同,则链接程序产生一个警告,并且不覆盖这些段。请参阅RealView 编译工具 2.0 版链接程序和实用程序指南 中的链接程序 一章。
COMMON
是公共数据段。不能在其中定义任何代码或数据。其由
链接程序初始化为零。拥有相同名称的所有公共段在存
储器的相同段中被链接程序覆盖。它们并不都需要具有
相同的大小。链接程序按每个名称的最大公共段的需要
分配空间。
DATA
包含数据但不含指令。READWRITE 是默认值。
NOALLOC
表示在目标系统上没有为此 AREA 分配存储器。
NOINIT
表示数据段是未初始化的或初始化为零。其只包含零初始化的空间保留命令 SPACE 或 DCB、DCD、DCDU、DCQ、DCQU、DCW 或 DCWU。可以决定在链接时 AREA 是未初始化的还是零初始化的(请参阅RealView 编译工具 2.0 版链接程序和实用程序指南 中的链接程序 一章)。
READONLY
表示不能写到此段中。这是代码区域的默认情况。
READWRITE
表示可以读和写此段。这是数据区域的默认情况
为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。
AREA RESET, DATA, READONLY DCD MSP_TOP ;初始化主堆栈 DCD Start ;复位向量 DCD NMI_Handler ;NMI Handler DCD HardFault_Handler ;Hard Fault Handler DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD SysTick_Handler ;SysTick Handler SPACE 20 ;预留空间20字节
制定汇编程序的入口点,在一个完整的汇编程序中至少要有一个ENTRY(也可以有多个,当有多个ENTRY时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个ENTRY(可以没有)。
AREA |.text|, CODE, READONLY
;主程序开始
ENTRY
;指示程序从这里开始执行
一个标号,标志程序的入口,程序加载到内存之后CS,IP会指向这个标号,从START指向的指令开始运行。
最后要配合END使用
格式:LDR{条件} 目的寄存器 <存储器地址>
1、 ldr pc, =label
即把label后的数据或者指令的运行地址赋值为pc。运行地址 = 链接地址 + 这些数据或指令相对于程序起始地址的偏移。
2、 ldr pc, label
把label后的数据或者指令内容赋值给pc。
ldr r0, =RCC_CR
ldr r1, [r0]
一般跟LDR配合使用。用法:STR r1,[r2] ; 将r1中的值存到r2所指定的地址中
ldr r0, =RCC_CR
ldr r1, [r0]
orr r1, #Bit16
str r1, [r0]
CPSR的Z标识位为1时,程序跳转到beq 后的标签处
;等待外部晶振就绪
ClkOk
ldr r1, [r0]
ands r1, #Bit17
beq ClkOk
MRS,状态寄存器传送至通用寄存器类指令,将状态寄存器的内容传送至通用寄存器。
格式:MRS{<条件码>}Rd,CPSR}SPSR
MSR,通用寄存器传送至状态寄存器传送指令,将通用寄存器的内容传送至状态寄存器。
格式:MSR{<条件码>CPSR_f|SPSR_f,<#immed_8r>
;切换成用户级线程序模式
ldr r0, =PSP_TOP
;初始化线程堆栈
msr psp, r0
mov r0, #3
msr control, r0
三者都是程序跳转,但B是纯跳转,不会返回,BL跳转执行完后会返回原位置,用于执行子程序。BX跳转的目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。
格式都为:B/BL/BX 目标地址
bx lr;表示子程序的返回
将数据压入/弹出栈
;相当于将r0,r1, r2, r3寄存器作为参数传入子程序的堆栈
push {r0 - r3}
...
;清除子程序堆栈
pop {r0 - r3}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。