第 3 章 ads 开发环境 和 arm 汇编语言

33
第3第 ADS 第第第第 ARM 第第第第

Upload: quin-ortega

Post on 31-Dec-2015

132 views

Category:

Documents


0 download

DESCRIPTION

第 3 章 ADS 开发环境 和 ARM 汇编语言. 主要内容:. 3.1 ADS 开发环境 3.1.1 ADS 软件组成介绍 3.1.2 使用 ADS 创建工程 3.1.3 用 AXD 进行代码调试 3.2 ARM 汇编程序设计. 3.1ADS 开发环境. 在这一节里,将介绍 ARM 开发软件 ADS(ARM Developer Suite) 。通过学习如何在 CodeWarrior IDE 集成开发环境下编写,编译一个工程的例子,使读者能够掌握在 ADS 软件平台下开发和调试 ARM 汇编程序。 本节内容 : 3.1.1 ADS 软件组成介绍 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 3 章  ADS 开发环境 和 ARM 汇编语言

第 3章 ADS开发环境

和ARM汇编语言

第 3章 ADS开发环境

和ARM汇编语言

Page 2: 第 3 章  ADS 开发环境 和 ARM 汇编语言

2

主要内容:

3.1 ADS 开发环境3.1.1 ADS 软件组成介绍3.1.2 使用 ADS 创建工程3.1.3 用 AXD 进行代码调试

3.2 ARM 汇编程序设计

Page 3: 第 3 章  ADS 开发环境 和 ARM 汇编语言

3

3.1ADS 开发环境 在这一节里,将介绍 ARM 开发软件 ADS(ARM Develope

r Suite) 。通过学习如何在 CodeWarrior IDE 集成开发环境下编写,编译一个工程的例子,使读者能够掌握在 ADS 软件平台下开发和调试 ARM 汇编程序。

本节内容 :

3.1.1 ADS 软件组成介绍3.1.2 使用 ADS 创建工程3.1.3 用 AXD 进行代码调试

Page 4: 第 3 章  ADS 开发环境 和 ARM 汇编语言

4

3.1.1 ADS 软件组成介绍

ARM ADS 全称为 ARM Developer Suite 。是 ARM 公司推出的新一代 ARM 集成开发工具。现在 ADS 的最新版本是 1.2 ,它取代了早期的 ADS1.1 和 ADS1.0 。它除了可以安装在 Windows NT4 , Windows 2000 , Windows 98 和 Windows 95 操作系统下,还支持 Windows XP 和 Windows Me 操作系统。

ADS 由命令行开发工具, ARM 时实库, GUI 开发环境(Code Warrior 和 AXD) ,实用程序和支持软件组成。 有了这些部件,用户就可以为 ARM 系列的 RISC 处理器编写和调试自己的开发应用程序了。

Page 5: 第 3 章  ADS 开发环境 和 ARM 汇编语言

5

3.1.1 命令行开发工具

ADS 提供下面的命令行开发工具: Armcc ARM C 编译器,默认工具 Armcpp ARM C++ 编译器 tcc Thumb C 编译器 Tcpp Thumb C++ 编译器 Armasm ARM 和 Thumb 的汇编器 Armlink ARM 连接器 Armsd ARM 和 Thumb 的符号调试器

Page 6: 第 3 章  ADS 开发环境 和 ARM 汇编语言

6

3.1.2 ARM 运行时库 ANSI C 库函数:这个 C 函数库是由以下几部分组成:(1) 在 ISO C 标准中定义的函数;(2) 在 semihosted 环境下 (semihosting 是针对 ARM 目标机

的一种机制,它能够根据应用程序代码的输入 / 输出请求,与运行有调试功能的主机通讯。这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源 ) 用来实现C 库函数的与目标相关的函数;

(3) 被 C 和 C++ 编译器所调用的支持函数。ARM C 库提供了额外的一些部件支持 C++ ,并为不同的结构体系和处理器编译代码。 C++ 库函数包含由 ISO C++ 库标准定义的函数。

Page 7: 第 3 章  ADS 开发环境 和 ARM 汇编语言

7

库路径

