第9章 ARM汇编语言程序设计基础
第9章 ARM汇编语言程序设计基础

当表达式为 32 位的常量时,可以指定表达式的数据 类型,可以有以下三种类型: CODE16 、 CODE32 和 DATA 。
MAP 和FILED 只定义数据结构,不实际分配存储单元。
汇编控制伪指令
用于控制汇编程序的执行流程。
常用的汇编控制伪指令包括以下几条: (1) IF、ELSE、ENDIF
语法格式:
IF 逻辑表达式 指令序列 1 ELSE 指令序列 2 ENDIF
(2) WHILE、WEND
(循环)
语法格式: WHILE 逻辑表达式 指令序列 WEND
用于对一个通用寄存器列表定义名称,使用
该伪指令定义的名称可在 ARM 指令 LDM/STM 中使用。
语法格式:名称 RLIST { 寄存器列表 }
在 LDM/STM 指令中,列表中的寄存器访问次序为根据寄 存器的编号由低到高,而与列表中的寄存器排列次序无关。
内存分配伪指令
为特定的数据分配存储单元,同时可完成已分配存储单 元的初始化。
(1)DCB 用于分配一段连续的字节单元并初始化 语法格式: 标号 DCB 表达式 str DCB “This is a test!”
(2) DCW(或DCWU)
用于分配一段连续半字节单元 并初始化 DCW: 半字对齐 DCWU:不严格半字对齐 语法格式: 标号 DCW (或 DCWU ) 表达式 Str DCW 1,2,3
2. 汇编语言程序中常用的符号
① 符号名不应与指令或伪指令同名; ② 符号在其作用范围内必须唯一; ③ 符号区分大小写,同名的大、小写符号被视为两个不同 的符号; ④ 自定义的符号名不能与系统保留字相同。
ARM汇编语言程序设计

是由物理寄存器r1来存放r0所代表的值。
Chavezwang@
计算机学院嵌入式实验室
19
北京理工大学珠海学院
嵌入式系统设计及应用开发
内联汇编中虚拟寄存器举例
int main(void) #include <stdio.h> void test_inline_register(void) { int i; int r5,r6,r7; __asm { MOV i,#0 loop: MOV r5,#0 MOV r6,#0 MOV r7,#0 ADD i,i,#1 CMP i,#3 BNE loop } }
北京理工大学珠海学院
嵌入式系统设计及应用开发
何时使用内联汇编和嵌入型汇编
程序中使用饱和算术运算(Saturating arithmetic),如SSAT16 和 USAT16指令。
程序中需要对协处理器进行操作。 在C或C++程序中完成对程序状态寄存器的操作
注:使用内联汇编编写的程序代码效率也比较高
③ 不能在程序中使用“.”或{PC}得到当前指令地址值。
④ 在16进制常量前加“0x”。
⑤ 建议不要对堆栈进行操作。
Chavezwang@
计算机学院嵌入式实验室
16
北京理工大学珠海学院
嵌入式系统设计及应用开发
内联汇编的限制2
⑥ 编译器可能会使用r12和r13寄存器存放编译的中间结果, 在计算表达式值可能会将寄存器r0~r3、r12及r14用于子程 序调用。另外在内联汇编中设置程序状态寄存器CPSR中的 标志位NZCV时,要特别小心。内联汇编中的设置很可能会 和编译器计算的表达式的结果冲突。
编译器使用一套规则的来设置寄存器的用法
02实验二 ARM汇编语言程序设计

