嵌入式第4章

上传人:我** 文档编号:117189597 上传时间:2019-11-18 格式:PPT 页数:99 大小:527KB
返回 下载 相关 举报
嵌入式第4章_第1页
第1页 / 共99页
嵌入式第4章_第2页
第2页 / 共99页
嵌入式第4章_第3页
第3页 / 共99页
嵌入式第4章_第4页
第4页 / 共99页
嵌入式第4章_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《嵌入式第4章》由会员分享,可在线阅读,更多相关《嵌入式第4章(99页珍藏版)》请在金锄头文库上搜索。

1、第4章 ARM汇编语言特性 与编程基础 1 本章重点 : ARM汇编器提供的汇编语言特性,包括行格式 、预定义名和内建变量、伪指令、符号、指示 符、表达式和操作符等,以及它们的使用; ARM汇编语言编程基础,包括调用子程序、条 件执行、装入常数和地址到寄存器、装入和存 储多个寄存器、多路分支等内容,以及对应的 程序代码。 2 3 汇编语言上机过程 用ARM汇编语言编写的源程序,要使之运行必 须经过以下几个步骤: 1.编辑汇编源程序,保存为文件名后缀是“.s”的 文件; 2.调用汇编程序对源程序进行汇编,生成目标文 件; 3.连接目标文件,生成可以放进ARM软件仿真器 进行调试的映象文件或者可下

2、载到ARM的目标 板执行的二进制文件; 4.对生成的最终文件进行调试。 4 汇编语言上机过程 ARM的开发工具ADS1.2 lADS1.2(ARM Developer Suit 1.2)是ARM公司 推出的一套ARM汇编、C、C+的集成开发环 境,应用于Windows操作系统下。 l包含了几个有用的开发工具,包括: 1.CodeWarrior IDE for the ARM Developer Suite 2.AXD Debuger 汇编语言上机过程 1.CodeWarrior IDE for the ARM Developer Suite n为ARM的程序员管理、开发软件工程项目提供了一 个

3、简单直观、灵活的用户界面。 n可以使用CodeWarrior IDE进行汇编、C、C+的集 成编辑,具有项目管理和代码函数导航等优点。 5 汇编语言上机过程 功能如下: 1.按照工程项目的方式组织源文件、库文件以及其他文件; 2.可以对项目的属性进行设置,以便生成不同性质的映像文件 ; 3.源代码编辑器:可以根据语言的语法对代码中的不同部分进 行加亮显示; 4.源代码浏览器:列举了代码中定义的各种函数和符号,使用 户可以在源代码中方便的进行跳转; 5.源文件的编辑,搜索和替换; 6.文件的比较功能; 7.用户可以根据自己的喜好对开发界面进行定制; 8.可以集成其他插件; 6 汇编语言上机过程

4、CodeWarrior IDE的人机界面 7 汇编语言上机过程 2.AXD Debuger:AXD是一个功能强大、使 用方便的调试器。 n包含了下面的功能: 1.下载映象文件到目标系统中; 2.在目标程序中设置断点; 3.可以查看和修改处理器的状态; 4.可以查看和修改存储器、寄存器的内容 5.可以监控和修改程序中变量的值; 6.可以单步调试程序,对于包含调试信息的目标程 序,可以提供源代码级的调试 。 8 汇编语言上机过程 nAXD支持如下的调试目标 1.ARMulator:是一种特殊的调试代理,用来模拟 程序在ARM目标机系统上的运行,使用 ARMulator,用户不需要目标硬件系统,可以

5、直接 在PC机上开发运行特定的ARM处理器上的应用程 序 本章所介绍的汇编程序都是用ARMulator来运行、调试的 1.基于JTAG的ICE类型的调试代理 2.Angel调试监控程序 3.调试网关 9 汇编语言上机过程 AXD的人机界面 10 4.1 ARM汇编语言特性 4.1.1 行格式、预定义名和内建变量 行格式 在ARM汇编语言模块中,源代码行的一般格式是 : symbolinstruction|directive|pseudo_instruction;comment 也就是: 符号 指令|指示符|伪指令 ;注释 Test1 MOV r1,#0 ; r1=0 11 n上述行格式中用大括

