6_汇编程序设计解析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6_汇编程序设计解析

第四章 ARM汇编语言程序设计 ARM处理器支持两种语言进行设计: 一种是汇编语言(ARM/Thumb); 汇编语言的机器代码生成效率很高,但可读性却不强,复杂的程序很难读懂。 符号分为两大类: 1、指令助记符: 指令助记符都是预先定义好的,且具备专用的目的和功能。 伪指令大概可分为6种类型: ARM伪指令。 符号定义伪指令; 段及段属性定义伪指令; 数据定义伪指令; 汇编控制伪指令; 杂项伪指令。 符号定义伪指令EQU用于定义ARM汇编程序的常量、标号和变量,对变量进行赋值等操作。 AREA CODE16、CODE32 语法格式: CODE16(或CODE32) CODE16:其后的指令序列为16位的Thumb指令。 CODE32:其后的指令序列为32位的ARM指令。 示例: AREA ChangeState,CODE,READONLY CODE32 ;指示下面的指令为ARM指令 LDR r0,=start+1 BX r0 ;切换到Thumb状态,并跳转到start处执行 CODE16 ;指示下面的指令为Thumb指令 start MOV r1,#10 ENTRY 语法格式: ENTRY ENTRY伪操作用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个ENTRY(当有多个ENTRY时,程序的真正入口点由链接器指定)。 示例: AREA example,CODE,READONLY ENTRY ;应用程序的入口点 END 语法格式: END END伪指令用于通知编译器已经到了源程序的结尾。 数据定义伪指令用于数据表定义,文件池定义,数据空间分配等,同时也可完成已分配存储单元的初始化。 常用的数据定义伪指令: 声明一个文件池:LTORG; 分配一块内存空间,并用0初始化:SPACE; 分配一段字节的内存单元,并用指定的数据初始化:DCB; 分配一段半字的内存单元,并用指定的数据初始化:DCW; 分配一段字的内存单元,并用指定的数据初始化:DCD; 汇编控制伪指令用于条件汇编、宏定义、重复汇编控制等。 ARM程序结构 循环结构由以下两部分组成: 1、循环体:要求重复执行的程序段部分; 2、循环结束条件:在循环程序中必须给出循环结束条件,否则程序就会进入死循环。 语句格式: BL 子程序名 调用 将子程序的返回地址存放在连接寄存器LR中 将程序计数器PC指向子程序的入口点 返回 将存放在LR中的返回地址重新拷贝给程序计数器PC 调用程序与子程序之间传送的信息为参数时称为参数传送。 参数传送有两种方法: 当参数比较少时,可以通过寄存器传送参数; 当参数比较多时,可以通过内存块或堆栈传送参数。 AREA Init,CODE,READONLY ENTRY Start LDR R0,=0x3FF5000 LDR R1,=0xFF STR R1,[R0] LDR R0,=0x3FF5008 LDR R1,=0x01 STR R1,[R0] BL Subr … Subr MOV PC,LR END * * 嵌入式系统设计 一种是高级语言(如C/C++语言)。 高级语言在大多数情况下其机器代码生成效率较差,但可读性和可移植性却比汇编语言强很多,而且还可以嵌入汇编来解决高效性的代码编写问题。 计算20+8,结果放入R0寄存器的例子 AREA Buf,DATA,READWRITE ;声明数据段Buf Count DCB 20 ;定义一个字节单元Count AREA Example,CODE,READONLY ;声明代码段Example ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令 START LDR R0,Count ;R0 = Count = 20 MOV R1,#8 ;R1 = 8 ADD R0,R0,R1 ;R0 = R0 + R1 B START END 汇编程序格式 每一个段都有一个名字,并且段名是唯一的。每个段以符号AREA作为段的开始,碰到下一个符号AREA作为段的结束。 AREA name1,attr 语句1 … 语句n AREA name2,attr 语句n+1 … 语句n+m END 汇编程序格式 段分代码段和数据段。 1、标号必须在一行的顶格书写,其后面不要加“:” 对于变量的设置,常量的定义,其标识符必须

文档评论(0)

此项为空 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档