《嵌入式系统原理与开发Ch4-ARM汇编程序设计新.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统原理与开发Ch4-ARM汇编程序设计新.ppt(149页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统原理与开发 Ch4-ARM汇编程序设计新 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望嵌入式系统原理与开发嵌入式系统原理与开发V1.02ARM汇编程序设计汇编程序设计本课程的主要内容本课程的主要内容3Embedded System principle and development信息信息学院学院主要内容主要内容n4.1 概述概述n4.2 ARM伪伪操作、宏指令和操作、宏指令和伪伪指令指令详详解解n4.3 ARM汇编语汇编语言程序言程序设计设计n4.4
2、 GNU ARM汇编语汇编语言言n4.5 ARM汇编语汇编语言程序言程序设计实设计实例例n附:附:ARM仿真器中仿真器中软软/硬件断点的硬件断点的讲讲解解4Embedded System principle and development信息信息学院学院4.1 概述概述nARM指指令令集集和和Thumb指指令令集集是是基基于于ARM的的嵌嵌入入式式系系统统程程序序设设计计的的基基础础,C语语言言是是嵌嵌入入式式系系统统程序程序设计设计中使用最广泛的高中使用最广泛的高级语级语言。言。n本本章章主主要要讲讲述述如如何何应应用用汇汇编编语语言言和和C语语言言进进行行嵌嵌入入式式系系统统设设计计,使使
3、读读者者能能够够掌掌握握嵌嵌入入式式程程序序设计设计的基本知的基本知识识、基本方法和基本流程。、基本方法和基本流程。5Embedded System principle and development信息信息学院学院4.1 概述概述n1.开开发发工具工具选择选择uARM开开发发工工具具(IDE)一一般般应应该该包包含含编编译译软软件件、汇汇编编软软件件、链链接接软软件件、调调试试软软件件、嵌嵌入入式式实实时时操操作作系系统统、函数库、评估板、函数库、评估板、JTAG仿真器、在线仿真器等。仿真器、在线仿真器等。u目目前前,世世界界上上约约有有四四十十多多家家公公司司提提供供以以上上不不同同类类别
4、别的的产产品品。常常用用的的ARM集集成成开开发发环环境境(IDE)主主要要有有如如下下几类:几类:lARM 公司的公司的ARM开发工具开发工具lGNU的的ARM工具链工具链lRealView MDK6Embedded System principle and development信息信息学院学院4.1 概述概述n1.开开发发工具工具选择选择uARM 公司的公司的ARM开发工具开发工具lADSARM Developer Suite。最终版本为。最终版本为1.2。ADS1.2提提供供完完整整的的WINDOWS界界面面开开发发环环境境。C编编译译器器效效率率极极高高,支支持持C以及以及C+,使工
5、程师可以很方便的使用,使工程师可以很方便的使用C语言进行开发。语言进行开发。提提供供软软件件模模拟拟仿仿真真功功能能,使使没没有有Emulators的的学学习习者者也也能能够够熟熟悉悉ARM的指令系统。的指令系统。配配合合ICE使使用用,ADS1.2提提供供强强大大的的实实时时调调试试跟跟踪踪功功能能,片片内内运运行行情情况况尽尽在在掌掌握握。ADS1.2需需要要硬硬件件支支持持才才能能发发挥挥强强大大功功能能。目目前前支支持持的的硬硬件件调调试器有试器有Multi-ICE以及兼容以及兼容Multi-ICE的调试工具如的调试工具如FFT-ICE等。等。主要工具有主要工具有armasm、armc
6、c、armlink、fromelf 等。等。下载电缆:目前大部分下载电缆:目前大部分JTAG仿真器均支持仿真器均支持ARM ADS。7Embedded System principle and development信息信息学院学院4.1 概述概述n1.开开发发工具工具选择选择uARM公司的公司的ARM开发工具开发工具lRVDSRealView Development Suite,RVDS是是 ARM公公 司司 继继 SDT与与ADS1.2之之后后主主推推的的新新一一代代开开发发工工具具,是是一一套套附附带带支支持持文文档档和和示示例例的的软软件件开开发发应应用用程程序序,可可用用于于编编写写
7、、生生成成和和调调试试适适用用于于ARM系系列列处处理理器器的的应应用用程程序。序。RVDS由由RealView编编译译器器(RVCT)、RealView汇汇编编器器(armasm)、RealView链链 接接 器器(armlinker),以以 及及 RealView调调 试试 器器(RVDebugger)组成,目前版本为)组成,目前版本为4.0。RVDS支支持持ARM最最新新架架构构下下的的编编译译和和调调试试,包包括括支支持持V7指指令令集集和和NEON技技术术,支支持持Cortex A8和和M3;RVDS可可以以直直接接连连接接到到SoC Designer;支支持持CoreSight调试
8、技术;调试技术;Eclipse/Codewarrior集成开发环境。集成开发环境。丰丰富富的的项项目目管管理理系系统统:基基于于Eclipse的的项项目目管管理理器器,能能支支持持Linux,Windows平台。平台。8Embedded System principle and development信息信息学院学院4.1 概述概述n1.开开发发工具工具选择选择uARM 公司的公司的ARM开发工具开发工具lRVDSRealView ICE和和RealView Trace:这这是是一一种种基基于于JTAG的的调调试试解解决决方案,用于调试运行在基于方案,用于调试运行在基于ARM体系结构的处理器上
9、的软件。体系结构的处理器上的软件。RealView Profiler:这这是是ARM Workbench IDE的的一一个个插插件件,可可在在以以最最高高250 MHz工工作作频频率率运运行行的的目目标标上上,对对嵌嵌入入式式软软件件进进行行长长时时间间的的非侵入分析。非侵入分析。RealView Developer Kit:这这是是多多套套附附带带支支持持文文档档和和示示例例的的工工具具,可用于编写、生成和调试针对基于特定可用于编写、生成和调试针对基于特定ARM体系结构的处理器的应用程序。体系结构的处理器的应用程序。9Embedded System principle and develop
10、ment信息信息学院学院4.1 概述概述n1.开开发发工具工具选择选择uGNU的的ARM工具链工具链lGNU提提供供的的编编译译工工具具包包括括汇汇编编器器as、C编编译译器器gcc、C+编编译译器器g+、连接器、连接器ld和二进制转换工具和二进制转换工具objcopy。l基基于于ARM平平台台的的工工具具分分别别为为arm-linux-as、arm-linux-gcc、arm-linux-g+、arm-linux-ld 和和arm-linux-objcopy。lGNU的的所所有有开开发发工工具具都都可可以以从从www.gnu.org上上下下载载,基基于于ARM的的工工具具可可以以从从www.
11、uclinux.org获获得得。GNU的的编编译译器器功功能能非非常常强强大大,共共有有上上百百个个操操作作选选项项,这这也也是是这这类类工工具具让让初初学学者者头头痛痛的的原原因因。不不过过,实实际际开开发发中中只只需需要要用用到到有有限限的的几几个个,大大部部分可以采用缺省选项。分可以采用缺省选项。10Embedded System principle and development信息信息学院学院4.1 概述概述n1.开开发发工具工具选择选择uRV MDKlRealView Microcontroller Development Kit。l德德国国Keil是是颇颇受受业业界界欢欢迎迎的的
12、51单单片片机机开开发发工工具具,它它拥拥有有流流畅的用户界面与强大的仿真功能。畅的用户界面与强大的仿真功能。lARM公公司司收收购购Keil之之后后,正正式式推推出出了了针针对对ARM微微控控制制器器的的开开发发工工具具。RV MDK将将ARM开开发发工工具具RVDS的的编编译译器器RVCT与与Keil的的工工程程管管理理、调调试试仿仿真真工工具具集集成成在在一一起起,是是一一款款非非常常强强大大的的ARM微控制器开发工具。微控制器开发工具。lRV MDK根根据据微微控控制制器器调调试试开开发发的的特特点点采采用用了了与与ADS、RVDS完完 全全 不不 同同 的的 调调 试试、仿仿 真真
13、环环 境境 Vision debugger与与simulator。因因此此MDK与与ADS在在工工具具架架构构组组成成上上有有一一些些不不同同,这这些些区区别别包包括括:不不同同的的工工程程管管理理器器,不不同同版版本本的的ARM编编译译器器(Compiler),不不同同的的调调试试器器(Debugger),不不同同的的仿仿真真器(器(Simulator),以及不同的硬件调试。),以及不同的硬件调试。11Embedded System principle and development信息信息学院学院4.1 概述概述n2.ADS开开发发工具工具u对初学者推荐选择对初学者推荐选择ARM的的ADS
14、开发工具。开发工具。uADS包括了六个模块,其主要功能如下:包括了六个模块,其主要功能如下:l代代码码生生成成工工具具(Code Generation Tools):代代码码生生成成工工具具由由源源程程序序编编译译、汇汇编编、链链接接工工具具集集组组成成。ARM公公司司针针对对ARM系系列列每每一一种种结结构构都都进进行行了了专专门门的的优优化化处处理理,这这一一点点除除了了作作为为ARM结结构构的的设设计计者者的的ARM公公司司,其其它它公公司司都都无无法法办办到到。ARM公公司司宣宣称称,其其代代码码生生成成工工具具最最终终生生成成的的可可执执行行文文件件最最多多可可以以比比其它公司工具套
15、件生成的文件小其它公司工具套件生成的文件小20%。l集集 成成 开开 发发 环环 境境(CodeWarrior IDE from Metrowerks):CodeWarrior IDE包包含含工工程程管管理理器器、代代码码生生成成接接口口、语语法法敏敏感感编编辑辑器器、源源文文件件和和类类浏浏览览器器、源源代代码码版版本本控控制制系系统统接接口口、文文本本搜搜索索引引擎擎等等,其其功功能能与与Visual Studio相相似似,界界面面风风格格比比较较独独特特。ADS仅仅在在其其PC机机版版本本中中集集成成了了该该IDE。12Embedded System principle and deve
16、lopment信息信息学院学院4.1 概述概述n2.ADS开开发发工具工具uADS包括了六个模块,其主要功能如下:包括了六个模块,其主要功能如下:l调调试试器器(Debuggers)包包括括两两个个应应用用调调试试器器:ARM扩扩展展调调试试器器AXD(ARM eXtended Debugger)、ARM符符号号调调试试器器armsd(ARM symbolic debugger)。AXD基基于于Windows风风格格,具具有有一一般般意意义义上上调调试试器器的的所所有有功功能能,包包括括简简单单和和复复杂杂断断点点设设置置、栈栈显显示示、寄寄存存器器和和存存储储区区显显示示、命命令令行行接接口
17、口等等。Armsd作作为为一一个个命命令令行行工工具具辅辅助助调调试试或或者者用用在在其其它它操操作作系系统统平平台上。台上。l指指令令集集模模拟拟器器(Instruction Set Simulators):用用户户使使用用指指令令集集模模拟拟器器无无需需任任何何硬硬件件即即可可在在PC机机上上完完成成一一部部分分调调试工作。试工作。13Embedded System principle and development信息信息学院学院4.1 概述概述n2.ADS开开发发工具工具u对初学者推荐选择对初学者推荐选择ARM的的ADS开发工具。开发工具。uADS包括了六个模块,其主要功能如下:包括了
18、六个模块,其主要功能如下:l调调试试器器(Debuggers)包包括括两两个个应应用用调调试试器器:ARM扩扩展展调调试试器器AXD(ARM eXtended Debugger)、ARM符符号号调调试试器器armsd(ARM symbolic debugger)。AXD基基于于Windows风风格格,具具有有一一般般意意义义上上调调试试器器的的所所有有功功能能,包包括括简简单单和和复复杂杂断断点点设设置置、栈栈显显示示、寄寄存存器器和和存存储储区区显显示示、命命令令行行接接口口等等。Armsd作作为为一一个个命命令令行行工工具具辅辅助助调调试试或或者者用用在在其其它它操操作作系系统统平平台上。
19、台上。l指指令令集集模模拟拟器器(Instruction Set Simulators):用用户户使使用用指指令令集集模模拟拟器器无无需需任任何何硬硬件件即即可可在在PC机机上上完完成成一一部部分分调调试工作。试工作。14Embedded System principle and development信息信息学院学院4.1 概述概述n2.ADS开开发发工具工具uADS包括了六个模块,其主要功能如下:包括了六个模块,其主要功能如下:lADS使用使用CodeWarrior公司的编译器,几个主要命令如下:公司的编译器,几个主要命令如下:armasm.exe:汇编文件编译器:汇编文件编译器 armc
20、c.exe:C文件编译器文件编译器 armlink.exe:目标文件连接器:目标文件连接器 fromelf.exe:将:将axf或者或者elf格式转换成其它格式,如二进制。格式转换成其它格式,如二进制。armprof.exe:对调试过程中生成的:对调试过程中生成的profiling记录文件做分析用。记录文件做分析用。lADS IDE开发环境下的位操作和宏指令:开发环境下的位操作和宏指令:符号定义(符号定义(Symbol Definition)伪操作;)伪操作;数据定义(数据定义(Data Definition)伪操作;)伪操作;汇编控制(汇编控制(Assembly Control)伪操作;)伪
21、操作;框架描述(框架描述(Frame Description)伪操作;)伪操作;信息报告(信息报告(Reporting)伪操作;)伪操作;其它(其它(Miscellaneous)伪操作;)伪操作;15Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n概述概述uARM汇汇编编语语言言源源程程序序语语句句一一般般都都由由指指令令、伪伪操操作作、宏宏指指令令和和伪伪指指令令组组成成,ARM汇汇编编语语言言的的设设计计基基础础是是ARM指指令、汇编伪指令、汇编伪操作和宏指令。令、汇编伪指
22、令、汇编伪操作和宏指令。u伪伪操操作作是是ARM汇汇编编语语言言程程序序里里的的一一些些特特殊殊的的指指令令助助记记符符,其其作作用用是是为为完完成成汇汇编编程程序序做做各各种种准准备备工工作作,在在源源程程序序运运行行汇汇编编程程序序处处理理,而而不不是是在在计计算算机机运运行行期期间间有有机机器器执执行行。亦亦即即,这这些些伪伪操操作作只只在在汇汇编编过过程程中中起起作作用用,一旦汇编结束,伪操作的使命也就随之消失。一旦汇编结束,伪操作的使命也就随之消失。u宏宏指指令令是是一一段段独独立立的的程程序序代代码码,可可以以插插在在程程序序中中,它它通通过过伪伪操操作作来来定定义义,宏宏在在被被
23、使使用用之之前前必必须须提提前前定定义义好,宏之间可以互相调用,也可自己递归调用。好,宏之间可以互相调用,也可自己递归调用。16Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n概述概述u通通过过直直接接书书写写宏宏名名来来使使用用宏宏,并并具具有有宏宏指指令令的的格格式式输输入入输输出出参参数数。宏宏定定义义本本身身不不产产生生代代码码,只只是是在在调调用用它时把宏体插入到原程序中。它时把宏体插入到原程序中。u伪伪指指令令也也是是ARM汇汇编编语语言言程程序序里里的的特特殊殊助
24、助记记符符,也也不不在在处处理理器器运运行行期期间间由由机机器器执执行行,它它们们在在汇汇编编时时将将被被合合适适的的机机器器指指令令代代替替成成ARM或或Thumb指指令令,从从而而实实现现真真正正的指令操作。的指令操作。u伪伪操操作作、宏宏指指令令一一般般与与编编译译程程序序有有关关,因因此此ARM汇汇编编语语言言的的伪伪操操作作,宏宏指指令令在在不不同同的的编编译译环环境境下下有有不不同同的的编写形式和规则。编写形式和规则。17Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详
25、解n概述概述u几种微操作类型几种微操作类型l符号定义(符号定义(Symbol Definition)伪操作)伪操作l数据定义(数据定义(Data Definition)伪操作)伪操作l汇编控制(汇编控制(Assemblly Control)伪操作)伪操作l框架描述(框架描述(Frame Description)伪操作)伪操作l信息报告(信息报告(Reporting)伪操作)伪操作l其它(其它(Miscellaneous)伪操作)伪操作18Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指
26、令详解n1.符号定符号定义类伪义类伪操作操作u符符号号定定义义(Symbol Definition)伪伪操操作作主主要要实实现现ARM汇汇编编程程序序中中的的变变量量定定义义、变变量量赋赋值值,定定义义寄寄存存器器名称等。名称等。19Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n1.符号定符号定义类伪义类伪操作操作uGBLA、GBLL、GBLSlGBLA:声明一个全局算术变量,初始化为:声明一个全局算术变量,初始化为0;A=算术。算术。lGBLL:声明一个全局逻辑变量,初始化
27、为:声明一个全局逻辑变量,初始化为F;L=逻辑。逻辑。lGBLS:声明一个全局字符串变量,初始化为空;:声明一个全局字符串变量,初始化为空;S=stringl语法格式:语法格式:Variablel格式说明格式说明GBLX=GBLA、GBLL、GBLS;Variable是全局变量名称应该是全局唯一的;是全局变量名称应该是全局唯一的;对已声明过的变量,重新声明时,将被重新初始化;对已声明过的变量,重新声明时,将被重新初始化;作用范围:为包含该变量的源程序。作用范围:为包含该变量的源程序。20Embedded System principle and development信息信息学院学院4.2 A
28、RM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n1.符号定符号定义类伪义类伪操作操作uGBLA、GBLL、GBLSl实例实例实例5.1GBLAArithmetic;声明一个全局算术变量ArithmeticSETA0 xFF;赋初值SPACEArithmetic;使用该变量GBLLLogical;声明一个全局逻辑变量LogicalSETLTRUE;赋初值21Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n1.符号定符号定义类伪义类伪操作操作uLCLA、LCLL、LCLS
29、lLCLA:声明一个局部算术变量,并初始化为:声明一个局部算术变量,并初始化为0;lLCLL:声明一个局部逻辑变量,并初始化为:声明一个局部逻辑变量,并初始化为FALSE;lLCLS:声明一个局部字符串变量,并初始化为空串:声明一个局部字符串变量,并初始化为空串“”;l语法格式:语法格式:Variablel格式说明格式说明LCLX=LCLA、LCLL、LCLSVariable:局部变量名称应该是作用范围内唯一的;:局部变量名称应该是作用范围内唯一的;对已声明过的变量,重新声明时,将被重新初始化;对已声明过的变量,重新声明时,将被重新初始化;作用范围:局部变量一般只用于宏代码中;作用范围:局部变
30、量一般只用于宏代码中;22Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n1.符号定符号定义类伪义类伪操作操作uLCLA、LCLL、LCLSl实例实例实例5.2MACRO;声明一个宏$labelmessage$a;宏原型,宏名称:message,宏参数:aLCLSString;声明一个局部字符串变量StringStringSETS“error”;赋初值$label;代码SPACE Arithmetic;使用该变量INFO0,”String”:CC:STR:$a;使用该字符串ME
31、ND;宏定义结束23Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n1.符号定符号定义类伪义类伪操作操作uSETA、SETL、SETSlSETA:给一个全局或局部算术变量赋值;:给一个全局或局部算术变量赋值;lSETL:给一个全局或局部逻辑变量赋值;:给一个全局或局部逻辑变量赋值;lSETS:给一个全局或局部字符串变量赋值;:给一个全局或局部字符串变量赋值;l语法格式:语法格式:VariableExpressionl格式说明格式说明SETX=SETA、SETL、SETSVari
32、able:是是用用GBLA、GBLL、GBLS和和LCLA、LCLL、LCLS定定义义的的变量;变量;Expression是赋值表达式;是赋值表达式;只能对已经声明的变量赋值;只能对已经声明的变量赋值;24Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n1.符号定符号定义类伪义类伪操作操作uSETA、SETL、SETSl实例实例实例5.3GBLAArithmetic;声明一个全局算术变量ArithmeticSETA0 xFF;赋初值SPACEArithmetic;使用该变量GB
33、LLLogical;声明一个全局逻辑变量LogicalSETLTRUE;赋初值LCLSString;声明一个局部字符串变量StringStringSETS“error”;赋初值25Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n符号定符号定义类伪义类伪操作操作uRLISTlRLIST:为一个通用寄存器列表定义名称;:为一个通用寄存器列表定义名称;l语法格式:语法格式:NameRLISTlist of registersl格式说明格式说明Name:寄存器列表定义名称;:寄存器列表
34、定义名称;list of registers:寄存器列表;:寄存器列表;RLIST定义的名称可以在定义的名称可以在LDM|STM中使用;中使用;l实例实例实例5.4ALISTRLIST R0-R3;将R0-R3声明伪ALISTSTMDFSP!ALIST;保存寄存器列表ALIST26Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作u数据定义(数据定义(Data Definition)伪操作用于:)伪操作用于:l数据缓冲池定义;数据缓冲池定义;l
35、数据表定义;数据表定义;l数据空间分配。数据空间分配。27Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uLTORGlLTORG:声声明明一一个个数数据据缓缓冲冲池池的的首首地地址址;在在使使用用LDR指指令令时时,常需要用常需要用LTORG声明数据缓冲池。声明数据缓冲池。l语法格式:语法格式:LTORG;literal Originall格式说明格式说明用用LTORG定义数据缓冲池,可以防止定义数据缓冲池,可以防止LDR越界;越界;LTO
36、RG伪伪操操作作指指令令通通常常放放在在无无条条件件转转移移指指令令之之后后,或或者者子子程程序序返返回回指指令令之后,以免处理器错误地将数据缓冲器中的数据当作代码执行;之后,以免处理器错误地将数据缓冲器中的数据当作代码执行;大的代码段可以使用多个数据缓冲池;大的代码段可以使用多个数据缓冲池;ARM汇汇编编器器一一般般把把数数据据缓缓冲冲池池放放在在代代码码段段的的最最后后面面,即即下下一一个个代代码码段段开开始之前,或者始之前,或者END伪操作之前;伪操作之前;28Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和
37、伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uLTORGl实例实例实例5.5AREAExample,CODE,READONLY;声明代码段Example,只读属性StartBLFunc1;Func1;子程序Func1 LDRR1,=0 x8765;将0 x8000加载到R1MOVPC,LR;子程序结束LTORG;定义数据缓冲池,存放0 x8765DATASPACE 40;从当前地址开始分配40B内存单元,初始化伪029Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏
38、指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uMAPlMAP声声明明一一个个结结构构化化的的内内存存表表(Storage Map)的的首首地地址址;MAP可可用用“”代代替替;内内存存表表的的位位置置计计数数器器VAR(汇汇编编器器的的内置变量)设置成该地址;内置变量)设置成该地址;l语法格式:语法格式:MAP Expression,base-registerl格式说明格式说明Expression为数字表达式,或者程序中已经定义过的标号;为数字表达式,或者程序中已经定义过的标号;base-register为一个寄存器,可选;为一个寄存器,可选;位置计数器位置计数器VAR初值:初值:当
39、当base-register不存在时,不存在时,VAR=Expression;当当base-register存在时,存在时,VAR=base-register+Expression;MAP和和FIELD配合使用来定义结构化内存表;配合使用来定义结构化内存表;30Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uMAPl实例实例实例5.6MAP Fun;Fun代表内存表首地址MAP 0 x100,R9;内存表首地址为:0 x100+R931Em
40、bedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uFIELDlFIELD:声声明明一一个个结结构构化化的的内内存存表表的的数数据据域域;FIELD可可用用“#”代替;代替;l语法格式:语法格式:Label FIELD Expression,base-registerl格式说明格式说明Label的值是当前内存表位置计数器的值是当前内存表位置计数器VAR的值,可选;的值,可选;Expression表示本数据域所占用的字节数。表示本数据域所占用的字节数
41、。汇编编译到汇编编译到FIELD语句时,语句时,VAR+=Expression;32Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uMAP与与FIELD的联合使用的联合使用l使用方法:使用方法:MAP声明一个结构化内存表的首地址;声明一个结构化内存表的首地址;FIELD声明表中的数据域;声明表中的数据域;MAP的的base-register是是其其后后的的所所有有的的FIELD的的默默认认值值,直直到到遇遇到到新新的的MAP的的base-r
42、egister;MAP与与FIELD仅仅定义了数据表的结构,并没有实际分配内存单元;仅仅定义了数据表的结构,并没有实际分配内存单元;lMAP与与FIELD可以定义三种数据表:可以定义三种数据表:基于绝对地址的内存表;基于绝对地址的内存表;基于相对地址的内存表;基于相对地址的内存表;基于基于PC地址的内存表;地址的内存表;33Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uMAP与与FIELD的联合使用的联合使用l基于绝对地址的内存表;基于绝
43、对地址的内存表;实例5.7:基于绝对地址的内存表 MAP0 x2000;内存表首地址0 x2000ConstaFIELD4;consta长度为4B,相对地置为0ConstbFIELD4;constb长度为4B,相对地置为4XFIELD8;X长度为8B,相对地置为8YFIELD8;Y长度为8B,相对地置为16StringFIELD16;String长度为16B,相对地置为2434Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uMAP与与FIE
44、LD的联合使用的联合使用l基于相对地址的内存表;基于相对地址的内存表;实例5.8:基于相对地址的内存表MAP0,R9;内存表首地址为R9的值ConstaFIELD4;consta长度为4B,相对地置为0ConstbFIELD4;constb长度为4B,相对地置为4XFIELD8;X长度为8B,相对地置为8YFIELD8;Y长度为8B,相对地置为16StringFIELD16;String长度为16B,相对地置为2435Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数
45、据定义类伪义类伪操作操作uMAP与与FIELD的联合使用的联合使用l基于基于PC地址的内存表;地址的内存表;实例5.9:基于PC地址的内存表DATASSPACE100;分配100字节的内存单元,并初始化为0MAPDATAS;内存表首地址为DATAS内存单元ConstaFIELD4;consta长度为4B,相对地置为0ConstbFIELD4;constb长度为4B,相对地置为4XFIELD8;X长度为8B,相对地置为8YFIELD8;Y长度为8B,相对地置为16StringFIELD16;String长度为16B,相对地置为2436Embedded System principle and d
46、evelopment信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uMAP与与FIELD的联合使用的联合使用l特殊应用特殊应用FIELD的的操操作作数数为为0时时,其其标标号号即即为为当当前前内内存存单单元元的的地地址址,可可以以用用该该方方法判断内存的使用是否越界;法判断内存的使用是否越界;访访问问数数据据范范围围超超过过4KB:由由于于基基于于相相对对地地址址的的内内存存表表、基基于于PC地地址址的的内内存存表表,其其表表中中各各域域的的实实际际内内存存地地址址都都是是基基于于寄寄存存器器的的内内容容,因因此此寻寻址
47、址空空间可以扩大到间可以扩大到4GB;实例5.10:越界判断StartEQU0 x1000;分配的内存首地址EndEQU0 x2000;分配的内存末地址MAPStart;内存表首地址为Start内存单元ConstaFIELD4;consta长度为4B,相对地置为0ConstbFIELD4;constb长度为4B,相对地置为4XFIELD8;X长度为8B,相对地置为8YFIELD8;Y长度为8B,相对地置为16StringFIELDMaxlen;String长度为Maxlen B,相对地置为24Endalert FIELD0;Endalert用于检测内存是否越界ASSERT Endalerten
48、d,越界时,报错End37Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uSPACElSPACE:用用于于分分配配一一块块连连续续的的内内存存空空间间;SPACE可可用用“%”代代替;替;l语法格式:语法格式:LabelSPACEExpressionl格式说明:格式说明:Label可选;可选;Expression的个数为字节数;的个数为字节数;实例5.12:DataSPACE100;分配100字节内存单元,并初始化为038Embedded
49、System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uDCBlDCB:用用于于分分配配一一段段字字节节内内存存单单元元并并用用Expressioni初初始始化化;DCB可用可用“=”代替;代替;l语法格式:语法格式:Label DCBExpression1,Expression2,l格式说明:格式说明:Label可选;可选;Expression为一个为一个-128256的数值或者字符串;的数值或者字符串;实例5.13StringDCB“students”;构造一个
50、字符串,并以字节为单位分配内存39Embedded System principle and development信息信息学院学院4.2 ARM伪操作、宏指令和伪指令详解伪操作、宏指令和伪指令详解n2.数据定数据定义类伪义类伪操作操作uDCD和和DCDUlDCD:用用于于分分配配一一段段字字对对齐齐内内存存空空间间并并用用Expressioni初初始始化;化;DCD可用可用“&”代替;代替;lDCDU:用用于于分分配配一一段段内内存存空空间间并并用用Expressioni初初始始化化,但不严格要求字对齐;但不严格要求字对齐;l语法格式:语法格式:Label DCD(U)Expression1