库路径是在 ADS 软件安装路径的 lib 目录下 armlib 和 cpplib 的两个子目录。与这些库相应的头文件安装在 \adsv1_2\include 目录下

环境变量 ARMLIB 必须被设置成指向库路径。另外一种指定 ARM C 和 ARM C++ 库路径的方法是,在链接的时候使用操作选项 -libpath directory(directory 代表库所在的路径 ) ,来指明要装载的库的路径。

无需对 armlib 和 cpplib 这两个库路径分开指明,链接器会自动从用户所指明的库路径中找出这两个子目录。

Page 8: 第 3 章  ADS 开发环境 和 ARM 汇编语言

8

3.1.3GUI 开发环境 (Code Warrior 和 AXD)

CodeWarrior for ARM 是一套完整的集成开发工具,充分发挥了 ARM RISC 的优势 , 使产品开发人员能够很好的应用尖端的片上系统技术 . 该工具是专为基于 ARM RISC的处理器而设计的 , 它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个集成软件开发环境就能研制出 ARM 产品,在整个开发周期中 , 开发人员无需离开 CodeWarrior 开发环境 , 因此节省了在操做工具上花的时间 , 使得开发人员有更多的精力投入到代码编写上来,

CodeWarrior 集成开发环境 (IDE) 为管理和开发项目提供了简单多样化的图形用户界面。用户可以使用 ADS 的 CodeWarrior IDE 为 ARM 和 Thumb 处理器开发用 C , C++ ,或 ARM 汇编语言的程序代码。

Page 9: 第 3 章  ADS 开发环境 和 ARM 汇编语言

9

3.1.3.2 ADS 调试器

调试器本身是一个软件,用户通过这个软件使用 debug agent 可以对包含有调试信息的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。

ADS 中包含有 3 个调试器:(1) AXD(ARM eXtended Debugger) : ARM扩展调试器;(2) armsd(ARM Symbolic Debugger) : ARM 符号调试器;(3) Debug target

AXD 可以在 Windows 和 UNIX 下,进行程序的调试。它为用 C , C++ ,和汇编语言编写的源代码提供了一个全面的 Windows 和 UNIX 环境。

Page 10: 第 3 章  ADS 开发环境 和 ARM 汇编语言

10

3.1.4 ADS 实用程序 fromELF

这是 ARM映像文件转换工具。该命令将 ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括 plain binary(BIN格式映像文件 ), Motorola 32-bit S-record format(Motorola 32位 S格式映像文件 ), Intel Hex 32 format(Intel 32位格式映像文件 ) ,和 Verilog-like hex format(Verilog 16 进制文件 ) 。

armar

ARM 库函数生成器将一系列 ELF格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个链接器以代替几个 ELF 文件。

Flash downloader

用于把二进制映像文件下载到 ARM 开发板上的 Flash存储器的工具

Page 11: 第 3 章  ADS 开发环境 和 ARM 汇编语言

11

3.1.5 ADS 支持的软件

ADS 为用户提供下面的软件,使用户可以在软件仿真的环境下或者在基于 ARM 的硬件环境调试用户应用程序。

ARMulator

这是一个 ARM 指令集仿真器,集成在 ARM 的调试器 AXD 中,它提供对 ARM 处理器的指令集的仿真,为 ARM和 Thumb 提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。

Page 12: 第 3 章  ADS 开发环境 和 ARM 汇编语言

12

3.2 使用 ADS 创建工程 3.2.1 建立一个工程

在 CodeWarrior 中新建一个工程的方法有两种,可以在工具栏中单击“ New”按钮,也可以在“ File”菜单中选择“ New…”菜单。这样就会打开一个如图所示的对话框。

Page 13: 第 3 章  ADS 开发环境 和 ARM 汇编语言

13

提供了 7 种可选择的工程类型 ARM Executabl Image :用于由 ARM 指令的代码生成一个 ELF格式

的可执行映像文件; ARM Object Library :用于由 ARM 指令的代码生成一个 armar格式

的目标文件库; Empty Project :用于创建一个不包含任何库或源文件的工程; Makefile Importer Wizard :用于将 Visual C 的 nmake 或 GNU make

