- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章 Thumb指令集 (一)Thumb指令集特点 Thumb指令集是ARM指令集压缩形式的子集,所有Thumb指令均有对应的ARM指令。 执行Thumb指令时,先动态解压缩,然后作为标准的ARM指令执行。 采用16位二进制编码,代码密度小。 如何区分指令流取决于CPSR的第5位(位T)。 大多数Thumb数据处理指令采用2地址格式。 由于16位的限制,移位操作变成单独指令。 Thumb指令集没有协处理器指令、单寄存器交换指令、乘加指令、64位乘法指令以及程序状态寄存器处理指令,而且指令的第2操作数受到限制。 除了分支指令B有条件执行功能外,其他指令均为无条件执行。 Thumb是一个不完整的体系结构,不能指望处理器只执行Thumb代码而不支持ARM指令集。 (二)状态切换 1、ARM状态进入Thumb状态的方法 执行带状态切换的转移指令BX。若BX指令指定的寄存器的最低位为1,则将T置位,并将程序计数器切换为寄存器其他位给出的地址。 BX R0 ;若R0最低位为1,则转入Thumb状态 异常返回也可以将微处理器从ARM状态转换为Thumb状态。通常这种指令用于返回到进入异常前所执行的指令流,而不是特地用于转换到Thumb模式。 MOVS PC,LR ;当返回地址保存在LR时 STMFD SP!,{registers,LR} ;当返回地址保存在堆栈时, …… ;进入异常后将R14入栈, …… ;假设异常前执行的是Thumb指令,PC保存于LR中 LDMFD SP!,{registers,PC} ^ ;返回指令 2、 Thumb状态进入ARM状态的方法 执行Thumb指令中的交换转移BX指令可以显式地返回到ARM指令流。 利用异常进入ARM指令流。 (三)Thumb指令寄存器的使用 Thumb-ARM相似处: Load/Store结构。 支持8位字节、16位半字和32位字数据类型,半字以两字节边界对准,字以4字节边界对准。 Thumb-ARM差异处: 大多数Thumb指令是无条件执行的,所有ARM指令都是条件执行的。 许多Thumb数据处理指令采用2地址格式(目的寄存器与一个源寄存器相同),ARM数据处理指令大多采用3地址格式。 ADD R0,R1 由于采用高密度编码,Thumb指令格式没有ARM指令格式规则。 (四)Thumb转移指令 Thumb转移指令用于: 向后转移形成循环; 条件结构向前转移; 转向子程序; 处理器从Thumb状态切换到ARM状态。 程序相对转移,特别是条件转移与在ARM状态下相比,在范围上有更多的限制,转向子程序只能是无条件转移。 Thumb转移指令包括:B;BL;BX;BLX ①B指令——目标为Thumb代码 格式1:B 条件码 Label Lable:程序相对偏移表达式,多为同一代码块中的地址标号。 编码结构:-256~+256 格式2:B Label编码结构:±2KB ②BL指令——目标为Thumb代码 格式:BL Label 由于BL指令通常需要大的地址范围,很难用16位指令格式实现,因此,Thumb采用两条这样的指令组合成22位半字偏移(符号扩展为32位),使指令转移范围为± 4MB。 ③BX指令——目标为Thumb代码或ARM代码 格式: BX Rm 编码结构: ④BLX指令 格式1:BLX Label ——目标为ARM代码 (五)寄存器读取和存储指令 单寄存器读取和存储 Thumb单寄存器传送类指令是ARM单寄存器传送类指令的一个子集,和ARM有相同的指令格式。 (六)Thumb多寄存器数据存取指令 LDM和STM指令将范围为R0~R7的寄存器子集从存储器加载以及存储到存储器中。 PUSH和POP指令使用堆栈指针(SP)作为基址实现满递减堆栈。除了可传送R0~R7外,PUSH还可用于存储LR寄存器,POP可用于加载PC寄存器。 PUSH和POP——堆栈指令 功能:低寄存器和可选的LR进栈。低寄存器和可选的PC出栈。 格式: PUSH { Reglist { , LR}} POP { Reglist { , PC}} 其中:Reglist 低寄存器范围的、用逗号隔开的列表。 注释: 1.Thumb堆栈是满递减堆栈,向下增长,且SP指向堆栈的最后入口。 2.寄存器以数字顺序存储在堆栈中。最低数字的寄存器其地址最低。 3.POP{re
文档评论(0)