嵌入式系统原理与开发Ch4-ARM汇编程序设计新.ppt
《嵌入式系统原理与开发Ch4-ARM汇编程序设计新.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统原理与开发Ch4-ARM汇编程序设计新.ppt(149页珍藏版)》请在三一办公上搜索。
1、1,在线教务辅导网:,更多课程配套课件资源请访问在线教务辅导网,嵌入式系统原理与开发,V1.0,ARM汇编程序设计本课程的主要内容,主要内容,4.1 概述4.2 ARM伪操作、宏指令和伪指令详解4.3 ARM汇编语言程序设计4.4 GNU ARM汇编语言4.5 ARM汇编语言程序设计实例附:ARM仿真器中软/硬件断点的讲解,4.1 概述,ARM指令集和Thumb指令集是基于ARM的嵌入式系统程序设计的基础,C语言是嵌入式系统程序设计中使用最广泛的高级语言。本章主要讲述如何应用汇编语言和C语言进行嵌入式系统设计,使读者能够掌握嵌入式程序设计的基本知识、基本方法和基本流程。,4.1 概述,1.开发
2、工具选择ARM开发工具(IDE)一般应该包含编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等。目前,世界上约有四十多家公司提供以上不同类别的产品。常用的ARM集成开发环境(IDE)主要有如下几类:ARM 公司的ARM开发工具GNU的ARM工具链RealView MDK,4.1 概述,1.开发工具选择ARM 公司的ARM开发工具ADSARM Developer Suite。最终版本为1.2。ADS1.2提供完整的WINDOWS界面开发环境。C编译器效率极高,支持C以及C+,使工程师可以很方便的使用C语言进行开发。提供软件模拟仿真功能,使没有
3、Emulators的学习者也能够熟悉ARM的指令系统。配合ICE使用,ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。ADS1.2需要硬件支持才能发挥强大功能。目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE等。主要工具有armasm、armcc、armlink、fromelf 等。下载电缆:目前大部分JTAG仿真器均支持ARM ADS。,4.1 概述,1.开发工具选择ARM公司的ARM开发工具RVDSRealView Development Suite,RVDS是ARM公司继SDT与ADS1.2之后主推的新一代开发工具,是一套附带支持
4、文档和示例的软件开发应用程序,可用于编写、生成和调试适用于ARM系列处理器的应用程序。RVDS由RealView编译器(RVCT)、RealView汇编器(armasm)、RealView链接器(armlinker),以及RealView调试器(RVDebugger)组成,目前版本为4.0。RVDS支持ARM最新架构下的编译和调试,包括支持V7指令集和NEON技术,支持Cortex A8和M3;RVDS可以直接连接到SoC Designer;支持CoreSight调试技术;Eclipse/Codewarrior集成开发环境。丰富的项目管理系统:基于Eclipse的项目管理器,能支持Linux,
5、Windows平台。,4.1 概述,1.开发工具选择ARM 公司的ARM开发工具RVDSRealView ICE和RealView Trace:这是一种基于JTAG的调试解决方案,用于调试运行在基于ARM体系结构的处理器上的软件。RealView Profiler:这是ARM Workbench IDE的一个插件,可在以最高250 MHz工作频率运行的目标上,对嵌入式软件进行长时间的非侵入分析。RealView Developer Kit:这是多套附带支持文档和示例的工具,可用于编写、生成和调试针对基于特定ARM体系结构的处理器的应用程序。,4.1 概述,1.开发工具选择GNU的ARM工具链G
6、NU提供的编译工具包括汇编器as、C编译器gcc、C+编译器g+、连接器ld和二进制转换工具objcopy。基于ARM平台的工具分别为arm-linux-as、arm-linux-gcc、arm-linux-g+、arm-linux-ld 和arm-linux-objcopy。GNU的所有开发工具都可以从上下载,基于ARM的工具可以从获得。GNU的编译器功能非常强大,共有上百个操作选项,这也是这类工具让初学者头痛的原因。不过,实际开发中只需要用到有限的几个,大部分可以采用缺省选项。,4.1 概述,1.开发工具选择RV MDKRealView Microcontroller Developmen
7、t Kit。德国Keil是颇受业界欢迎的51单片机开发工具,它拥有流畅的用户界面与强大的仿真功能。ARM公司收购Keil之后,正式推出了针对ARM微控制器的开发工具。RV MDK将ARM开发工具RVDS的编译器RVCT与Keil的工程管理、调试仿真工具集成在一起,是一款非常强大的ARM微控制器开发工具。RV MDK根据微控制器调试开发的特点采用了与ADS、RVDS完全不同的调试、仿真环境Vision debugger与simulator。因此MDK与ADS在工具架构组成上有一些不同,这些区别包括:不同的工程管理器,不同版本的ARM编译器(Compiler),不同的调试器(Debugger),不
8、同的仿真器(Simulator),以及不同的硬件调试。,4.1 概述,2.ADS开发工具对初学者推荐选择ARM的ADS开发工具。ADS包括了六个模块,其主要功能如下:代码生成工具(Code Generation Tools):代码生成工具由源程序编译、汇编、链接工具集组成。ARM公司针对ARM系列每一种结构都进行了专门的优化处理,这一点除了作为ARM结构的设计者的ARM公司,其它公司都无法办到。ARM公司宣称,其代码生成工具最终生成的可执行文件最多可以比其它公司工具套件生成的文件小20%。集成开发环境(CodeWarrior IDE from Metrowerks):CodeWarrior I
9、DE包含工程管理器、代码生成接口、语法敏感编辑器、源文件和类浏览器、源代码版本控制系统接口、文本搜索引擎等,其功能与Visual Studio相似,界面风格比较独特。ADS仅在其PC机版本中集成了该IDE。,4.1 概述,2.ADS开发工具ADS包括了六个模块,其主要功能如下:调试器(Debuggers)包括两个应用调试器:ARM扩展调试器AXD(ARM eXtended Debugger)、ARM符号调试器armsd(ARM symbolic debugger)。AXD基于Windows风格,具有一般意义上调试器的所有功能,包括简单和复杂断点设置、栈显示、寄存器和存储区显示、命令行接口等。A
10、rmsd作为一个命令行工具辅助调试或者用在其它操作系统平台上。指令集模拟器(Instruction Set Simulators):用户使用指令集模拟器无需任何硬件即可在PC机上完成一部分调试工作。,4.1 概述,2.ADS开发工具对初学者推荐选择ARM的ADS开发工具。ADS包括了六个模块,其主要功能如下:调试器(Debuggers)包括两个应用调试器:ARM扩展调试器AXD(ARM eXtended Debugger)、ARM符号调试器armsd(ARM symbolic debugger)。AXD基于Windows风格,具有一般意义上调试器的所有功能,包括简单和复杂断点设置、栈显示、寄存
11、器和存储区显示、命令行接口等。Armsd作为一个命令行工具辅助调试或者用在其它操作系统平台上。指令集模拟器(Instruction Set Simulators):用户使用指令集模拟器无需任何硬件即可在PC机上完成一部分调试工作。,4.1 概述,2.ADS开发工具ADS包括了六个模块,其主要功能如下:ADS使用CodeWarrior公司的编译器,几个主要命令如下:armasm.exe:汇编文件编译器 armcc.exe:C文件编译器 armlink.exe:目标文件连接器 fromelf.exe:将axf或者elf格式转换成其它格式,如二进制。armprof.exe:对调试过程中生成的prof
12、iling记录文件做分析用。ADS IDE开发环境下的位操作和宏指令:符号定义(Symbol Definition)伪操作;数据定义(Data Definition)伪操作;汇编控制(Assembly Control)伪操作;框架描述(Frame Description)伪操作;信息报告(Reporting)伪操作;其它(Miscellaneous)伪操作;,4.2 ARM伪操作、宏指令和伪指令详解,概述ARM汇编语言源程序语句一般都由指令、伪操作、宏指令和伪指令组成,ARM汇编语言的设计基础是ARM指令、汇编伪指令、汇编伪操作和宏指令。伪操作是ARM汇编语言程序里的一些特殊的指令助记符,其作
13、用是为完成汇编程序做各种准备工作,在源程序运行汇编程序处理,而不是在计算机运行期间有机器执行。亦即,这些伪操作只在汇编过程中起作用,一旦汇编结束,伪操作的使命也就随之消失。宏指令是一段独立的程序代码,可以插在程序中,它通过伪操作来定义,宏在被使用之前必须提前定义好,宏之间可以互相调用,也可自己递归调用。,4.2 ARM伪操作、宏指令和伪指令详解,概述通过直接书写宏名来使用宏,并具有宏指令的格式输入输出参数。宏定义本身不产生代码,只是在调用它时把宏体插入到原程序中。伪指令也是ARM汇编语言程序里的特殊助记符,也不在处理器运行期间由机器执行,它们在汇编时将被合适的机器指令代替成ARM或Thumb指
14、令,从而实现真正的指令操作。伪操作、宏指令一般与编译程序有关,因此ARM汇编语言的伪操作,宏指令在不同的编译环境下有不同的编写形式和规则。,4.2 ARM伪操作、宏指令和伪指令详解,概述几种微操作类型符号定义(Symbol Definition)伪操作数据定义(Data Definition)伪操作汇编控制(Assemblly Control)伪操作框架描述(Frame Description)伪操作信息报告(Reporting)伪操作其它(Miscellaneous)伪操作,4.2 ARM伪操作、宏指令和伪指令详解,1.符号定义类伪操作符号定义(Symbol Definition)伪操作主要
15、实现ARM汇编程序中的变量定义、变量赋值,定义寄存器名称等。,4.2 ARM伪操作、宏指令和伪指令详解,1.符号定义类伪操作GBLA、GBLL、GBLSGBLA:声明一个全局算术变量,初始化为0;A=算术。GBLL:声明一个全局逻辑变量,初始化为F;L=逻辑。GBLS:声明一个全局字符串变量,初始化为空;S=string语法格式:Variable格式说明GBLX=GBLA、GBLL、GBLS;Variable是全局变量名称应该是全局唯一的;对已声明过的变量,重新声明时,将被重新初始化;作用范围:为包含该变量的源程序。,4.2 ARM伪操作、宏指令和伪指令详解,1.符号定义类伪操作GBLA、GB
16、LL、GBLS实例,4.2 ARM伪操作、宏指令和伪指令详解,1.符号定义类伪操作LCLA、LCLL、LCLSLCLA:声明一个局部算术变量,并初始化为0;LCLL:声明一个局部逻辑变量,并初始化为FALSE;LCLS:声明一个局部字符串变量,并初始化为空串“”;语法格式:Variable格式说明LCLX=LCLA、LCLL、LCLSVariable:局部变量名称应该是作用范围内唯一的;对已声明过的变量,重新声明时,将被重新初始化;作用范围:局部变量一般只用于宏代码中;,4.2 ARM伪操作、宏指令和伪指令详解,1.符号定义类伪操作LCLA、LCLL、LCLS实例,4.2 ARM伪操作、宏指令
17、和伪指令详解,1.符号定义类伪操作SETA、SETL、SETSSETA:给一个全局或局部算术变量赋值;SETL:给一个全局或局部逻辑变量赋值;SETS:给一个全局或局部字符串变量赋值;语法格式:VariableExpression格式说明SETX=SETA、SETL、SETSVariable:是用GBLA、GBLL、GBLS和LCLA、LCLL、LCLS定义的变量;Expression是赋值表达式;只能对已经声明的变量赋值;,4.2 ARM伪操作、宏指令和伪指令详解,1.符号定义类伪操作SETA、SETL、SETS实例,4.2 ARM伪操作、宏指令和伪指令详解,符号定义类伪操作RLISTRLI
18、ST:为一个通用寄存器列表定义名称;语法格式:NameRLISTlist of registers格式说明Name:寄存器列表定义名称;list of registers:寄存器列表;RLIST定义的名称可以在LDM|STM中使用;实例,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作数据定义(Data Definition)伪操作用于:数据缓冲池定义;数据表定义;数据空间分配。,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作LTORGLTORG:声明一个数据缓冲池的首地址;在使用LDR指令时,常需要用LTORG声明数据缓冲池。语法格式:LTORG;literal
19、 Original格式说明用LTORG定义数据缓冲池,可以防止LDR越界;LTORG伪操作指令通常放在无条件转移指令之后,或者子程序返回指令之后,以免处理器错误地将数据缓冲器中的数据当作代码执行;大的代码段可以使用多个数据缓冲池;ARM汇编器一般把数据缓冲池放在代码段的最后面,即下一个代码段开始之前,或者END伪操作之前;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作LTORG实例,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作MAPMAP声明一个结构化的内存表(Storage Map)的首地址;MAP可用“”代替;内存表的位置计数器VAR(汇编器的内置变量)
20、设置成该地址;语法格式:MAPExpression,base-register格式说明Expression为数字表达式,或者程序中已经定义过的标号;base-register为一个寄存器,可选;位置计数器VAR初值:当base-register不存在时,VAR=Expression;当base-register存在时,VAR=base-register+Expression;MAP和FIELD配合使用来定义结构化内存表;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作MAP实例,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作FIELDFIELD:声明一个结构化的
21、内存表的数据域;FIELD可用“#”代替;语法格式:LabelFIELD Expression,base-register格式说明Label的值是当前内存表位置计数器VAR的值,可选;Expression表示本数据域所占用的字节数。汇编编译到FIELD语句时,VAR+=Expression;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作MAP与FIELD的联合使用使用方法:MAP声明一个结构化内存表的首地址;FIELD声明表中的数据域;MAP的base-register是其后的所有的FIELD的默认值,直到遇到新的MAP的base-register;MAP与FIELD仅仅定义
22、了数据表的结构,并没有实际分配内存单元;MAP与FIELD可以定义三种数据表:基于绝对地址的内存表;基于相对地址的内存表;基于PC地址的内存表;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作MAP与FIELD的联合使用基于绝对地址的内存表;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作MAP与FIELD的联合使用基于相对地址的内存表;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作MAP与FIELD的联合使用基于PC地址的内存表;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作MAP与FIELD的联合使用特殊应用FIELD的操
23、作数为0时,其标号即为当前内存单元的地址,可以用该方法判断内存的使用是否越界;访问数据范围超过4KB:由于基于相对地址的内存表、基于PC地址的内存表,其表中各域的实际内存地址都是基于寄存器的内容,因此寻址空间可以扩大到4GB;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作SPACESPACE:用于分配一块连续的内存空间;SPACE可用“%”代替;语法格式:LabelSPACEExpression格式说明:Label可选;Expression的个数为字节数;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作DCBDCB:用于分配一段字节内存单元并用Expressi
24、oni初始化;DCB可用“=”代替;语法格式:LabelDCBExpression1,Expression2,格式说明:Label可选;Expression为一个-128256的数值或者字符串;,4.2 ARM伪操作、宏指令和伪指令详解,2.数据定义类伪操作DCD和DCDUDCD:用于分配一段字对齐内存空间并用Expressioni初始化;DCD可用“&”代替;DCDU:用于分配一段内存空间并用Expressioni初始化,但不严格要求字对齐;语法格式:LabelDCD(U)Expression1,Expression2,格式说明:Label可选;Expression为一个数字表达式或者程序中
25、得标号,内存分配的字节数由Expression的个数决定;,4.2 ARM伪操作、宏指令和伪指令详解,3.汇编控制类伪操作汇编控制(Assembly Control)伪操作包括:条件汇编;宏定义;重复汇编控制等。,4.2 ARM伪操作、宏指令和伪指令详解,3.汇编控制类伪操作IFELSEENDIF与C语言的IF语句很类似;语法格式:IFLogical Expression;指令或者伪指令代码段1ELSE;可选;指令或者伪指令代码段2ENDIF格式说明:Logical Expression:用于控制选择的逻辑表达式;IFELSEENDIF可嵌套使用;,4.2 ARM伪操作、宏指令和伪指令详解,3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统原理与开发 Ch4-ARM汇编程序设计新 嵌入式 系统 原理 开发 Ch4 ARM 汇编程序 设计
链接地址:https://www.31ppt.com/p-6437476.html