ARM嵌入式开发实例
8
齐鲁工业大学
14.1 ASRTM嵌32入F1式03系XX统处简理介器的汇编程序开发框架
?伪指令 READONLY 是表示该代码段的读写属性为 “只读” 。除此之外,用户还可以通过使用伪指令 READWRITE 来表示当前该代码段的读写属性为 “可 读写”; ?伪指令 ENTRY 用来标识当前代码段的入口 。在每一 个汇编文件中,只能有一个伪指令 ENTRY ,即只能有 一个程序入口; ?伪指令END标志当前程序段的结束 。需要提醒用户注 意的是, END结束标识符必须和 ENTRY 伪指令匹配使 用。
?ARM嵌入式系统中的程序文件,通常也被称为 源文件 , 可以由任意一种文本编辑器来编写。在 ARM程序设计中, 常用的源文件可以简单的分为以下几种,如表 4.1所示。
3
齐鲁工业大学
4.1 STM32F103XX处理器的汇编程序开发框架
源程序文件
汇编程序文件 C程序文件
文件后缀名
说明
*.s
用ARM汇编语言编写的 ARM程序 或Thumb程序代码
第4章
STM32F103XX程序设计
在前面的内容中已经向读者介绍过有关 STM32F103XX系列处理 器的指令系统。尽管目前处理器的编译技术完全可以支持高级 语言在嵌入式开发系统中的运行,但汇编语言的作用仍然不可 替代。在STM32F103XX 系列处理器的嵌入式系统开发过程中, 最常用的编程语言就是汇编语言和 C语言。这两种程序设计语言 各自具有不同的特点,并且两者混合使用还能有助于用户理解 嵌入式系统的原理,提高嵌入式系统的调试能力。 在本章内容中,主要向读者介绍 ARM嵌入系统中汇编语言和 C 语言程序设计的方法。通过本章的学习,用户可以掌握汇编语 言和C程序语言在嵌入式系统编程中的具体使用方法。
?“AREA example, CODE, READONLY ”定义了一个 名为example 的代码段。需要说明的是, AREA 是汇编 代码中的一个伪指令,其功能是用来定义汇编语言中的 代码段或者数据段。
AREA 的基本语法格式为: AREA 段名称 {,段的属性1} {,段的属性2}
?此外,伪指令CODE 则是对该段的属性进行设定,即 表示该段的属性为代码段。与其对应的是,如果伪指令 是DATA ,则表示该段的属性为数据,即该段为数据段。
?为了使源文件易读,可以将一条长的指令通过使用反斜杠 字符“\”将其分成几行书写。
?每行从第一个分号开始到本行结束为注释内容,所有的注
释内容均被汇编起忽略。
齐鲁工业大学
(第二章课件) 5
4.1 STM32F103XX 处理器的汇编程序开发框架
2、 ARM汇编语言程序的基本结构
?在ARM汇编语言程序中,以程序段为单位来组织代码。 段 是相对独立的指令或数据序列,具有特定的名称。段可以分 为代码段和数据段,代码段的内容为执行代码,数据段存放 代码运行时所需的数据。
10
齐鲁工业大学
14.1 ASRTM嵌32入F1式03系XX统处简理介器的汇编程序开发框架
4.1.3 ARM 汇编语言中的宏定义
?在ARM 汇编语言中有着对应的宏定义的方法,其伪
指令是MACRO ,并与MEND 配对使用,用于表示宏定
义的结束。
MACRO
MULTI2
$DATA1 ;当前宏定义代码段的名称
9
齐鲁工业大学
14.1 ASRTM嵌32入F1式03系XX统处简理介器的汇编程序开发框架
4.1.2 ARM 汇编语言中的数据程 序段
?用DATA 伪指令来定义了一段数据代码段。 AREA DataField, DATA, READWRITE DATA1 SPACE 256;分配一段连续的存储单元 ;并初始化0 DATA2 SPACE 128 DATA DCD 2,3,4 ;
?将通过下面的汇编代码向读者介绍有关汇编语言中的 代码程序段。
AREA example, CODE, READONLY ENTRY Start MOV R1, #0x1 MOV R2, #0x02 MOV R3,R1,R2 END
7
齐鲁工业大学
14.1 ASRTM嵌32入F1式03系XX统处简理介器的汇编程序开发框架
*.c
用C语言编写的程序代码
头文件
为了简化源程序代码,将程序中经
*.h
常使用的常量命名、宏定义、数据结 构定义等,单独放到一个文件中,该
文件即为头文件
表4.1 ARM 嵌入式系统中的源文件
4
齐鲁工业大学
4.1 STM32F103XX 处理器的汇编程序开发框架
1、 在ARM处理器中,汇编语言的语法结构如下所示:
?可执行映像文件通常由以下几部分构成:
? 一个或多个代码段,代码段为只读属性。
? 零个或多个包含初始化数据的数据段,数据段的属 性为可读写。
? 零个或多个不包含初始化数据的数据段,数据段的
属性为可读写
齐鲁工业大学
(第二章课件) 6
34.1 STM32F103XX系处统理简器介的汇编程序开发框架
4.1.1 ARM 汇编语言中的代码程 序段
MOV R0, $DATA1
MOV R1, $DATA1
ADD R0, R0, Rx12;实现0x12*2 11 齐鲁工业大学
14.1 ASRTM嵌32入F1式03系XX统处简理介器的汇编程序开发框架
4.1.4 ARM 汇编语言中的符号数 据
?在任何一个编程语言中,符号数据的使用可以给程序 员带来很大的便捷。如果没有符号数据,在程序设计的 过程中必须使用嵌入式系统中操作数的内存地址才能实 现对数据的访问。并且还需要在用到常量的地方注明当 前内存空间的数值,一旦常量的数值发生改变就需要重 新替换程序代码中所有使用该常量的地方 。 ?在ARM 嵌入式汇编代码中,用户可以使用符号数据 来简化程序代码中变量。在使用符号数据的过程中,用 户必须遵守以下3个条件: ?(1)符号数据必须使用大小写字母、数字或下划线的 组合来命名;
标号 操作码 操作数1,操作数,??
;注释
?标号是代表地址的符号,必须在一行的顶格书写,其后不 能添加冒号“:”,而所有指令均不能顶格书写。
?ARM汇编语言对标识符的大小写敏感,书写标号及指令时 字母大小写要一致。
?在ARM汇编语言中,ARM指令、伪指令、寄存器名等可以 全部大写或者全部小写,但不能大小写混合使用。
1
齐鲁工业大学
本章节重难点
?【本章重点】 1 汇编语言的程序设计; 2 C语言的程序设计; 3 汇编语言与C语言的混合编程; ?【本章难点】 1 程序设计中的变量定义; 2 C语言与汇编语言的交叉使用;
2
齐鲁工业大学
第4章 STM32F103XX程序设计
4.1 STM32F103XX处理器的汇编程序开发框架