第6章 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文档。上传文档
查看更多
第6章 ARM程序设计

LTORG说明 LTORG用于声明一个数据缓冲池(也称为文字池)的开始。在使用伪指令LDR时,常常需要在适当的地方加入LTORG声明数据缓冲池,LDR加载的数据暂时放于数据缓冲池。 语法: LTORG 使用说明: 当程序中使用LDR之类的指令时,数据缓冲池的使用可能越界。为防止越界(4K范围内)发生,可使用LTONG伪操作定义数据缓冲池。长代码段可以使用多个数据缓冲池。ARM汇编编译器一般把数据缓冲池放在代码段的最后面,即下一代码段开始之前,或者END伪操作之前,可以使用LTORG改变此约定。LTORG伪操作通常放在无条件跳转指令之后,或者子程序返回指令之后,这样处理器就不会错误的将数据缓冲池中的数据当作指令来执行。 LTORG使用举例 AREA?? Example ,CODE,READONLY;? //声明一个代码段,名称为Example,属性为只读 Start??? BL? funcl ???????? …. Funcl;????????????????????????????? //子程序 LDR? R1,=0x800;????????????????? //将0X800加载到R1 MOV? PC,LR;?????????????????? //子程序结束 LTORG?????? ;?????????????????? //定义数据缓冲池 Data?? SPACE 40;???????????????? //从当前开始分配40字节的内存单元并初始化为0 END;??????????????????????????? //程序结束 LDR和ADR伪指令 ADR伪指令(小范围的地址读取伪指令) 在汇编编译器处理源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能。如果不能用一条指令来实现ADR伪指令的功能,编译器将包括错误。 ADRL伪指令(中等范围的地址读取伪指令) 在汇编编译器处理源程序时,ADRL伪指令被编译器替换成两条合适的指令,即使一条指令可以完成该伪指令的功能,编译器也将用两条指令来替换该ADRL伪指令。如果不能用两条指令来实现ADRL伪指令的功能,编译器将报告错误 LDR伪指令(大范围的地址读取伪指令) LDR伪指令将一个32位的常数或者一个地址值读取到寄存器中 ADR伪指令 1.?ADR(小范围的地址读取伪指令) 该指令将基于PC的地址值或基于寄存器的地址值读取到寄存 器中。语法格式 ADR{COND} REGISTER,EXPR 其中,COND为可选的指令执行的条件。 REGISTER为目标寄存器。 EXPR为基于PC或者基于寄存器的地址表达式,其取值范围如下: 当地址值不是字对齐时,其取值范围为-255~255。 当地址值是字对齐时,其取值范围为-1024~1024。 ?当地址值是16字节对齐时,其取值范围将更大。 ADRL(中等范围的地址读取伪指令 ADRL(中等范围的地址读取伪指令) 该指令将基于PC或基于寄存器的地址值读取到寄存器中。ADRL伪指令比ADR伪指令可以读取更大范围的地址。ADRL伪指令在汇编时被编译器替换成两条指令。 语法格式 ADRL? {COND} REGISTER,EXPR 其中,COND为可选的指令执行的条件。 REGISTER为目标寄存器。 EXPR为基于PC或者基于寄存器的地址表达式,其取值范围如下: 当地址值不是字对齐时,其取值范围为-64KB~64KB。 当地址值是字对齐时,其取值范围为-256KB~256KB。 当地址值是16字节对齐时,其取值范围将更大。 LDR伪指令 伪指令LDR{cond} register, ={expr|label-expr} expr为32为常量。编译器根据expr的取值情况来处理这条伪指令: 1、当expr表示的地址没有超过mov或mvn指令中地址的取值范围时,编译器用合适的mov指令或mvn指令代替该LDR伪指令。 2、当expr表示的地址超过了mov或mvn指令中地址的取值范围时,编译器将该常数放在数据缓冲池中,同时用一条基于PC的LDR指令读取该常数。 LDR的两种用法 ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。 (1)LDR?? r0, =name, 带等号的是伪指令,而不是ARM指令,LDR 伪指令用于加载立即数或一个地址值到指定寄存器. *如果name是立即数的话:LDR R0,=0X123;//将0X123存入R0 *如果name是个标识符:LDR R0,=NAME;//将NAME的地址存入R0, 相当于: ?????????????? LDR R0,LA

文档评论(0)

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

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

1亿VIP精品文档

相关文档