3--ARM嵌入式系统原理和应用教程.ppt

  1. 1、本文档共140页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.2.7 ARM 软件中断指令 指令示例: SWI 0x02 ;实现中断,指明调用2号功能段。 执行SWI指令,软件中断进入的是管理模式,中断后会改变程序状态寄存器中的相关位。中断后ARM处理器把0给PC,并把中断处地址保存在LR中,同时把CPSR保存在SPSR中。 3.3 Thumb指令集 为兼容数据总线宽度为16位的应用系统,ARM体系结构除了支持执行效率很高的32位ARM指令集以外,同时支持16位的Thumb指令集。 Thumb指令集是ARM指令集的一个子集,允许指令编码为16位的长度。 与等价的32位代码相比较,Thumb指令集在保留32代码优势的同时,大大的节省了系统的存储空间。 3.3 Thumb指令集 Thumb指令集与ARM指令集在以下几个方面有区别: 跳转指令。条件跳转在范围上有更多的限制,转向子程序只具有无条件转移。 数据处理指令。对通用寄存器进行操作,操作结果需放入其中一个操作数寄存器,而不是第三个寄存器。 单寄存器加载和存储指令。Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0~R7。 批量寄存器加载和存储指令。LDM和STM指令可以将任何范围为R0~R7的寄存器子集加载或存储,PUSH和POP指令使用堆栈指针R13作为基址实现满递减堆栈,除R0~R7外,PUSH指令还可以存储链接寄存器R14,并且POP指令可以加载程序指令PC。 3.3 Thumb指令集 Thumb指令集没有包含进行异常处理时需要的一些指令,因此,在异常中断时还是需要使用ARM指令。这种限制决定了Thumb指令不能单独使用而需要与ARM指令配合使用。 Thumb数据处理指令、存储器访问指令中的加载/存储指令使用方法和ARM指令集中相对应的指令类似,本节不做详细介绍,仅对有区别的指令介绍。 3.3 Thumb指令集 1. PUSH和POP 指令格式: PUSH {低寄存器的全部或其子集} POP {低寄存器的全部或其子集} PUSH低寄存器的全部或其子集,LR} POP {低寄存器的全部或其子集,PC} 这两条指令是栈操作指令,用于在寄存器和堆栈之间进行成组的数据传送,PUSH指令用于把寄存器列表中的寄存器数据推进堆栈;POP指令用于把栈区的数据弹出列表的寄存器中。 3.3 Thumb指令集 堆栈指针是隐含的地址基址,Thumb指令中的堆栈是满递减堆栈,堆栈向下增长,堆栈指针总是指向最后入栈的数据。使用入栈指令PUSH时,每传送一个数据,堆栈指针就自动减4;使用出栈指令POP时,每传送一个数据,堆栈指针就自动加4。 POP {低寄存器的全部或其子集,PC}这条指令引起处理器转移到从堆栈弹出给PC的地址,这通常是从子程序返回,其中LR在子程序开头压进堆栈。这些指令不影响条件码标志。 3.3 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} ;恢复现场 3.3 Thumb指令集 2. 分支指令 (1)B指令 这是Thumb指令集中唯一的有条件指令。 指令格式为: B{条件} 目标地址 若使用条件,则目标地址必须在当前指令的-256~+256字节范围内。若指令是无条件的,则目标地址必须在±2KB范围内。若条件满足或不使用条件,则B指令引起处理器转移到目标地址。目标地址必须在指定限制内。ARM链接器不能增加代码来产生更长的转移。 3.3 Thumb指令集 指令示例: CMP R2,#0x20 ;比较R2和0x20 BNE START ;不相等时,即当Z=0时,则跳转 …… START ADD R3,R4 ;跳转处 3.3 Thumb指令集 (2)BL指令 格式为: BL 目标地址 BL指令是分支和链接指令,将下一条指令的地址复制到R14(链接寄存器),并引起处理器转移到目标地址,但目标地址不可以是ARM指令。BL指令不能转移到当前指令±4MB以外的地址。 3.3 Thumb指令集 指令示例: BL START ;分支跳转 ADD R3,R4 ;分支的下一条指令 …… START ADD R0,R1 ;指令 3.3 Thumb指令集 (3) BX 格式为: BX 寄存器 BX指令是分支和交换指令,寄存器的地址是目标地址,其中的位[0]不是地址

文档评论(0)

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

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

1亿VIP精品文档

相关文档