ChapterthreeARM指令系统详解.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ADR伪指令 功能:将程序相对偏移地址或寄存器偏移地址加载到指定寄存器中。 格式:ADR{cond} Rd,expr 示例: Mloop MOV R1,#0xf9 ADR R0,mloop ;将mloop对应相对偏移地址传送到R0中 ARM伪指令——小范围的地址读取 ... ADR R1,Delay ... Delay MOV R0,r14 ... ... 0x20 ADD r1,pc,#0x3c ... ... 0x64 MOV r0,r14 ... 应用示例(源程序): 编译后的反汇编代码: ARM伪指令——中等范围的地址读取 ... ADRL R1,Delay ... Delay MOV R0,r14 ... 应用示例(源程序): ... 0x20 ADD r1,pc,#0x40 0x24 ADD r1,r1,#0xFF00 ... 0xFF68 MOV r0,r14 ... 编译后的反汇编代码: LDR伪指令 功能:将32位常量或一个地址加载到到指定寄存器中 。 格式:LDR{cond} Rd,=[expr|lable-expr] 示例: LDR R1,=0x1234 ;R1=0x1234 Mloop LDR R2,=0xABCDEF98 ;R2=0xABCDEF98 LDR R3,=mloop ;将mloop对应地址传送到R3中 将0xff0读取到R1中 LDR R1,=0xFF0 汇编后将得到: MOV R1,0xFF0 当expr表示的地址值没有超过MOV或MVN指令中地址的取值范围时,编译器用合适的MOV或MVN指令代替该LDR伪指令 当expr表示的地址值超过了MOV或者MVN指令中地址的取值范围时,编译器将该常数放在数据缓冲区中,同时用一条基于PC的LDR指令读取该常数。 将0xfff读取到R1中 LDR R1,=0xFFF 汇编后将得到: LDR R1,[PC,OFFSET_TO_LPOOL] … LPOOL DCD 0xFFF ARM伪指令——大范围的地址读取 ... LDR R1,=InitStack ... InitStack MOV R0, LR ... ... 0x60 LDR R1,0xb4 ... 0x64 MOV R0, LR ... 0xb4 DCD 0x64 应用示例(源程序): 编译后的反汇编代码: NOP伪指令 功能:空操作,产生所需的ARM无操作代码,用于简单延时,与MOV Rd,Rd等效 。 格式:NOP 示例: LDR R7,=0x1020 LOOP: NOP ;作为延时主体 SUB R7,R7,#1 方法2:获取immed_24操作数。 SWI_Handler STMFD SP!,{R0-R3,R12,LR};现场保护 MRS R0,SPSR ;读取SPSR STMFD SP!,{R0} ;保存SPSR TST R0,#0x20 ;测试T标志位 LDRNEH R0,[LR,#-2] ;如是Thumb指令,读取指令码16位 BICNE R0,R0,#0xFF00 ;取得thumb指令的8位立即数 LDREQ R0,[LR,#-4] ;如是ARM指令,读取指令码32位 BICEQ R0,R0,#0xFF00000 ;取得ARM指令的24位立即数 LDR PC, [PC,R0, LSL #2] ; PC = PC +R0*4 SwiFunction DCD function0 ;0 DCD function1 ;1

文档评论(0)

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

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

1亿VIP精品文档

相关文档