嵌入式系统讲义bARM汇编语言程序设计剖析.pptx

嵌入式系统讲义bARM汇编语言程序设计剖析.pptx

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言都具有一些相同的基本特征。 ① 一条指令一行 ② 使用标号(label)给内存单元提供名称,从第1列开始书写 ③ 指令必须从第2列或能区分标号的地方开始书写 ④ 注释跟在指定的注释字符后面(ARM使用的是“;”),一直书写到行尾。 ARM汇编语言基本的的语句格式如下: ? {symbol} {instruction |directive | pseudo-instruction} {;comment} 符号 指令、伪操作或伪指令 [; 注释] ;① 符号由大小写字母、数字及下画线组成,符号不能用数字开头。 ② 符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号。 ③ 符号在其作用范围内必须唯一。 ④ 自定义的符号名不能与系统的保留字相同。 ⑤ 符号名不应与指令或伪指令同名。 ;伪操作(Directive)是ARM汇编语言程序里的一些特殊的指令助记符 作用主要是为完成汇编程序做各种准备工作,对源程序运行汇编程序处理,而不是在计算机运行期间由处理器执行。 不同的编译程序所使用的伪操作有所不同。 ;两种常见的ARM编译开发环境;ARM汇编语言伪操作;伪指令是ARM处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机器执行,只是在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作。 ;ARM汇编语言伪指令;在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。 ADR伪指令中的地址是基于PC或寄存器的,当ADR伪指令中的地址是基于PC时,该地址与ADR伪指令必须在同一个代码段中。 地址表达式expr的取值范围如下: 当地址值是字节对齐时,其取指范围为?255B~255B; 当地址值是字对齐时,其取指范围为?1020B~1020B。;ARM伪指令——小范围的地址读取; ... 0x20 ADD r1,pc,#0x3c ... ... 0x64 MOV r0,r14 ...;ARM伪指令——小范围的地址读取;ARM伪指令——小范围的地址读取;ADRL比ADR伪指令可以读取更大范围的地址。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。 地址表达式expr的取值范围如下: 当地址值是字节对齐时,其取指范围为?64KB~64KB; 当地址值是字对齐时,其取指范围为?256KB~256KB。 示例:? LOOP MOV r0,#10 ; LOOP为行标,指示某一行代码 ADRL r4,LOOP ; 将LOOP地址放入r4(相对地址) 因为PC值为当前指令地址值加8字节,替换成本ADR伪指令将被编译器编译为 SUB r4,PC,#0xc NOP (MOV r0,r0) ;ARM伪指令——中等范围的地址读取;ARM伪指令——中等范围的地址读取;ARM伪指令——中等范围的地址读取;在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。 示例: LDR r1,=0xff ; 将0xff读取到r1中 ; 编译后得到MOV r1,0xff 示例: LDR r1, =ADDR ; 将外部地址ADDR读取到R1中? 汇编后将得到: LDR r1,[PC,OFFSET_TO_LPOOL] … LPOOL DCD ADDR ;符号定义伪操作主要用于ARM汇编程序中定义变量,对变量赋值以及定义寄存器的别名等操作。常见的符号定义伪操作有如下几种: ① 用于定义全局变量的GBLA、GBLL以及GBLS。 ② 用于定义局部变量的LCLA、LCLL以及LCLS。 ③ 用于对变量赋值的SETA、SETL以及SETS。 ④ 为一个协处理器定义名称用CP。 ⑤ 为一个通用寄存器列表定义别名用RLIST。 ;;数据定义伪操作一般用于特定的数据分配存储单元,同时可完成已匹配存储单元的初始化。常见的数据定义伪操作有如下几种: ① DCB/W/D 用于分配一片连续字节存储单元并用指定的数据初始化,其中B表示byte,W表示半字(word),D表示字长(double),在ARM处理器里即4个字节。 ② MAP用于定义一个结构化的内存表首地址,与FIELD配合使用。 ③ FIELD用于定义

文档评论(0)

四月 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档