第四章ARM的编程技术.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文档。上传文档
查看更多
第四章ARM的编程技术

第四章 ARM的编程技术 ARM处理器支持两种语言进行设计: 一种是汇编语言(ARM/Thumb); 汇编语言的机器代码生成效率很高,但可读性却不强,复杂的程序很难读懂。 一种是高级语言(如C/C++语言)。 高级语言在大多数情况下其机器代码生成效率较差,但可读性和可移植性却比汇编语言强很多,而且还可以嵌入汇编来解决高效性的代码编写问题。 符号分为两大类: 1、指令助记符: 指令助记符都是预先定义好的,且具备专用的目的和功能。 2、用户定义符: 用户定义符是由用户在编写汇编程序时自行定义的,只在本程序中有意义,不具备通用性。 符号的命名规则: 符号由大小写字母、数字以及下划线组成; 符号不能以数字开头(局部标号除外); 符号区分大小写,且所有字符都是有意义的; 符号在其作用域范围内必须是唯一的; 符号不能与系统内部或系统预定义的符号同名; 符号不要与指令助记符,伪指令同名。 标号代表一个地址,段内标号的地址在汇编时确定,而段外标号的地址 值在链接时确定。 标号的生成方式有以下3种: 基于PC的标号。 基于寄存器的标号。 绝对地址。 常量区分的3种不同类型: 1、数字常量; 2、字符常量; 3、布尔常量。 伪指令是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可 以完成如符号定义、数据定义、分配存储区、指示程序开始结束等功能。 伪指令大概可分为6种类型: ARM伪指令。 符号定义伪指令; 段及段属性定义伪指令; 数据定义伪指令; 汇编控制伪指令; 杂项伪指令。 符号定义伪指令用于定义ARM汇编程序的常量、标号和变量,对变量进行赋值等操作。 变量的声明与赋值伪指令表: 段定义和段属性定义伪指令如下所列: AREA: 定义一个段开始; END: 汇编结束; ALIGN: 定义边界对齐方式; ENTRY: 定义程序入口; CODE16: 指明本段为16位Thumb代码; CODE32: 指明本段为32位ARM代码。 数据定义伪指令用于数据表定义,文件池定义,数据空间分配等,同时 也可完成已分配存储单元的初始化。 常用的数据定义伪指令: 声明一个文件池:LTORG; 定义一个结构化的内存表的首地址:MAP; 定义结构化内存表中的一个数据域:FIELD; 分配一块内存空间,并用0初始化:SPACE; 分配一段字节的内存单元,并用指定的数据初始化:DCB; 分配一段半字的内存单元,并用指定的数据初始化:DCW; 分配一段字的内存单元,并用指定的数据初始化:DCD; 分配一段双字的内存单元,并用指定的数据初始化:DCQ。 汇编控制伪指令用于条件汇编、宏定义、重复汇编控制等。 该类伪指令如下: 宏定义:MACRO和MEND; 条件汇编控制:IF,ELSE和ENDIF; 重复汇编:WHILE和WEND。 1.3 汇编语言程序设计及举例 循环结构由以下两部分组成: 1、循环体: 要求重复执行的程序段部分; 2、循环结束条件: 在循环程序中必须给出循环结束条件,否则程序就会进入 死循环。 调用程序与子程序之间传送的信息为参数时称为参数传送。 参数传送有两种方法: 当参数比较少时,可以通过寄存器传送参数; 当参数比较多时,可以通过内存块或堆栈传送参数。 子程序中采用的返回语句: 二、C语言程序设计 C/C++语言是一种高级语言,使用它能够快速地编写应用程序。高级语言程序设计的优点: 1、有丰富的程序库支持; 2、程序容易编写,具有结构化特点; 3、程序可读性强,容易修改; 4、便于调试和维护; 5、可移植性好。 对于大中型项目来说,用C/C++语言编写软件其开发周期和开发成本通常要小于汇编语言。做项目时,我们一般会提倡用C/C++语言编写代码。 生成的映像文件执行的工作流程: 将执行文件中的 RO 段和 RW 段从加载域地址( load address )复制到执行域地址( execution address ); 初始化 ZI 区域,用 0 来初始化变量 ; 跳转到 __rt_entry,执行如下 4 个调用: 1、调用 __rt_statckheap_init ,建立程序的堆和栈 ; 2、调用 __rt_lib_init ,初始化程序用到的 C 库,并为 main 传递参数 ; 3、调用 main ,即用户程序的入口; 4、调用 exit,退出semihosting。 函数main()在ADS中有特殊的意义。当一个程序工程项目中存在main() 时,链接器会把__main和__rt_entry中的初始化代码链接进来;如果有 main()函数,初始化过程就不会被链接,结果就会导致一些标准的C函 数无效。 避免命名冲突行之有效的方法: 常量全用大

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档