6、号括起来的三部分是可选 的。 n如果一行中没有symbol,指令|指示符|伪指令 不能从第1列位置开始,指令|指示符|伪指令前 面必须放置空格或Tab(制表符)字符。 12 n每一条指令的助记符可以使用全部大写或全部 小写字符,但不能在同一条指令的助记符中大 、小写混用。指示符必须大写。指令中每一个 寄存器名能够全部大写或全部小写,但不能大 、小写混用。 n行格式中symbol通常是标号(label),在指令 或伪指令前它总是标号,在某些指示符前它是 表示变量或常量的符号(symbol)。 n行格式中symbol必须从第一列开始,不能含任 何如空格或Tab的字符,详见本节符号命名规则 部分。

7、13 预定义寄存器和协处理器名 预定义寄存器名 预定义程序状态寄存器名 预定义浮点寄存器名 预定义协处理器名和协处理器寄存器名 14 内建变量 n内建变量(built in variables)见表4.1,它们是 由ARM汇编器定义过的。内建变量不能用SETA 、SETL或SETS指示符设置,它们能被用在表达 式或条件中,如: IF ENDIAN=“big” 15 4.1.2 ARM伪指令与Thumb伪指令 nARM汇编器支持ARM伪指令和Thumb伪指令, 在汇编时把它们翻译成适当的ARM或Thumb指 令组合。 n全部ARM和Thumb伪指令见表4-2。Thumb伪指 令在表中用(Thum

8、b)标出。 nADR;ADRL; nLDFD;LDFS;LDR; nNOP; nADR(Thumb);LDR(Thumb);MOV(Thumb); nNOP(Thumb) 16 4.1.2 ARM伪指令与Thumb伪指令 n虽然表4-2中Thumb伪指令ADR、LDR和NOP与 ARM伪指令ADR、LDR和NOP格式完全相同,但 相同的伪指令出现在程序中Thumb代码区,汇 编器识别为Thumb伪指令;出现在ARM代码区 汇编器识别为ARM伪指令。 17 ADR ARM伪指令 n ADR伪指令装入一个相对程序或相对寄存器的 地址到一个寄存器。 格式 ADRcondition register,

9、expression 18 使用 n使用中,ADR总是被汇编成一条指令。汇编器 试图产生一条ADD或SUB指令,装入地址。如 果不能用一条指令构造出地址,则产生错误信 息,汇编失败。 n如果expression是相对程序的,计算产生的地址 必须与ADR伪指令在同一个代码区域。 使用举例 Test1 MOV r1,#0 ADR r2,Test1 ;产生指令SUB r2,pc,#0xC 19 ADRL ARM伪指令 n ADRL伪指令装入一个相对程序或相对寄存器的 地址到一个寄存器。与ADR伪指令功能相似, 但ADRL比ADR能装入更大的地址范围,原因是 ADRL产生两条数据处理指令。 格式 AD

10、RLcondition register,expression 20 使用 n使用中,ADRL总是被汇编成2条指令。如果汇 编器不能以2条指令构造出地址,则产生错误信 息,汇编失败。 n如果expression是相对程序的,它必须计算产生 一个与ADRL伪指令在同一个代码区域的地址, 否则在随后的连接时,地址可能出了范围。 使用举例 start MOV r0,#10 ADRL r4,start+60000 ;产生指令ADD r4,pc,#0xe800 ; ADD r4,r4,#0x254 21 3. LDR ARM伪指令 nLDR伪指令装入一个32位常数值或一个地址到 一个寄存器。 格式 LD