实验二 ARM汇编语言程序设计一、实验目的1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程2.掌握ARM汇编指令二、实验设备1. EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆。
2. PC操作系统WIN98或WIN2000或WINXP, ADS1.2集成开发环境,仿真器驱动程序。
三、汇编语言简介1.ARM汇编的一些简要的书写规范ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。
ARM汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。
在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。
注释使用“;”号,注释的内容由“;”号起到此行结束,注释可以在一行的顶格书写。
详细的汇编语句及规范请参照ARM汇编的相关书籍、文档。
2. ARM汇编语言程序的基本结构在ARM汇编语言程序中,是以程序段为单位来组织代码。
段是相对独立的指令或数据序列,具有特定的名称。
段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。
一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。
可执行映像文件通常由以下几部分构成:◆一个或多个代码段,代码段为只读属性。
◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。
◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。
源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。
3. 简单的小例子下面是一个代码段的小例子AREA Init,CODE,READONLYENTRYLDR R0, =0x3FF5000LDR R1, 0x0fSTR R1, [R0]LDR R0, =0x3F50008LDR R1, 0x1STR R1, [R0]……END在汇编程序中,用AREA指令定义一个段,并说明定义段的相关属性,本例中定义了一个名为Init的代码段,属性为只读。
ARM汇编语言程序设计基础

