ARM寻址方式与指令系统.pptVIP

  1. 1、本文档共108页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Thumb指令集 Thumb指令集与ARM指令集在以下几个方面有区别: 跳转指令。条件跳转在范围上有更多的限制,转向子程序只具有无条件转移。 数据处理指令。对通用寄存器进行操作,操作结果需放入其中一个操作数寄存器,而不是第三个寄存器。 单寄存器加载和存储指令。Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0~R7。 批量寄存器加载和存储指令。LDM和STM指令可以将任何范围为R0~R7的寄存器子集加载或存储, PUSH和POP指令使用堆栈指针R13作为基址实现满递减堆栈,除R0~R7外,PUSH指令还可以存储链接寄存器R14, POP指令可以加载程序指令PC。 Thumb指令集 Thumb指令集没有包含进行异常处理时需要的一些指令,因此,在异常中断时还是需要使用ARM指令。 这种限制决定了Thumb指令不能单独使用,需要与ARM指令配合使用。 Thumb数据处理指令、存储器访问指令中的加载/存储指令使用方法和ARM指令集中相对应的指令类似。 Thumb指令集 1. PUSH和POP 指令格式: PUSH {低寄存器的全部或其子集} POP {低寄存器的全部或其子集} PUSH低寄存器的全部或其子集,LR} POP {低寄存器的全部或其子集,PC} 这两条指令是栈操作指令,用于在寄存器和堆栈之间进行成组的数据传送,PUSH指令用于把寄存器列表中的寄存器数据推进堆栈;POP指令用于把栈区的数据弹出列表的寄存器中。 Thumb指令集 堆栈指针是隐含的地址基址,Thumb指令中的堆栈是满递减堆栈,堆栈向下增长,堆栈指针总是指向最后入栈的数据。 使用入栈指令PUSH时,每传送一个数据,堆栈指针就自动减4;使用出栈指令POP时,每传送一个数据,堆栈指针就自动加4。 POP {低寄存器的全部或其子集,PC}这条指令引起处理器转移到从堆栈弹出给PC的地址,这通常是从子程序返回,其中LR在子程序开头压进堆栈。 这些指令不影响条件码标志。 Thumb指令集 指令示例: PUSH {R0,R4,R6} ;把R0、R4、R6的数据顺序推进栈区 PUSH {R4-R7,LR} ;把R4、R5、R6、R7、LR顺序入栈 POP {R0,R4,R6} ;把R0、R4、R6的数据弹出栈区 POP {R0-R7,PC} ;恢复现场 Thumb指令集 2. 分支指令 (1)B指令 这是Thumb指令集中唯一的有条件指令。 指令格式为: B{条件} 目标地址 若使用条件,则目标地址必须在当前指令的-256~+256字节范围内。 若指令是无条件的,则目标地址必须在±2KB范围内。 若条件满足或不使用条件,则B指令引起处理器转移到目标地址。 目标地址必须在指定限制内。 Thumb指令集 指令示例: CMP R2,#0x20 ;比较R2和0x20 BNE START ;不相等时,即当Z=0时,则跳转 …… START ADD R3,R4 ;跳转处 Thumb指令集 (2)BL指令 格式为: BL 目标地址 BL指令是分支和链接指令, 将下一条指令的地址复制到R14(链接寄存器), 并引起处理器转移到目标地址, 但目标地址不可以是ARM指令。 BL指令不能转移到当前指令±4MB以外的地址。 Thumb指令集 指令示例: BL START ;分支跳转 ADD R3,R4 ;分支的下一条指令 …… START ADD R0,R1 ;指令 Thumb指令集 (3) BX 格式为: BX 寄存器 BX指令是分支和交换指令,寄存器的地址是目标地址,其中的位[0]不是地址信息。 当寄存器的位[0]为1时,表明目标地址处是Thumb指令; 当寄存器的位[0]为0时,表明目标地址处是ARM指令,此时,要求字对准。 Thumb指令集 指令示例: CODE16 ;Thumb程序段 ADR R0,ARM1 ;把标号ARM1处地址赋给R0 BIC R0,#01 ;清R0的位[0] BX R0 ;跳转到ARM1指令集 LET1: …… CODE32 ARM1: …… ADD R3,R4 ;ARM语句 ADR R0,LET+1 ;把LET1所在的地址赋给R0,置R0的位[0] BX R0 ;跳转到ARM指令集 Thumb指令集 3. SWI指令 指令格式: SWI 立即数 SWI指令为软件中断指令,用于产生软件中断,即能够引起SWI异常。 处理器状态切换到ARM态; 处理器模式切换到

文档评论(0)

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

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

1亿VIP精品文档

相关文档