版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六讲 Thumb指令介绍指令介绍Thumb指令介绍指令介绍Thumb指令集概述Thumb指令详细介绍 4.1 Thumb指令集概述 F Thumb指令集是针对代码密度的问题而提出的。可以看作是ARM指令集的子集。 F Thumb是一个不完整的体系结构,不能指望处理器只执行Thumb代码而不支持ARM指令集。一般Thumb代码只需支持通用功能,必要时可以借助ARM指令集. F 应用程序可以灵活的将ARM和Thumb子程序混合编程以便在例程的基础上提高性能或代码密度。F ARM开发工具完全支持Thumb指令 Thumb指令集概述 本节可以分为以下几个部分: Thumb指令集编码 Thumb状态切
2、换 Thumb的编程模型 Thumb指令集特性Thumb指令集编码Thumb指令集编码如下:Thumb状态切换在任何时刻,CPSR的第5位(位T)决定了ARM微处理器执行的是ARM指令流还是Thumb指令流。当T置1,则认为是16位的Thumb指令流;当T置0,则认为是32位的ARM指令流。 进入Thumb模式进入Thumb指令模式有两种方法:一种是执行一条交换转移指令BX,将指令中的目标地址寄存器的最低位置1;另一种方法是利用异常返回,也可以把微处理器从ARM模式转换为Thumb模式。 退出Thumb模式 退出Thumb指令模式也有两种方法:一种是执行Thumb指令中的交换转移BX指令可以显
3、式的返回到ARM指令流;另一种是利用异常进入ARM指令流 ,因为异常总是在ARM模式下进行。 Thumb编程模型Thumb指令集是ARM指令集的一个子集,并只能对限定的ARM寄存器进行操作。其编程模型如下图所示: r0r1r2r3r4r5r6r7r8r9r10r11r12SP(r13)LR(r14)PC(r15)Lo寄存器Hi寄存器CPSR有阴影的寄存器访问时受到限制有阴影的寄存器访问时受到限制 Thumb指令集特点Thumb指令采用16位二进制编码,而ARM指令是32位的。 Thumb指令也是采用Load/Store结构,有数据处理、数据传送及流控制指令等。 大多数Thumb指令是无条件执行
4、的(除了转移指令B),而所有ARM指令都是条件执行的。许多Thumb数据处理指令采用2地址格式,即目的寄存器与一个源寄存器相同,而大多数ARM数据处理指令采用的是3地址格式(除了64位乘法指令外)。Thumb指令集没有协处理器指令、信号量(semaphore)指令、乘加指令、64位乘法指令以及访问CPSR或SPSR的指令,而且指令的第二操作数受到限制。4.2 Thumb指令集详细介绍16位Thumb指令集是从32位ARM指令集提取指令格式的,每条Thumb指令有相同处理器模型所对应的32位ARM指令。根据完成的功能Thumb指令可以分为4类: 数据处理指令; 转移指令; Load/Store指
5、令; 异常中断指令。 一、数据处理指令Thumb数据处理指令包括一组高度优化且相当复杂的指令,范围涵盖编译器通常需要的大多数操作。ARM指令支持在单条指令中完成一个操作数的移位及一个ALU操作,但Thumb指令集将移位操作和ALU操作分离为不同的指令,所以在Thumb指令中存在移位操作。本部分从以下几个方面介绍: 数据处理指令的二进制编码 数据处理指令的分类 ARM指令与Thumb指令比较数据处理指令二进制编码数据处理指令的二进制编码如下图:数据处理指令指令格式格式:op Rd,Rn,Rmop Rd,Rn,#expr3op Rd,#expr8其中:Rd 目的寄存器。它也用做“op Rd,#ex
6、pr8”的第一个操作数。Rn第一操作数寄存器。Rm第二操作数寄存器。expr3 表达式或3位立即数,为取值在-7+7范围内的整数。expr8 表达式或8位立即数,为取值在-255+255范围内的整数。 数据处理指令分类按照数据处理指令的功能,可以将其分为以下几类: 算术运算指令,它又分为以下几类: 移位和循环移位操作(ASR,LSL,LSR和ROR) 比较指令(CMP和CMN) 传送和取负指令(MOV,MVN和NEG) 测试指令(TST) ADD与SUB低寄存器加法和减法 ADD高或低寄存器 ADD与SUBSP ADDPC或SP相对偏移 ADC,SBC和MULARM指令与Thumb指令低寄存器
7、比较:ARM指令Thumb指令MOVSRd,# MOVRd,# MVNSRd,Rm MVNRd,Rm CMPRN,# CMPRn,# CMPRn,Rm CMPRn,Rm CMNRn,Rm CMNRn,Rm TSTRn,Rm TSTRn,Rm ADDS Rd,Rn,#ADDRd,Rn,#ADDSRd,Rn,#ADDRd,# ADDSRd,Rn,RmADDRd,Rn,RmADCSRd,Rn,RmADCRd,Rm SUBSRd,Rn,#SUBRd,Rn,#SUBSRd, Rn,#SUBRd,# SUBSRd,Rn,RmSUBRd,Rn,RmSBCSRd,Rn,RmSBCRd,Rm RSBSRd,Rn
8、,#0NEGRd,Rn MOVSRd,Rm,LSL #LSLRd,Rm,#MOVSRd,Rd,LSL RsLSLRd,Rs MOVSRd,Rm,LSR #LSRRd,Rm,#MOVSRd,Rd,LSR RsLSRRd,Rs MOVSRd,Rm,ASR #ASRRd,Rm,#MOVSRd,Rd,ROR RsASRRd,Rs MOVSRd,Rd,ROR RsRORRd,Rs ANDSRd,Rd,RmANDRd,Rm EORSRd,Rd,RmEORRd,Rm ORRSRd,Rd,RmORRRd,Rm BICSRd,Rd,RmBICRd,Rm MULSRd,Rm,RdMULRd,Rm ARM指令与Th
9、umb指令高寄存器比较:ARM指令Thumb指令ADD Rd,Rd,RmADDRd,Rm (1/2 Hi regs) CMPRn,Rm CMPRn,Rm (1/2 Hi regs) ADDRd,PC,#ADDRd,PC,#ADDRd,SP,#ADDRd,SP,#ADDSP, SP,#ADDSP,SP,#SUBSP,SP,#SUBSP,SP,#二、Thumb转移指令ARM指令有一个大的(24位)偏移域(offset field),这不可能在16位Thumb指令格式中表示。为此Thumb指令集有多种方法实现其子功能。本部分从以下几个方面介绍: 转移指令的二进制编码 转移指令的汇编格式 转移指令的分
10、类转移指令二进制编码转移指令的二进制编码如下:转移指令汇编格式转移指令的汇编格式如下:转移指令的典型用法如下: 1)短距离条件转移指令可用于控制循环的退出。 2)中等距离的无条件转移指令用于实现goto功能。 3)长距离子程序调用B ;格式1 目标为Thumb代码B ;格式2 目标为Thumb代码BL ;格式3 目标为Thumb代码BLX ;格式3a目标为ARM代码BLXRm;格式4 目标为ARM或Thumb代码 转移指令分类转移指令分类如下: B分支指令,Thumb指令集惟一可条件执行的指令。 BL带链接的长分支。 BX分支指令,并可选择地切换指令集。 BLX带链接分支,并可选地交换指令集。
11、 B 指令 B cond /*8位偏移,目标为Thumb代码 */ B /*11位偏移,目标为Thumb代码 */这两种格式是条件域和偏移长度的折衷。指令首先将偏移值左移1位,实现16位对齐,然后扩展到32位,因此他们的偏移量分别为256字节和2K字节。BL 指令 BL /*11位偏移,目标为Thumb代码 */ 转移链接子程序通常需要一个大的范围,很难用16位指令 格式实现为此,Thumb采用两条这样格式的指令组合成22位半字偏移(符号扩展为32位),使指令转移范围为4MB。 为了使这两条转移指令相互独立,以致使他们之间也能响应中断等,将链接寄存器LR作为暂存器使用,LR在这两条指令执行完成
12、后会被覆盖,因此,LR中不能装有有效内容。这个指令对的操作如下:(第一条) LR:PC+(偏移量左移12后符号扩展至32位)(第二条) PC:LR+(偏移量左移1位)LRoldPC+3BLX 指令 BLX /*目标为ARM代码 */ 该指令只在v5T结构中有效。它使用与上面BL指令同样的第一步,即(第一条) LR:PC+(偏移量左移12后符号扩展至32位)(第二条) PC:LR+(偏移量左移1位) &0 xffff_fffc LRoldPC+3 Thumb位清0。应注意转移的目标是ARM指令,偏移地址只需要10位,而且PC值的位1可能为1,因此,必须进行清0操作。BLX Rm指令 BLXRm
13、目标为ARM代码或Thumb代码 与上一条代码不同的就是r14的值为后续地址加1,以表示被Thumb代码调用。三、Load/Store指令 Thumb的Load/Store指令又可以分为: 单寄存器数据存取指令(LDR和STR)多寄存器数据存取指令 (LDM和STM) 单寄存器数据存取指令(LDR和STR)F二进制编码如下:单寄存器数据存取指令(LDR和STR)F汇编格式如下: Rd,Rn,#; = LDR|LDRB|STR|STRB Rd,Rn,#; = LDRH| STRH Rd,Rn,Rm;=LDR|LDRH|LDRSH|LDRB|LDRSB|STR|STRH|STRB Rd,PC,# Rd,SP,#; = LDR| STR/该两条指令偏移量为8位多寄存器数据存取指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 说课心得体会
- 2022-2023学年七年级语文上学期期末考试试题汇编:词语运用
- 浙江省台州市山海协作体2024-2025学年高二上学期期中联考 化学试题(含答案)
- 山东名校考试联盟2024-2025学年上学期期中检测 高三历史试题(无答案)
- 广西壮族自治区玉林市玉州区南江镇中心小学2024-2025学年五年级上册期中英语试题(无答案)
- 第4单元 比-单元素养测评(2)-2024-2025学年数学人教版六年级上册(含答案解析)
- 浙江地区高考语文五年高考真题汇编名篇名句默写
- 2025年高考化学总复习试题分类训练:金属有关的工艺流程(解析卷)
- 幼儿园厨师长期劳动合同
- 国家战略合作意向书
- InfoQ:2023中国企业数字化人才发展白皮书
- 500万羽智能化蛋鸡养殖项目可行性研究报告-立项备案
- 放弃父母的财产的协议书
- 《韩非子·五蠹》课件
- 公司危险源辨识与风险评价及控制措施清单
- 语文教学中如何进行分组教学
- Chinese Tea 中国茶文化 中英文
- 钻孔灌注桩灌注施工检查记录
- 《如何在初中体育大单元教学中更好的落实“教会”“勤练”“常赛”》 论文
- 基于学科核心素养的单元整体教学设计论文以铁及其化合物为例
- 白蛋白在临床营养中的合理应用
评论
0/150
提交评论