name CN expr name CP expr name DN/SN expr name FN expr
符号定义伪操作举例
GBLA arithmetic ;定义变量 定义变量 arithmitic SETA 0xEF ;赋值 赋值 ;arithmitic EQU 0xEF GBLL logical logical SETL {TRUE} ;{} GBLS SETS string “haha”
伪操作
符号定义( 符号定义(Symbol Definition) ) 伪操作 内存分配(数据定义)( )(Data Definition) 伪操 内存分配(数据定义)( ) 作 汇编控制( 汇编控制(Assembly Control) ) 伪操作 其他 (Miscellaneous) 伪操作 )
1、符号定义伪操作
name LIST{list of registers} } {
name CN expr name CP expr name DN/SN expr name FN expr
1、符号定义伪操作
伪操作 语法格式 作用
声明一个全局的算术“伪变量” 并将其初始化成 。 声明一个全局的算术“伪变量”,并将其初始化成0。 声明一个全局的逻辑变量,并将其初始化成 声明一个全局的逻辑变量,并将其初始化成{FALSE}。 。 声明一个全局的字符串变量,并将其初始化成空串“”。 声明一个全局的字符串变量,并将其初始化成空串“”。 “” 声明一个局部的算术变量,并将其初始化成 。 声明一个局部的算术变量,并将其初始化成0。 声明一个局部的逻辑变量,并将其初始化成 声明一个局部的逻辑变量,并将其初始化成{FALSE}。 。 声明一个局部的串变量,并将其初始化成空串“”。 声明一个局部的串变量,并将其初始化成空串“”。 “” 给一个全局或局部算术变量赋值。 给一个全局或局部算术变量赋值。 给一个全局或局部逻辑变量赋值。 给一个全局或局部逻辑变量赋值。 给一个全局或局部字符串变量赋值。 给一个全局或局部字符串变量赋值。 为一个通用寄存器列表定义名称。 为一个通用寄存器列表定义名称。 为一个协处理器的寄存器定义名称。 为一个协处理器的寄存器定义名称。 为一个协处理器定义名称。 为一个协处理器定义名称。 DN/SN为一个双精度 单精度的 为一个双精度/单精度的 寄存器定义名称。 为一个双精度 单精度的VFP寄存器定义名称。 寄存器定义名称 为一个FPA浮点寄存器定义名称。 浮点寄存器定义名称。 为一个 浮点寄存器定义名称
ARM汇编语言程序设计基础

RealView实时库包含有RTX 实时内核、Flash 文件系统、TCP/IP
协议簇、RTL-CAN(控制域网络)等。RealView实时库的实时内 核RTX免版税使用,但源码需要付费。RealView实时库带有TCP/IP 网络协议簇,完整的嵌入式网络协议族。带有Flash文件系统,可 在内存和存储系统中产生、修改文件。带有CAN协议,实现通用 ARM MCU设备的CAN驱动。带有USB协议,适用于标准Windows 设备类。所带有的例子和模板可以帮助用户快速开始使用RL-ARM 组件,所有RL-ARM组件都免版税使用。在MDK中集成了对RTI.的 配置以及一些工具。
9.1.4 μVision IDE调试器
ARM宏汇编器(armasm)可以完成标准的宏处理。条件汇编可从同一 源文件得到不同的目标文件。符号引用列表文件包含可选的符号交叉引 用信息,以提供源文件的详细信息。 ARM链接器(armlink)产生的详细列表文件非常易于用户理解。它包 含内存配置、输入模块、内存映像、符号表和交叉引用信息。全局代码 列表文件包含由链接器产生的符号反汇编信息。静态堆栈分析帮助链接 器在链接时处理堆栈请求。 ARM库管理器(armar)对库文件进行模块管理,为链接器组合、引用 多个模块提供方便。μVision IDE也可生成库文件。变量和函数引用。可 从库中抽取所需的模块,模块中的代码段如果未在应用中被使用,则它 们不会被包含在最终的输出中。库为分布在初始源代码中的大量函数和 程序段提供了一种载体。
9.1.1 µVision4 IDE
μ Vision IDE是一个集项目管理器、源代码编辑器、调试器等于一体的
集成开发环境,是一个基于Windows操作系统的嵌入式软件开发平台, µVision4 IDE主要特性如下:
arm汇编指令格式

arm汇编指令格式ARM汇编指令格式ARM汇编语言是一种底层程序设计语言,用于直接操控ARM处理器的指令和寄存器。
ARM汇编指令格式是编写ARM汇编程序的基础,本文将一步一步详细解答与ARM汇编指令格式相关的问题。
第一部分:ARM汇编基础在深入理解ARM汇编指令格式之前,我们需要先了解一些基本概念。
ARM 处理器是英国公司ARM Holdings开发的一种低功耗、高性能的处理器体系架构,广泛应用于移动设备、嵌入式系统等领域。
ARM汇编语言是ARM 处理器的机器码的可读形式,用于编写底层程序。
在ARM汇编语言中,指令以二进制形式表示,通常以助记符的形式出现。
每条指令占用一个或多个字(通常一个字等于4个字节),按字节编址。
第二部分:指令格式详解ARM处理器的指令格式包括指令助记符、操作数和操作码等部分。
ARM 汇编指令格式的一般形式如下:[label:] mnemonic{cond}{S} Rd, Rn, Operand2其中,[label:]为可选项,表示标号,用于在程序中跳转或引用;mnemonic为指令的助记符,用于表示具体的操作;{cond}为可选项,表示条件代码,用于指定是否执行指令;{S}为可选项,表示是否更新条件代码;Rd表示目标操作数的寄存器;Rn表示源操作数的寄存器;Operand2为第二个操作数。
指令助记符(mnemonic)代表具体的指令功能,例如ADD表示加法、MOV表示数据传输等。
条件代码(cond)用于指定是否执行指令,常用的条件代码有EQ(等于)、NE(不等于)、GT(大于)等。
这样,我们可以根据需要选择是否在特定条件下执行指令。
更新条件代码(S)表示执行指令后是否更新条件代码寄存器。
如果设置了该标志位,则根据指令的结果设置条件代码寄存器。
目标操作数(Rd)是指令的结果存储的寄存器,源操作数(Rn)是参与指令计算的寄存器。
操作数(Operand2)是指令的第二个操作数,可以是立即数、寄存器的偏移值、寄存器的移位值等。
ARM汇编语言及C语言程序设计基础
示例 CMP ADD ADD 示例 CMP BHI ADD END
R1,#3 ;比较R1和#3 HI R0,R0,R1 ;if R1>3 then R0=R0+R1 LS R0,R0,#3 ;if R1<3 then R0=R0+3
R1,#3 ;比较R1和#3 END ;if R1>3 then END R0,R0,#3 ; R0=R0+3
4.1.3 ARM汇编语言伪指令
伪指令是ARM处理器支持的汇编语言程序 里的特殊助记符,它不在处理器运行期间由机器执 行,只是在汇编时将被合适的机器指令代替成ARM 或Thumb指令,从而实现真正的指令操作。
ARM汇编语言伪指令如表3-2所示
表4-2 ARM汇编语言伪指令列表
伪指令 语法格式 ADR{cond} register, = expression ADRL{cond}register , = expression LDR{cond} register,= expression NOP 功能 它将基于PC相对偏移的地址值或 基于寄存器相对偏移的地址值读 取到寄存器中。 它将基于PC相对偏移的地址值或 基于寄存器相对偏移的地址值读 取到寄存器中。 将一个32位的常数或者一个地址 值读取到寄存器中,可以看作是 加载寄存器的内容。 NOP是空操作伪指令,在汇编时 将会被替代成ARM中的空操作
AREA BlkCpy,CODE,READONLY ;声明代码段 SWI_WriteC EQU &0 ;输出R0中的字符 SWI_Exit EQU &11 ;程序结束 ENTRY ;代码的入口 ADR R1,TABLE1 ;R1→TABLE1 ADR R2,TABLE2 ;R2→TABLE2 ADR R3,T1END ;R3→T1END LOOP1 LDR R0,[R1],#4 ;读取TABLE1的第一个字 STR R0,[R2],#4 ;拷贝到TABLE2 CMP R1,R3 ;结束? BLT LOOP1 ;若非,则再拷贝 ADR R1,TABLE2 ;R1→TABLE2 LOOP2 LDRB R0,[R1],#1 ;读取下一个字 CMP R0,#0 ;检查文本终点 SWINE SWI_WriteC ;若非终点,则打印 BNE LOOP2 ;并返回LOOP2 SWI SWI_Exit ;执行结束 TABLE1 = “This is the right string!”,&0a,&0d,0 T1END ALIGN ;保证字对准 TABLE2 = “This is the wrong string!”,0 END ;程序源代码结束
ARM汇编程序基本知识
ARM汇编程序根本知识1.汇编程序的根本组成ARM汇编语言程序中,程序是以程序段为单位组织代码的。
段是相对独立的指令或者代码序列,拥有特定的名称。
段的种类有代码段、数据段和通用段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据,通用段不包含用户代码和数据,所有通用段共用一个空间。
段使用AREA伪操作来定义,并且说明相关属性,如代码段定义AREA Init, CODE, READONLY…数据段定义AREA Stack1,DATA,READWRITE,NOINIT,ALIGN=3……等一个汇编程序至少应该有一个代码段,可以有零或者多个数据段。
在格式上,一个汇编程序需要至少有一个ENTRY〔关于ENTRY具体内容看伪操作符ENTRY〕,还需要在汇编源文件完毕处,写上END表示该源文件的完毕。
如一个根本的汇编源程序AREA Init, CODE, READONLY ;定义一个代码段ENTRY ;标记程序入口点Start LDR R0,0x3FF5000 ;标号Start可以要,也可以不要LDR R1,0XffSTR R1,[R0]LDR R0,=0x3FF5000LDR R1,0x01STR R1,[R0]……END ;END伪操作表示根源文件完毕当汇编程序较长时,可以分割为多个代码段和多个数据段,多个段在程序编译时,最终形成一个可执行的映像文件。
一个可执行映像文件通常由以下几局部组成一个或者多个代码段,代码段属性为只读〔只读数据也放在代码段?RO〕零个或者多个初始化数据的数据段,可读写〔存放初始化了的变量数据,RW〕零个或者多个不包含初始化数据的数据段,可读写〔所有未初始化的变量,也就是ZI〕器根据系统默认或者用户设定的规那么,将各段安排在存储器中的相应位置,因此源程序中段之间的相对位置与可执行映像文件中的段的相对位置一般不会一样。
2.汇编语句应该注意的地方汇编语句格式[LABEL] OPERATION, [OPERAND], [;MENT]LABEL必须在一行的开头写。
ARM9汇编语言
$label1.loop2;$label.loop1为宏体的内部标号
BL$p1;参数1为一个子程序的名称
BGT$label.loop2
……
ADR$p2
……
MEND;宏定义结束
在程序中调用该宏:
examjumpsub,det;调用jump,宏的标号为exam
;参数1为sub,参数2为det
ADRR0,DATA1;读取DATA1的地址0x908
LDRR2,[R0];读取DATA1的数据
4.
IF、ELSE、ENDIF
GBLLTest
IF Test = TRUE
ELSE
ENDIF
WHILE、WEND
GBLACounter
CounterSETA3
WHILECounter < 10
;
CounterSETA Counter + 1
SPACE
分配一片连续的存储单元并初始化为0,表达式是要分配的字节数。
例如,DataSpaceSPACE100
MAP
MAP表达式{,基址寄存器},定义一个结构化的内存表的首地址。
例如,MAP 0x100,R0;R0存在时首地址为R0+0x100,R0不存在时首地址为0x100。
FIELD
定义结构化内存表中的数据域,与MAP结合使用。MAP伪操作和FIELD伪操作定义的内存表有3种。
操作数域可以是常量、变量、标号、寄存器、表达式,不同对象之间用逗号隔开。
注释域以“;”开头,汇编程序对“;”之后的部分不予汇编。
2
在ARM(Thumb)汇编程序设计中,使用GBLA、GBLL、GBLS伪操作声明全局变量,使用LCLA、LCLL、LCLS声明局部变量,并可以使用SETA、SETL、SETS对其进行初始化。
第九章习题答案_ARM程序设计
9.15 阅读程序,说明如下程序完成的功能。
llsearch CMP R0, #0 LDRNEB R2, [R0] CMPNE R1, R2 LDRNE R0, [R0, #4] BNE llsearch MOV PC, LR
该程序功能为: 若R0≠0,则将R0指向的字节数据读入R2;
若R0≠0且R1≠R2,则将R0+4指向的双字数据存入R0中; 循环,直至R0=R1退出子程序。
;存放累加和 ;存放加数 ;累加次数
#2 R1 #1
;调整累加次数
8/52
9.12 试把如下C函数改写成汇编语言函数。
(1) int SubXY(int x, int y) { return x-y; } (2) void SubXY(int x, int y, int z) { z = x-y; } ( 1) AREA SubXY ,CODE,READONLY EXPORT SubXY SUB R0,R0,R1 MOV PC,LR END ( 2) AREA SubXY ,CODE,READONLY EXPORT SubXY SUB R2,R0,R1 LDR R3,=z STR R2,[R3] MOV PC,LR END
9.2 汇编语言和C语言相比,各具有什么特点?
答:汇编语言是一种用文字助记符来表示机器指令的符号 语言,是最接近机器码的一种语言。汇编语言依赖于 机器硬件,不同CPU提供的汇编指令可能有很大的不 同,因此汇编源程序几乎不具有移植性;但汇编语言 程序主要优点是速度快、效率高,更能发挥机器硬件 的长处;
汇编语言源程序汇编汇编程序机器语言程序目标代码c语言源程序编译或解释编译程序35293试用汇编代码完成如下c语言代码完成的功能
微处理器系统结构与嵌 入式系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多任务(可以在单CPU上管理几个工作或任务); 实时控制 (可以控制任务在既定时间内完成); 任务间通信 (可以实现系统中的任务间通信); Internet 连接(通过以太网或串口(Modem)); 嵌入式Web 服务器(包括CGI 脚本); E-mail 公告(通过SMTP)。
9.1.4 μVision IDE调试器
μVision IDE调试器用于调试和测试应用程序,它提供了模拟调试
模式和目标硬件调试模式两种操作模式,可以在Options for Target→Debug对话框内进行选择。 1.模拟调试模式
μVision IDE模拟器的功能强大,能模拟整个MCU的行为,如高效指 令集仿真,中断仿真,片内外围设备仿真,ADC,DAC,EBI, Timers,UART,CAN,I2C,I/O和外部信号仿真等。模拟调试模式 可以在无目标系统硬件情况下,将μVision IDE调试器配置为软件模 拟形式,用来调试和测试所开发的软件。
ARM宏汇编器(armasm)可以完成标准的宏处理。条件汇编可从同一 源文件得到不同的目标文件。符号引用列表文件包含可选的符号交叉引 用信息,以提供源文件的详细信息。 ARM链接器(armlink)产生的详细列表文件非常易于用户理解。它包 含内存配置、输入模块、内存映像、符号表和交叉引用信息。全局代码 列表文件包含由链接器产生的符号反汇编信息。静态堆栈分析帮助链接 器在链接时处理堆栈请求。 ARM库管理器(armar)对库文件进行模块管理,为链接器组合、引用 多个模块提供方便。μVision IDE也可生成库文件。变量和函数引用。可 从库中抽取所需的模块,模块中的代码段如果未在应用中被使用,则它 们不会被包含在最终的输出中。库为分布在初始源代码中的大量函数和 程序段提供了一种载体。
输入希望新建工程的名字(如Test1)即可创建一个新的工程。
图9.1.3 “Create New Project”对话框
输入工程名后Test1,单击保存,即可弹出“Select Device for Target(器件选择)”对话框如图9.1.4所示,在图9.1.4所示对话 框中选择所需处理器,如S3C2410A。
9.1 MDK-ARM开发工具
MDK-ARM出众的价格优势和功能优势,已经成为ARM软件开发工具的 标准,被全球超过10万的嵌入式开发工程师验证和使用,目前,MDKARM在国内ARM开发工具市场已经达到90%的占有率。
MDK主要包含μVision IDE、RVCT、RTL实时库(RealView Real-Time Library)和ULINK USB - JTAG仿真器4个核心组成部分。下面分别对这 4个部分进行简要介绍。
9.1.1 µVision4 IDE
用于设置开发工具配置的对话框; 真正集成高速CPU及片上外设模拟器的源码级调试器;
高级GDI接口,可用于目标硬件的软件调试和ULINK2仿真器的连接;
用于下载应用程序到Flash ROM中的Flash编程器; 完善的开发工具手册、设备数据手册和用户向导。
由S3C2410硬 件选项配置可 知,该器件内 部Flash(ROM) 起始地址为0X0, Flash大小为 0X200000 Byte。 RAM起始地址 为0X30000000, 其大小为 0X4000000 Byte。 图9.1.5 S3C2410的硬件选项配置
3. 创建源文件及文件组 创建一个工程后,可以在该工程下添加用户文件和该器件编译、 运行所必须的源文件。通常,设计人员应采用文件组来组织工程 下的各个文件,将工程中同一模块或者同一类型的源文件放在同 一文件组中。例如,用户可以通过单击工具栏图标或者在Project Window→Files菜单项中选择文件组,在右击弹出的快捷菜单中选 择Add Files to Group...打开一个标准对话框,将已经准备好的文 件添加到工程文件组中。例如在S3C2410工程中添加文件及文件 组如图9.1.6所示。
工程中添加文件组有: Startup、Source、 Common、InFile、 ReadMe。 在Startup文件夹下添 加S3C2410的启动代码 S3C2410A.s 在Source文件夹下添 加工程main.c文件及用 户文件(.c或.h) 在Common文件夹下 添加S3C2410系统库函 数2410lib.c以及系统初 始化文件sys_init.c 在Inifile文件夹下添加 SDRAM.ini文件,该文 件将引导用户将代码下 载至SDRAM中运行,而 不是将程序直接下载至 Flash中。如果用户需要 将程序代码下载至Flash 中运行,则需要添加 Flash.ini文件才行。
JTAG时钟速度达到50MHz。支持运行Cortex-Mx设备的工作频率达到 200MHz。高速Flash下载器,速度达到600KB/s。
USB供电(无须电源)。 ULINKPro提供大量的分析功能,可以通过逻辑 分析仪进行数据分析跟踪,代码覆盖率的统计分析,性能分析器帮助分 析和优化代码。 MDK除了可以使用ULINK和ULINKPro之外,还可以使用很多第三方的硬 件仿真器进行目标硬件调试,例如:CoLinkEx、Signum Systems JTAGJet、JLink、ST-Link、Altera Blaster Cortex Debugger、Stellaris ICDI等。
9.1.2 RealView编译工具集
RealView编译工具集(RVCT)是ARM公司提供的编译工具链,包含 编译器(armcc)、汇编器(armasm)、链接器(armLink)和相关工 具(如库管理器armar、十六制文件产生器FromELF)。RVCT在业界被 认为是面向ARM技术的编译器中能够提供最佳性能的编译工具。RVCT 的开发致力于高性能和高代码密度,以降低产品成本。RealView编译器 与ADS 1.2比较,代码密度比ADS 1.2编译的代码尺寸小10%,代码性 能比ADS 1.2编译的代码性能高20%。RVCT编译器能生成优化的32位 ARM指令集,16位的Thumb指令集以及最新的Thumb-2指令集代码, 完全支持ISO标准C和C++。
图9.1.4 在“Select Device for Target”对话框中选择所需处理器
2. 目标硬件选项配置 MDK下可根据目标硬件的实际情况对工程进行配置。通过单击 目标工具栏图标或者单击菜单项Project→Options for Target,在 弹出的Target页面可指定目标硬件和所选择处理器片内组件的相 关参数。例如,S3C2410的硬件选项配置如图9.1.5所示。
9.1.3 RealView实时库
RealView实时库(RTL,Real-Time Library)是为解决基于ARM MCU的嵌入式系 统中实时及通信问题而设计的紧密耦合库集合,可以非常方便地应用于所有 ARM7、ARM9和Cortex-M3系列的处理器。RealView实时库可以解决嵌入式开 发中的常见的一些问题,例如:
2.目标硬件调试模式
在目标硬件调试模式下,使用硬件仿真调试器(如ULINK2、 ULINKPro等)与目标硬件连接,调试和测试所开发的软件。 ULINK2是ARM公司推出的与MDK-ARM配套使用的仿真器,是ULink 仿真器的升级版本。ULINK2支持标准Windows USB驱动(即插即 用),支持基于 ARM Cortex-M3的串行调试,支持程序运行期间的 存储器读写、终端仿真和串行调试输出,支持10-pin 连接线 (也支持 20-pin 连接线)。ULINK2主要功能包括有:USB通讯接口高速下载用 户代码,存储区域/寄存器查看,快速单步程序运行,多种程序断点, 片内Flash编程等。ULINK2外形如图9.1.1所示。
MDK的RealView编译工具集用于将C/ C+ + 源文件转换为可重定位的目 标模块,并生成μVision IDE调试器可用的调试信息。
ARM C/ C+ + 编译器(armcc)支持同一源文件中的ARM和Thumb混 合模式。采用代码尺寸优化技术,可产生最小尺寸的编译代码。采用性 能优化技术,在不增加时钟频率的情况下最大化处理器的性能。具有 “硬件支持”函数属性,为访问ARM硬件提供方便。支持内嵌汇编,可 用于快速DSP或其他信号处理算法。其函数内联特性,可加快被频繁调 用函数的执行速度。可自动通过CPU寄存器传递参数,甚至一些小的C结 构也可通过CPU寄存器传递和返回,加快了执行速度。程序段多数可重 入,既可从主程序中调用,也可在中断中调用。依从单精度、双精度数 的标准IEEE 754标准,可以用于高精度的浮点计算。
9.1.5 创建工程
1. 选择处理器 MDK安装完成之后可以直接从开始→程序→keil μVision4或者点击
桌面快捷方式图标打开软件如图9.1.2所示。
图9.1.2 打开的μVision4 IDE界面
单击Project-New Project...菜单项,μVision IDE将打开一个 “Create New Project”(创建一个新工程)对话框如图9.1.3所示,
9.1.1 µVision4 IDE
μ Vision IDE是一个集项目管理器、源代码编辑器、调试器等于一体的
集成开发环境,是一个基于Windows操作系统的嵌入式软件开发平台, µVision4 IDE主要特性如下:
功能强大的源代码编辑器;
可根据开发工具配置的设备数据库; 用于创建和维护工程的工程管理器; 集汇编、编译和链接过程于一体的编译工具;
第9章 ARM汇编语言程序设计基础
说明:由于本课程内容较多,各学校开课的课时不同,讲授的内 容也有不同,本课件本着尽可能的多的提供素材,以满足各位老 师不同的需要。 希望各位老师根据自己的讲授需要,对课件进行剪裁编排,以适 合自己的课程要求。