11、Rcondition register,=expression|label-expression 使用 n使用LDR伪指令有两个主要目的,一是当一个 立即数的值由于超了范围,不能用MOV和MVN 指令装入到一个寄存器时,用LDR伪指令产生 一个文字池常数;二是装入一个相对程序或外 部的地址到一个寄存器。 22 使用举例 LDR r0,=0x1ff ;装入0x1ff到r0 LDR r1,=label ;装入label地址到r1 4. NOP ARM伪指令 n对NOP伪指令,汇编器产生什么也不操作的 ARM指令:MOV r0,r0。 格式 NOP 23 5. ADR Thumb伪指令 nADR伪指

12、令装入一个相对程序或相对寄存器的 地址到一个寄存器。 格式 ADR register,expression 使用 n使用中,在Thumb状态,ADR只能产生字对齐 的地址。要使用ALIGN指示符去确认expression 是字对齐的。 n若表达式是相对程序的,必须计算产生一个与 ADR伪指令在同一个代码区域的地址。 24 使用举例 ADR r3,testexml ;产生指令ADD r3,pc,#nn ;code ALIGN testexm1 DCW 1,2,3,4 25 6. LDR Thumb伪指令 nLDR伪指令装入一个32位常数值或一个地址到一个低 寄存器中。 格式 LDR regist

13、er,=expression|label-expression 使用 n使用LDR伪指令有两个主要目的,一是当一个立即数 的值由于超出MOV指令的范围,不能装入一个寄存器 时,产生文字池常数;二是装入一个相对程序或外部 的地址到一个寄存器。 使用举例 LDR r0,=0x0ffe ;装入0x0ffe到r0 LDR r1,=labeladdr ;装入labeladdr地址到r1 26 7. MOV Thumb伪指令 n MOV伪指令传送一个低寄存器的值到另一个低 寄存器(r0-r7)。而MOV指令不能传送一个低 寄存器的值到另一个低寄存器。 格式 MOV Rd,Rs 使用 n在使用中,汇编器将M

14、OV伪指令变成带立即数 的ADD指令,指令中立即数的值为0。 使用举例 MOV Rd,Rs;产生指令ADD Rd,Rs,#0 27 8. NOP Thumb伪指令 n对NOP伪指令,汇编器产生什么也不操作的 Thumb指令:MOV r8,r8。 格式 NOP 28 4.1.3 符号(symbols)与指示符(directives) n使用符号能够代表变量、地址和数值常数。符 号代表地址时,也称为标号。 符号命名规则 符号命名遵守以下规则: 在符号名中可以使用大写字母、小写字母、数 字字符或下划线字符。 除了局部标号外,不允许在符号名的第一个字 符位置使用数字字符。 符号名中对大、小写字母是敏感

15、的。 在符号名中所有的字符是有意义的。29 在它们的作用范围内,符号名必须是唯一的。 符号名必须不使用内建变量名、预定义寄存器 名和预定义协处理器名。 符号名应该不使用与指令助记符或指示符相同 的名字。 如果需要在符号名中使用更大范围的字符,使 用如下举例的格式为符号名划界线: |C$code| 其中两边的两条竖线不是符号的一部分,只用 于为符号名划界线,它们之间不允许使用竖线 、分号和换行符。 30 变量(variables) 变量有三种类型: 数值 逻辑 串 变量的类型不能被改变,变量的值可以被改变。 31 汇编时串变量的替换 n可以使用串变量作为汇编语言的一整行或一行 的一部分。如果在某

16、一位置使用的串变量带有 $作为前缀,则汇编器用串变量的值替换串变 量。$字符通知汇编器,在检查一行的语法前 替换源代码行的串。 n使用.标记变量名结束,如果变量名后有跟随 的字符,替换后跟随在串变量的值后, 标号(labels) 相对程序的标号 相对寄存器的标号 绝对地址 32 局部标号(local labels) n局部标号使用099范围内的一个数,可以有选 择地在其后跟随一个表示当前范围的名字。 n局部标号用在指令中,指出分支的目标处。 局部标号格式为: nroutname 33 常量 n常量由数值常量、串常量、布尔常量和字符常量组成 。 数值常量 数值常量在汇编语言中采用以下三种形式: 十进制数,例如234; 十六进制数,例如0x

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号