文件转入到 CodeWarrior IDE 工程文件; Thumb ARM Executable Image :用于由 ARM 指令和 Thumb 指令

的混和代码生成一个可执行的 ELF格式的映像文件; Thumb Executable image :用于由 Thumb 指令创建一个可执行的 E

LF格式的映像文件; Thumb Object Library :用于由 Thumb 指令的代码生成一个 armar格式的目标文件库。

在这里选择 ARM Executable Image ,在“ Project name:”中输入工程文件名 ,点击“ Location:” 文本框的“ Set…”按钮,浏览选择想要将该工程保存的路径,将这些设置好后,点击“确定” 即可 。

Page 14: 第 3 章  ADS 开发环境 和 ARM 汇编语言

14

这个时候会出现 ledcircle.mcp 的窗口,如图 8.2 所示,有三个标签页,分别为 files,link order,target 默认的是显示第一个标签页 files 。通过在该标签页点击鼠标右键,选中“ Add Files…” 可以把要用到的源程序添加到工程中。

Page 15: 第 3 章  ADS 开发环境 和 ARM 汇编语言

15

对于本例,由于所有的源文件都还没有建立,所以首先需要新建源文件。

在“ File”菜单中选择“ New” ,在打开的如图 8.1 所示的对话框中,选择标签页 File ,在 File name 中输入要创建的文件名,输入“ helloworld.S” ,点击“确定”关闭窗口。

在这里还有一个细节。在建立好一个工程时,默认的 target 是 DebugRel ,还有另外两个可用的 target ,分别为 Realse 和 Debug ,这三个 target 的含义分别为:

DebugRel :使用该目标,在生成目标的时候,会为每一个源文件生成调试信息;

Debug :使用该目标为每一个源文件生成最完全的调试信息;

Release :使用该目标不会生成任何调试信息。 在本例中,使用默认的 DebugRel 目标。

Page 16: 第 3 章  ADS 开发环境 和 ARM 汇编语言

16

3.2.2 编译和链接工程前的配置

点击 Edit菜单,选择“ DebugRel Settings…” 本课程实验程序都使用默认配置即可 更多详细配置说明 请看“ ARM ADS 集成开发环境的使用 .doc ”

Page 17: 第 3 章  ADS 开发环境 和 ARM 汇编语言

17

3.3 用 AXD 进行代码调试

AXD(ARM eXtended Debugger) 是 ADS 软件中独立于 CodeWarrior IDE 的图形软件,打开 AXD 软件,默认是打开的目标是 ARMulator 。这个也是调试的时候最常用的一种调试工具,本节主要是结合 ARMulator 介绍在 AXD 中进行代码调试的方法和过程,使读者对 AXD 的调试有初步的了解。

Page 18: 第 3 章  ADS 开发环境 和 ARM 汇编语言

18

编译,调试,运行

Page 19: 第 3 章  ADS 开发环境 和 ARM 汇编语言

19

调试过程中 ---查看内存数据情况

Page 20: 第 3 章  ADS 开发环境 和 ARM 汇编语言

20

调试过程中 ---查看寄存器数据情况

Page 21: 第 3 章  ADS 开发环境 和 ARM 汇编语言

21

提纲

1111

3333

2222

ARM 微处理器指令的分类

ARM 微处理器指令的寻址方式

3.2 ARM 指令分类及寻址方式

ARM 微处理器指令的条件域

Page 22: 第 3 章  ADS 开发环境 和 ARM 汇编语言

22

ARM微处理器的指令系统

ARM微处理器的指令集是加载 /存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载 /存储指令来完成。

ARM微处理器的指令集可以分为六大类 : 跳转指令 数据处理指令 程序状态寄存器( PSR)处理指令 加载 /存储指令 协处理器指令和异常产生指令

ARM微处理器指令的分类

Page 23: 第 3 章  ADS 开发环境 和 ARM 汇编语言

23

ARM微处理器指令表 -1

助记符 指令功能描述ADC 带进位加法指令ADD 加法指令AND 逻辑与指令B 跳转指令BIC 位清零指令BL 带返回的跳转指令BLX 带返回和状态切换的跳转指令BX 带状态切换的跳转指令

ARM微处理器指令的分类

