网站大量收购独家精品文档,联系QQ:2885784924

第3章Cortex-M3指令系统讲解.ppt

  1. 1、本文档共275页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例 3.61 使用ADR伪指令加载地址,实现查表功能。 ... ADR R0,ADDR_TAB ;加载转换表地址 LDRB R1,[R0,R2] ;使用R2作为参数,进行查表 ... ADDR_TAB DCB 0xA0,0xF8, 0x80,0x48, 0xE0,0x4F, 0xA3,0xD2 分析:通过ADR伪指令将转换表的首地址值(ADDR_TAB)加载到R0中,每个表项的偏移地址值由R2传入,从而可以实现查表功能。 * 2. ADRL 中等范围的地址读取伪指令 格 式:ADRL{cond} Rm,addr 功 能:ADRL指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。ADRL比ADR伪指令可以读取更大范围的地址。在汇编编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用实现,则产生错误,编译失败。 格式中: Rm:表示要加载的目标寄存器。 Addr:地址表达式。当地址值是非字对齐时,取值范围-64K~64K字节之间;当地址值是字对齐时,取值范围-256K~256K字节之间。 使用ADRL加载地址,可以实现程序跳转,例如: ... ADR LR,RETURN1    ;设置返回地址 ADRL R1,Thumb_sub+1 ;取得Thumb子程序入口地址,且R1的0位置1 BX R1 ;调用Thumb子程序,并切换处理器状态 RETURN1 ... CODE16 Thumb_sub MOV R1,#10 ... * 3. LDR 大范围的地址读取伪指令 格 式:LDR{cond} Rm,=addr 功 能:LDR指令用于加载32位立即数或一个地址值到指定寄存器。在汇编 编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令。否则,汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。 格式中: Rm: 表示要加载的目标寄存器。 Addr:32位立即数或基于PC的地址表达式或外部表达式。 例 3.62 LDR伪指令举例如下: LDR R0,=0 ;加载32位立即数0 LDR R0,=DATA_BUF+60 ;加载DATA_BUF地址+60 ... LTORG          ;声明文字池 ... * 伪指令LDR常用于加载芯片外围功能部件的寄存器地址(32位立即数), 以实现各种控制操作,如程序: ... LDR R0,=IOPIN ;加载GPIO的寄存器IOPIN的地址 LDR R1,[R0] ;读取IOPIN寄存器的值 ... LDR R0,=IOSET LDR R1,=0 STR R1,[R0] ;IOSET=0 ... 注意: (1)从PC到文字池的偏移量必须小于4KB。 (2)与ARM指令的LDR相比,伪指令的LDR的参数有“=”号。 * 4. NOP 空操作伪指令 格式:NOP 功能:NOP伪指令在汇编时将会被代替成ARM中的空操作,比如可能为“MOV R0

文档评论(0)

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

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

1亿VIP精品文档

相关文档