第4章 ARM汇编语言特性与编程基础

合集下载

4第四章 ARM汇编语言程序设计

4第四章  ARM汇编语言程序设计

2、 DCD(或DCDU,DCD也可用“&”代替) DCD( DCDU,DCD也可用“ 代替) 也可用 代替
语法格式: 语法格式:
标号
DCD( DCDU) DCD(或DCDU)
表达式
DCD( DCDU) DCD ( 或 DCDU ) 伪指令用于分配一片连续 的字存储单元并用伪指令中指定的表达式初 始化。 其中, 始化 。 其中 , 表达式可以为程序标号或数字 表达式。 表达式。 DCD分配的字存储单元是字对齐的 分配的字存储单元是字对齐的, 用DCD分配的字存储单元是字对齐的,而 DCDU分配的字存储单元并不严格字对齐 分配的字存储单元并不严格字对齐。 用DCDU分配的字存储单元并不严格字对齐。
使用示例: 使用示例:
DataTest DCD 4,5,6 ; 分 配 一 片连续的字存储单元并初始化。 片连续的字存储单元并初始化。
SPACE(SPACE也可用 也可用“ 代替) 3、 SPACE(SPACE也可用“%”代替)
语法格式: 语法格式:
标号
SPACE
表达式
SPACE伪指令用于分配一片连续 SPACE伪指令用于分配一片连续 的存储区域并初始化为0 其中, 的存储区域并初始化为 0 。 其中 , 表 达式为要分配的字节数。 达式为要分配的字节数。
1、 GBLA、GBLL和GBLS
语法格式: 语法格式: GBLA(GBLL或GBLS) 全局变量名
GBLA、GBLL和GBLS伪指令用于定义一个 、 伪指令用于定义一个ARM程 和 伪指令用于定义一个 程 序中的全局变量,并将其初始化。 序中的全局变量,并将其初始化。 GBLA伪指令用于定义一个全局的数字变量, 并初始 伪指令用于定义一个全局的数字变量, 伪指令用于定义一个全局的数字变量 化为0; 化为 ; GBLL伪指令用于定义一个全局的逻辑变量, 并初始 伪指令用于定义一个全局的逻辑变量, 伪指令用于定义一个全局的逻辑变量 化为F( 化为 (假); GBLS伪指令用于定义一个全局的字符串变量 , 并初 伪指令用于定义一个全局的字符串变量, 伪指令用于定义一个全局的字符串变量 始化为空; 始化为空;

ARM汇编语言程序设计基础.ppt

ARM汇编语言程序设计基础.ppt

一个汇编程序至少应该有一个代码段,由具体的设计需求,也可由多个 代码段和数据段组成,多个段在程序汇编链接时最终形成一个可执行的 映象文件。可执行映象文件通常由以下几部分构成: ① 一个或多个代码段,代码段的属性为只读。
② 零个或多个包含初始化数据的数据段,数据段的属性为可读写。 ③ 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
嵌入式系统 原理与应用
第四章 ARM汇编语言程序设计基础
XUPT
目 录
4.1 ARM汇编语言的程序结构
4.2 ARM汇编语言程序设计
4.3 C与汇编混合编程
本章小结
2
4.1 ARM汇编语言的程序结构
本章通过一个完整的ARM汇编例子入手,给出了ARM汇编程序的基本 框架,并详细介绍了编写汇编程序常用的汇编器伪指令,具备了这些基 础知识,学生就能自己动手编写汇编程序。 4.1.1 一个简单的ARM汇编程序例子 4.1.2 汇编器伪指令 4.1.3 汇编语言的规范
;定义代码段,名字为 ;定义数据段,名字为
AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头 ,则该段名需用 “ | ” 括起来,如 |1_data| 。属性字段表示该代 码段(或数据段)的相关属性,例如:CODE(定义代码段), DATA(定义数据段),READONLY(只读),READWRITE(读 写)。多个属性用逗号分隔。
num_d
0xFB 0xFF 0xFF 0xFF 0xEF 0xCD 0xAB 0x90
SPACE 语法格式:标号 SPACE 表达式 SPACE用于分配一片连续的存储区域并初始化为0。其中,表达式为 要分配的字节数。例如: data SPACE 1024 ;分配1024个字节空间并初始化为0 LTORG LTORG用于声明一个文字池,用来存放常量,特别是不符合8位位图 数据标准的常数。其使用情景及实例见本章的4.2.1节。

ARM汇编程序设计基础—第四章

ARM汇编程序设计基础—第四章

4.2 伪指令
ARM伪指令包括: ADR、ADRL、LDR和NOP 这些伪指令在汇编编译器对源程序进 行汇编处理时将被替换成ARM或Thumb 指令。
4.2 伪指令
ADR(小范围的地址读取指令)
该指令将基于PC的地址值或基于寄存器的地址值 放入寄存器中,语法格式: ADR{cond} register , expression 在汇编编译器处理源程序时,ADR伪指令被编译 器替换成一条合适的指令,通常是一条ADD指令或 SUB指令来实现该ADR伪指令的功能。 start mov r0,#10 adr r4,start xxx xxx , xxx xxx xx , xxx ;因为PC值为当前指令地址值加8字节,本ADR伪指 ;令将被编译器替换成SUB r4,pc,#0xc
ADD r4,pc,#0xE800 ADD r4,r4,#0x254 r4=pc-0xc+0xea60=pc+0xe800+0x254 =pc+0xea54
• ARM伪指令——中等范围的地址读取
ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地 址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址 。在汇编编 译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能 用两条指令实现,则产生错误,编译失败。 应用示例(源程序):
通用寄存器列表定义名称: RLIST
4.1 伪操作(directive)
• 定义局部变量——LCLA LCLL LCLS
语法格式:
LCLA(LCLL或LCLS) 局部变量名
LCLA、LCLL和LCLS伪操作用于定义一个ARM程序中的局部变量,并 将其初始化。
LCLA 伪操作用于定义一个局部的数字变量,并初始化为0; LCLL 伪操作用于定义一个局部的逻辑变量,并初始化为False(假); LCLS 伪操作用于定义一个局部的字符串变量,并初始化为空; 注意:以上三条伪操作用于声明局部变量,在其作用范围内变量名必须唯 一。

ARM汇编语言编程详解

ARM汇编语言编程详解

ARM汇编语言编程详解作者:机器人小助手摘要:本文旨在为读者提供一份详细的ARM汇编语言编程指南。

在介绍ARM汇编语言的基础知识后,我们将深入讨论ARM指令集的不同类型、寻址方式、寄存器的使用以及常见的编程技巧。

通过本文的学习,读者将能够深入了解ARM汇编语言的编程思想,并能够编写高效的ARM汇编语言程序。

一、ARM汇编语言简介ARM汇编语言是一种低级的程序设计语言,用于编写针对ARM架构的机器码指令。

它是一种类似于其他汇编语言的文本格式,用于表达机器指令和操作数。

通过编写ARM汇编语言程序,我们可以直接控制计算机的硬件资源,实现高效的程序执行。

二、ARM指令集概述ARM指令集是一套针对ARM架构的机器指令集合,包含多条不同功能的指令。

根据指令的功能和操作对象的不同,ARM指令可以分为数据处理指令、分支跳转指令、访存指令以及其他特殊指令。

1. 数据处理指令数据处理指令用于对操作数进行算术运算、逻辑运算、移位操作等。

这些指令可以对寄存器中的数据进行操作,并将结果存储回寄存器。

常见的数据处理指令有加法、减法、乘法、比较以及逻辑运算等。

2. 分支跳转指令分支跳转指令用于控制程序的流程,可以根据条件进行无条件跳转或有条件跳转。

通过分支跳转指令,我们可以实现程序的循环、条件分支等逻辑。

3. 访存指令访存指令用于读取或写入内存中的数据。

ARM汇编语言提供了多种不同的寻址方式,可以根据操作对象的不同进行选择。

使用访存指令,我们可以实现数据的存储和加载操作。

三、ARM汇编语言编程基础在进行ARM汇编语言编程时,我们需要了解一些基本的编程知识和技巧。

1. 寄存器的使用ARM架构提供了多个通用寄存器,用于存储临时数据。

在编写ARM汇编语言程序时,我们需要灵活使用寄存器,将数据加载到寄存器中进行计算,然后将结果保存回寄存器或内存。

2. 标志位的使用ARM架构提供了一组标志位,用于记录程序执行的状态和结果。

通过检查标志位的值,我们可以进行条件分支和判断,实现程序的流程控制。

第4章ARM汇编语言程序设计

第4章ARM汇编语言程序设计

(4)定义结构化内存表首地址/数据域




格式 MAP expr{,base_register} {label} FIELD expr 示例 定义一个内存表,其首地址为0x100。该表包含3个 域:A的长度为16个字节,位置为0x100;B的长度为 32个字节,位置为0x110;S的长度为256个字节,位 置为0x130。 MAP 0x100 A FIELD 16 B FIELD 32 S FIELD 256 一个寄存器相关的首地址定义结构化内存表。 MAP 0,R9;将结构化内存表的首地址设为R9的值 FIELD 4 LAB FIELD 4 LDR r0,LAB;相当于LDR R0,[R9,#4] 23
第4章 ARM汇编语言程序设计
(3)分配存储空间SPACE
• • • •
格式 {label} SPACE expr 说明 Label-可选的程序标号; Expr-分配的字节数。 示例 分配连续100字节的存储单元并初始化为0。 DataSpace SPACE 100
22
第4章 ARM汇编语言程序设计
14
第4章 ARM汇编语言程序设计
1)符号定义伪操作
(1)全局变量定义GBLA、GBLL及GBLS (2)局部变量定义LCLA、LCLL及LCLS 格式:GBLA/ GBLL/ GBLS variable 格式:LCLA/ GCLL/ GCLS variable 说明 • variable -全局/局部变量名称 • A-算术变量(初始化为0) • L-逻辑变量(初始化为假F) • S-字符串变量(初始化为空)
两种常用的ARM编译开发环境

ADS/SDT、RealView MDK等ARM公司推出的 开发工具 GNU ARM开发工具 ARM汇编语言的伪操作、宏指令在不同 的编译环境下有不同的编写形式和规则

arm体系架构与原理教学-04arm指令系统及汇编程序设计

arm体系架构与原理教学-04arm指令系统及汇编程序设计

TST
R1,#1
TST
R1,#0xffe
19
ARM 指令系统
TEQ指令
TEQ指令的格式为: TEQ{条件} 操作数1,操作数2
TEQ指令用于把一个寄存器的内容和另一个寄存器的内容 或立即数进行按位的异或运算,并根据运算结果更新CPSR 中条件标志位的值。该指令通常用于比较操作数1和操作 数2是否相等。
B指令是最简单的跳转指令。一旦遇到一个 B 指令, ARM 处理器将立即跳转到给定的目标地址,从那里继续 执行。注意存储在跳转指令中的实际值是相对当前PC值 的一个偏移量,而不是一个绝对地址,它的值由汇编器来 计算。它是24位有符号数,左移两位后有符号扩展为 32 位,表示的有效偏移为 26 位(前后32MB的地址空间)。如:
嵌入式系统教案
2019/7/20
提纲
第四章 ARM指令系统及汇编程序设计
1 ARM 指令系统 2 THUMB 指令系统 3 ATPCS 介绍
4 ARM和THUMB混合调用
2
ARM 指令系统
跳转指令
跳转指令用于实现程序流程的跳转,在ARM程序中有两种 方法可以实现程序流程的跳转:
使用专门的跳转指令。
BIC
R0,R0,#0x0b
30
ARM 指令系统
乘法指令与乘加指令
ARM微处理器支持的乘法指令与乘加指令共有6条,可分为 运算结果为32位和运算结果为64位两类,与前面的数据处
理指令不同,指令中的所有操作数、目的寄存器必须为通 用寄存器,不能对操作数使用立即数或被移位的寄存器, 同时,目的寄存器和操作数1必须是不同的寄存器。
算术逻辑运算指令完成常用的算术与逻辑的运算,该类指 令不但将运算结果保存在目的寄存器中,同时更新CPSR中 的相应条件标志位。

ARM汇编语言程序设计PPT精品文档

ARM汇编语言程序设计PPT精品文档

语法格式:
$标号
MACRO 宏名 $参数1,$参数2,…… 指令序列
MEND
示例:在ARM中完成测试-跳转操作需要两条指令,定义一条宏指令完成测试- 跳转操作
MACRO
$label
TestAndBranch $dest, $reg, $cc
定义全局变量:
GBLA、GBLL和GBLS
定义局部变量:
LCLA、LCLL和LCLS
变量赋值:
SETA、SETL、SETS
通用寄存器列表定义名称:RLIST
4
GBLA、GBLL和GBLS
GBLA、GBLL和GBLS 语法格式: GBLA(GBLL或GBLS)
全局变量名
GBLA objectsize Objectsize SETA 0xff
汇编控制伪操作
汇编控制(Assembly Control)伪操作用于控制汇编程 序的执行流程,常用的汇编控制伪操作包括以下几条:
IF、ELSE、ENDIF WHILE、WEND MACRO、MEND MEXIT
18
IF、ELSE、ENDIF
语法格式:
IF 逻辑表达式 指令序列1
ELSE 指令序列2
ARM 嵌入式系统 第4章 ARM汇编程序设计
1
ARM程序设计基础
伪操作(derective) 伪指令(Pseudo-instruction) ARM汇编语言语句格式 ARM汇编语言的程序格式 相关的程序示例
2
伪操作
符号定义伪操作 数据定义伪操作 汇编控制伪操作 其他伪操作
3
符号定义伪操作
SPACE objectsize
;全局的数字变量objectsize ,为0 ;将该变量赋值为0xff ;引用该变量

第四章ARM汇编语言程序设计

第四章ARM汇编语言程序设计

数据定义伪操作
数据定义伪操作用于为特定的数据分配存储单元,同时可完
成已分配存储单元的初始化。
DCB
分配一片连续的字节存储单元并初始化。
DCW
分配一片连续的半字存储单元并初始化。
DCD
分配一片连续的字存储单元并初始化。
SPACE
分配一片连续的存储单元并初始化为0。
MAP
定义一个结构化的内存表首地址。
的数据域。表达式的值为当前数据域在内存表中 所占的字节数。 FIELD伪操作常与MAP配合使用 来定义结构化的内存表。注意:MAP和FIELD仅 用于定义数据结构,并不实际分配存储单元。 FIELD也可以用 “#”代替。 由MAP和FIELD配合定义的内存表有3种:
(1)表达式是一个基于绝对地址的内存表: MAP 0x100 ;首地址为0x100
A FIELD 4 ;A的长度为4字节,位置为0x100 B FIELD 4 ;B的长度为4字节,位置为0x104 S FIELD 16 ;S的长度为16字节,位置为0x108 …. LDR R0, =A ;读取A的地址0x100 LDR R1, [R0] ;将A的内容读到R1
(2)表达式是一个数值,是一个相对地址的内存表:
MOV AH, 4CH
INT 21H
MAIN
ENDP
CODE
ENDS
END MAIN
4.1.2 汇编语言的语句格式
ARM汇编语言程序的每行语句由1~4部分组成。
[LABEL] OPERATION [OPERAND] [;COMMENT]
标号域
操作助记符域 操作数域
注释域
4.2 ARM汇编器的伪操作 •符号定义伪操作(Symbol Definition) •数据定义伪操作(Data Definition ) •汇编控制伪操作(Assembly Control) •框架描述伪操作(Frame Description) •其他伪操作(Miscellaneous)

ch4-刘彦文-第2版-嵌入式系统原理及接口技术

ch4-刘彦文-第2版-嵌入式系统原理及接口技术
地址到一个寄存器。 ⑴ 格式
ADR{condition} register,expression
嵌入式系统原理及接口技术(第2版)
8
⑵ 使用
使用中,ADR总是被汇编成一条指令。汇编器 试图产生一条ADD或SUB指令,装入地址。如 果不能用一条指令构造出地址,则产生错误信 息,汇编失败。
如果expression是相对程序的,计算产生的地址 必须与ADR伪指令在同一个代码区域。 ⑶ 使用举例
⒋ 标号(labels)
⑴ 相对程序的标号
⑵ 相对寄存器的标号
⑶ 绝对地址
嵌入式系统原理及接口技术(第2版)
22
⒌ 局部标号(local labels) 局部标号使用0~99范围内的一个数,可以有选
择地在其后跟随一个表示当前范围的名字。 局部标号用在指令中,指出分支的目标处。
局部标号格式为:
n{routname}
第4章 ARM汇编语言特性 与编程基础
嵌入式系统原理及接口技术(第2版)
1
本章重点 :
⑴ ARM汇编器提供的汇编语言特性,包括行格 式、预定义名和内建变量、伪指令、符号、指 示符、表达式和操作符等,以及它们的使用;
⑵ ARM汇编语言编程基础,包括调用子程序、 条件执行、装入常数和地址到寄存器、装入和 存储多个寄存器、多路分支等内容,以及对应 的程序代码。
⑶ 符号名中对大、小写字母是敏感的。
⑷ 在符号名中所有的字符是有意义的。
嵌入式系统原理及接口技术(第2版)
19
⑸ 在它们的作用范围内,符号名必须是唯一的。
⑹ 符号名必须不使用内建变量名、预定义寄存 器名和预定义协处理器名。
⑺ 符号名应该不使用与指令助记符或指示符相 同的名字。

第4章 ARM程序设计基础-伪指令2

第4章 ARM程序设计基础-伪指令2
X:LAND:Y X:LOR:Y :LNOT:Y X:LEOR:Y ;表示将X和Y作逻辑与的操作 ;表示将X和Y作逻辑或的操作 ;表示将Y作逻辑非的操作 ;表示将X和Y作逻辑异或的操作
操作结果为{FALSE}或{TRUE}
Assemble Language of ARM
17
3、 字符串表达式及运算符
第4章 ARM程序设计基础
4.2 汇编语言的语句格式
ARM(Thumb)汇编语言的语句格式为: {标号} {指令或伪指令} {;注释} 标号必须从一行的行头开始,并且符号中不能包含空格。 指令不能从一行的行头开始,即在一行语句中,指令的前面必须有 空格或者标号。 在汇编语言程序设计中,每一条指令的助记符可以全部用大写、或 全部用小写,但不允许在一条指令中大、小写混用。 寄存器可以大写或小写。 伪指令有些必须在一行的开头顶格书写,另外一些必须留有空格。 注释以分号“;”开头,到行末结束。 如果一条语句太长,可将该长语句分为若干行来书写,在行的末尾 用“\”表示下一行与本行为同一条语句。 在源程序中,语句之间可以插入空行,增强可读性。
Assemble Language of ARM 8
变量替换的特殊情况: 如果需要字符$,则用$$来表示。 包含在两个竖线(|)之间的$不进行变量替换,但如果竖线是 在双引号内,则将进行变量替换。 使用“.”来表示变量名称的结束。
例如 STR1
SETS
“STRING”
STR2
SETS
X X X X X X X
= Y > Y < Y >= Y <= Y /= Y <> Y
;表示X等于Y ;表示X大于Y ;表示X小于Y ;表示X大于等于Y ;表示X小于等于Y ;表示X不等于Y ;表示X不等于Y
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4
1 ADS工具包的组成


ADS是ARM公司推出的集成开发工具包,是专 门用于ARM相关应用开发和调试的综合性软件。 目前常用的版本是1.2,在功能和易用性上比 早期的SDT都有提高,是一款功能强大又易于 使用的开发工具。 ARM ADS包含有CodeWarrior IDE、编译器、 链接器、调试器、指令集模拟器、ARM开发包 和应用库等部分,可以用ADS来开发、编译、 调试采用包括C、C++和ARM汇编语言编写的 程序。
7
ADS工具包的组成(三)


4. 调试器(Debuggers)
(1)调试器类型





AXD基于WindowsXX/NT风格,具有一般意义 上调试器的所有功能,包括简单和复杂断点设 置、栈显示、寄存器和存储区显示、命令行接 口等。 Armsd作为一个命令行工具辅助调试或者用在 其他操作系统平台上。
22
CodeWarrior IDE主要提供以下功能:
1.按照工程项目(Project)的方式来组 织源代码文件、库文件和其他文件。 2.设置各种生成选项(Build options), 以生成不同配置的映像文件。 3.一个源代码编辑器。 4.一个文件浏览器。 5.在文本文件中进行字符串搜索和替换。 6.文本文件比较功能。 7.用户自定义界面
C编译器
C编译器 C++编译器 C++编译器
C
C C或C++ C或C++
32位ARM代码
16位Thumb代码 32位ARM代码 16位Thumb代码
15
(B) ARM汇编器

ADS包含一个独立的ARM汇编器armasm 和一个内置在C/C++编译器中的内联汇 编器(inline assembler)。这两个汇编 器能够处理基本相同的汇编代码。
10
ADS工具包的组成(六)

5. ARM开发包和函数库



ARM开发包由一些底层的例程和库组成,可 以帮助用户快速开发基于ARM的应用程序和 操作系统。 ADS的ARM应用库完善并增强了SDT中的函 数库,同时还包括一些非常有用的源码例程。 具体包括系统启动代码、串行口驱动程序、 时钟例程、中断处理程序等,
① ARM Executabl Image:ARM可执行映像文件模 板。用于由ARM 指令的代码生成一个ELF 格式的可 执行映像文件; ② ARM Object Library:ARM目标文件库模板。用于由 ARM 指令的代码生成一个armar 格式的目标文件库; ③ Empty Project:空工程模板。用于创建一个不包含 任何库或源文件的工程; ④ Makefile Importer Wizard:Makefile导入向导模板。 用于将Visual C 的nmake 或GNU make 文件转入到 CodeWarrior IDE工程文件;
5
ADS工具包的组成(一)


1. CodeWarrior IDE CodeWarrior IDE(集成开发环境)包括工 程管理器、代码生成接口、语法敏感编辑器、 源文件和类浏览器、源代码版本控制系统接口 以及文本搜索引擎等。ADS仅在其PC机版本中 集成了该IDE。 CodeWarrior IDE为管理和开发项目提供了简 单多样化的图形用户界面,用户可以使用ADS 的CodeWarrior IDE为ARM和Thumb处理器开 发用C、C++或者ARM汇编语言编写的程序代 码。
23
CodeWarrior中常用的两个术语

目标系统(Target system)

目标系统是指应用程序运行的环境,可以是基 于ARM 的硬件系统,也可以是ARM仿真运行环 境。比如,当应用程序运行在ARM评估板上时, 目标系统就是该评估板。

生成目标(Build target)

生成目标是指生成特定目标文件的选项设置 (包括汇编选项、编译选项、连接选项以及连 接后的处理选项等)和所用的所有文件的集合。 通常一个生成目标对应一个目标映像文件。
9
ADS工具包的组成(五)

(2)调试方式

在ARM体系中,可以选择Multi-ICE(Multiprocessor in-circuit emulator)ARMulator或 Angel多种调试方式。ቤተ መጻሕፍቲ ባይዱARMulator

指令集模拟器(Instruction Set Simulators)

用户使用指令集模拟器无需任何硬件即可在 PC机上完成一部分调试工作。
11
2 ADS开发工具集

2.1 ADS命令行开发工具 2.2 GUI开发工具 2.3 ADS实用工具
12
2.1 ADS命令行开发工具

(1)armcc

armcc是 ARM C 编译器。在命令控制台环境下,输 入命令:C:> armcc –help可以查看 armcc 的语法 格式以及最常用的一些操作选项。 armcpp 是 ARM C++ 编译器。它将 ISO C++ 或 EC++ 编译成 32 位 ARM 指令代码。
调试器部分包括两个调试器: ARM扩展调试器AXD(ARM eXtended Debugger ) ARM符号调试器armsd(ARM symbolic debugger)
8
ADS工具包的组成(四)

AXD调试器本身是一个软件,用户通过这个软 件可以对包含有调试信息的、正在运行的可执 行代码进行变量的查看、断点的设置、单步执 行等调试操作。在ARM体系中,它有Multi-ICE、 ARMulator和Angel等几种方式。AXD可以在 Windows和UNIX下进行程序的调试,它为用C、 C++和汇编语言的源代码提供了一个全面的 Windows和UNIX环境。
armlink是 ARM 连接器。 armsd是 ARM 和 Thumb 的符号调试器。
14

(5) armasm


(6) armlink


(7) armsd

(A) ARM编译器
ADS提供四种编译器, 下表给出了这4种编译器 的总结
编译器名称 编译器类型 源代码 编译输出
armcc
tcc armcpp tcpp
18
连接器的输入和输出

连接器的输入是:

一个或多个ELF目标格式的目标文件,或(可选 的)一个或多个由armar工具产生的库。

缺省情况下,连接器的输出是非可重定位映像, 代码从内存地址0x30000000开始,数据段紧 随其后。可以通过连接器选项或一个配置文件 来指定代码段和数据段存放在什么内存地址。
第4章 ARM汇编语言特性 与编程基础
本章重点 :


⑴ ARM汇编器提供的汇编语言特性,包括行格 式、预定义名和内建变量、伪指令、符号、指 示符、表达式和操作符等,以及它们的使用; ⑵ ARM汇编语言编程基础,包括调用子程序、 条件执行、装入常数和地址到寄存器、装入和 存储多个寄存器、多路分支等内容,以及对应 的程序代码。
19
连接正确的输出
① 一个ELF可执行格式的可执行映像。 ② 一个ELF目标格式的部分连接的目标文 件。 通过fromELF工具,一个ELF的可执行 映像也可以转化为其他的文件格式。
20
2.2 GUI开发工具

ADS的GUI开发工具主要包括两个独立的 工具:CodeWarrior IDE(CodeWarrior 集成开发环境)和AXD(ARM eXecutor Debugger)。
29
调试目标和调试代理


英文术语分别是debug target和debug agent 调试目标:被调试程序运行所在的目标设备或 仿真软件。 调试代理:运行在调试目标上,接受并执行主 机上调试器发来的命令,例如,在目标程序中 设置断点、单步执行、读内存、写内存等。
16
(C) ARM连接器

ARM连接器armlink可以有如下功能:



将一组目标文件或库连接产生一个可执 行的ELF映像文件; 将一组目标文件部分连接产生一个新的 目标文件,用于以后的连接; 指定代码和数据在内存中的位置; 为连接产生的文件产生调试和引用信息
17
连接操作的输出结果



目标文件由输入段(input section)组成,输 入段可以是RO(只读,Read-Only)段、RW (读写,Read/Write)段、ZI(零初始化, Zero-Initialized)段。 armlink可以利用这些属性把输入段分组归并为 更大的生成块,分别是输出段(output section)、域(region)和映像(image)。 输出段大致相当于ELF的段(segment)。
27
7个ADS工程模板的截图
28
(2) AXD


AXD(ARM扩展调试器,ARM eXtended Debugger)是ADS的图形化调试工具。AXD是 一个功能强大的调试工具,提供了多种辅助调试 手段用来对用户程序进行调试,包括断点、观测 点和观测项等。 其他两个调试器:armsd(ARM符号调试器, ARM Symbolic Debugger)和ADW/ADU (Application Debugger Windows/UNIX)也是 ADS的调试工具。前者在命令行工具里已简单介 绍,后者是ADS老版本的图形化调试工具。

(2)armcpp


(3) tcc

tcc 是 Thumb C 编译器。该编译器通过了 Plum Hall C Validation Suite 为 ANSI 一致性的测试。tcc 将 ANSI C 源代码编译成 16 位的 Thumb 指令代码。
相关文档
最新文档