Page 24: 第 3 章  ADS 开发环境 和 ARM 汇编语言

24

ARM微处理器指令表 -2

助记符 指令功能描述CDP 协处理器数据操作指令CMN 比较反值指令CMP 比较指令EOR 异或指令LDC 存储器到协处理器的数据传输指令LDM 加载多个寄存器指令LDR 存储器到寄存器的数据传输指令MCR ARM 寄存器到协处理器寄存器数据传输

ARM微处理器指令的分类

Page 25: 第 3 章  ADS 开发环境 和 ARM 汇编语言

25

ARM微处理器指令表 -3

助记符 指令功能描述MLA 乘加运算指令MOV 数据传送指令MRC 协处理器寄存器到 ARM 寄存器数据传输MRS 传送 CPSR 或 SPSR 的内容到通用寄存

器MSR 传送通用寄存器到 CPSR 或 SPSR 的指令MUL 32 位乘法指令

MLA 32 位乘加指令MVN 数据取反传送指令

ARM微处理器指令的分类

Page 26: 第 3 章  ADS 开发环境 和 ARM 汇编语言

26

ARM微处理器指令表 -4

助记符 指令功能描述ORR 逻辑或指令RSB 逆向减法指令RSC 带借位的逆向减法指令SBC 带借位减法指令STC 协处理器寄存器写入存储器指令STM 批量内存字写入指令STR 寄存器到存储器的数据传输指令SUB 减法指令

ARM微处理器指令的分类

Page 27: 第 3 章  ADS 开发环境 和 ARM 汇编语言

27

ARM微处理器指令表 -5

助记符 指令功能描述

SWI 软件中断指令

SWP 交换指令

TEQ 相等测试指令

TST 位测试指令

ARM微处理器指令的分类

Page 28: 第 3 章  ADS 开发环境 和 ARM 汇编语言

28

指令的条件域

当处理器工作在 ARM 状态时,几乎所有的指令均根据 CPSR 中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。

每一条 ARM 指令包含 4 位的条件码,位于指令的最高 4位 [31:28] 。条件码共有 16 种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令 B 可以加上后缀 EQ 变为 BEQ 表示“相等则跳转”,即当 CPSR 中的 Z 标志置位时发生跳转。

ARM微处理器指令的条件域

Page 29: 第 3 章  ADS 开发环境 和 ARM 汇编语言

29

指令的条件域表 -1

条件码 后缀 标 志 含 义0000 EQ Z 置位 相等0001 NE Z清零 不相等0010 CS C 置位 无符号数大于或等

于0011 CC C清零 无符号数小于0100 MI N 置位 负数0101 PL N清零 正数或零0110 VS V 置位 溢出0111 VC V清零 未溢出

ARM微处理器指令的条件域

Page 30: 第 3 章  ADS 开发环境 和 ARM 汇编语言

30

指令的条件域表 -2

条件码 后缀 标 志 含 义

1001 LS C清零 Z 置位 无符号数小于或等于

1010 GE N等于 V 带符号数大于或等于

1011 LT N 不等于 V 带符号数小于

1100 GT Z清零且( N等于 V)

带符号数大于

1101 LE Z 置位或( N不等于 V)

带符号数小于或等于

1110 AL 忽略 无条件执行

ARM微处理器指令的条件域

Page 31: 第 3 章  ADS 开发环境 和 ARM 汇编语言

31

ARM 指令的寻址方式

ARM 指令系统支持如下几种常见的寻址方式:

立即寻址 寄存器寻址 寄存器间接寻址 基址变址寻址 多寄存器寻址 相对寻址 堆栈寻址

ARM微处理器指令的寻址方式

Page 32: 第 3 章  ADS 开发环境 和 ARM 汇编语言

32

ARM 指令系统

详见: 常用 ARM指令集及汇编 .pdf

Page 33: 第 3 章  ADS 开发环境 和 ARM 汇编语言

33

例子 :ARM 程序设计

ARM 汇编 : 选择排序 详见 :示例程序 example/ADS_example/ 选择排序 /selectSort

ARM 汇编 :冒泡排序 详见 :示例程序 example/ADS_example/冒泡排序 /bubbleSort

其他示例