- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 第6章 Thumb指令集及其伪指令 第6章 Thumb指令集及其伪指令 一.Thumb指令系统概述 1.1 Thumb的特点 为了兼容数据总线宽度为16位的应用系统,ARM体系结构支持Thumb指令集。 它是ARM指令集的一个子集,自身不是一个完整的体系结构,不能指望处理器只执行Thumb指令而不支持ARM指令集。 一般而言,Thumb指令用来实现通用功能,必要时借助完善的ARM指令集。 和ARM指令集相比,Thumb有许多自身的特点: ? 代码尺寸更小,可以节省系统的存储空间; ? 针对的是32位的CPU,比纯16位的指令集效率更高; ? 所使用的编程模型和ARM指令集相似,只要遵循一定的调用规则,Thumb子程序和ARM子程序可以互相调用; ? 为实现16位的指令长度舍弃了ARM指令集的一些特性(大多数为无条件执行/数据处理指令的目的寄存器和其中一个源寄存器相同); ? 一般情况下,Thumb指令和ARM指令的时间效率和空间效率关系如下: a.空间效率----Thumb代码所需的存储空间约为ARM代码的60%-70%,Thumb代码使用的指令数约比ARM代码多30%-40% b.时间效率----若使用32位的存储器ARM代码比Thumb代码快约40%,若使用16位的存储器Thumb代码比ARM代码快约40%-50% c.功耗----使用Thumb代码的存储器功耗降低约30% 因此,两种指令集各有优点。若对系统的性能有较高要求可以使用32位的存储系统和ARM指令集;若对系统的成本和功耗有较高要求则可以使用16位的存储系统和Thumb指令集;若二者结合使用则会取得更好的效果。 1.2 Thumb-2 指令集 ? 2003年底ARM公司发布了新的ARM Thumb-2内核技术,该技术的存储空间比ARM少26%,速度比Thumb快25%; ? Thumb-2是一种新的混合型指令集,兼有16位和32位指令,能更好地平衡代码密度和性能; ? Thumb-2指令集结构包含了新的指令种类。 二.Thumb指令集详述2.1 Thumb指令和ARM指令的区别 ? 在编写Thumb指令时可以使用CODE16声明; ? 除跳转指令B外,其余指令均为无条件执行; ? 数据处理指令: a.采用2地址格式----其中一个寄存器既是源寄存器又是目的寄存器(也是大多数Thumb指令采用的); b.Thumb状态下数据处理指令访问R8-R15会受到一定限制(只有MOV、ADD和CMP可以); c.使用R0-R7的数据处理指令总是更新条件标志位,访问R8-R15的数据处理指令不能更新条件标志位; d.加载和存储指令只能访问R0-R7,且访问普通存储区只能使用LDMIA和STMIA,访问堆栈区只能使用PUSH和POP(堆栈为满递减堆栈); e.Thumb指令集没有协处理器指令、状态寄存器访问指令、乘加指令、64位乘法指令。 2.2 跳转指令 2.2.1 B ? 格式:B{ cond } label ? 说明:若使用了{ cond }则label的范围为-257~+256B,否则跳转范围为±2KB。 ? 举例:BEQ LOOP1 2.2.2 BL ? 格式:B label ? 说明:机器级的跳转范围为±4MB,必要时链接器插入代码允许更长的转移。 ? 举例:BL DELAY1 2.2.3 BX ? 格式:BX Rm ? 说明:若Rm[0]=0,则Rm[1]必须为零,处理器将目标代码当作ARM指令对待。 ? 举例: ADR R0,ArmFun BX R0。 2.3 软中断指令 ? 格式:SWI immed_8 ? 说明: 1. immed_8为8位立即数,取值范围是0-255,异常中断服务程序要通过读取SWI指令而取得该立即数; 2. SWI进行参数传递的方法有2种: a.立即数指明用户请求的服务类型,参数通过寄存器传递 MOV R0,#34 ;设置功能号为34 SWI 18 ;调用18号软中断 b.立即数被忽略,服务类型由R0来决定,参数通过其他寄存器传递
文档评论(0)