Thumb指令集与ARM指令集的区别
- 格式:docx
- 大小:10.63 KB
- 文档页数:2
ARM状态和THUMB状态ARM处理器的⼯作状态在ARM的体系结构中,可以⼯作在三种不同的状态,⼀是ARM状态,⼆是Thumb状态及Thumb-2状态,三是调试状态。
《嵌⼊式系统开发与应⽤教程(第2版)》上介绍说:有两种状态ARM状态和Thumb状态,当时初学甚为不解,现在⼀知半解时再看忽然想到了显⽰中的例⼦:ARM核就好⽐⼀个⾼中学校,那种包含普通⾼中和职业⾼中的。
普通⾼中就相当于ARM状态,职业⾼中就相当于Thumb状态,这样还不能理解的话:可以认为泡泡卡丁车中普通模式和加速模式,,卡丁车加速要等到集⽓管加满,然后“ctrl”⼀下,就切换到了加速模式,⽓放完了就⼜回来了,不管加速模式还是普通模式都是在跑,只是速度不⼀样⽽已。
⽽ARM状态和Thumb状态可以直接通过某些指令直接切换,都是在运⾏程序,只不过指令长度不⼀样⽽已。
这个概念对初学者相当重要,因为当ARM Thumb是什么还没弄清楚,怎么能理解两种状态呢?他们之间的关系清楚了,这样就可以深⼊了解ARM状态是什么,Thumb状态是什么了。
另外:ARM的M系列主要⽤Thumb指令,ARM9和A系列主要⽤ARM指令S3C2440.S启动代码中根本就没⽤Thumb指令。
状态此时处理器执⾏32位的字对齐的指令,Thumb状态此时处理器执⾏16位的,半字对齐的THUMB指令。
切换程序:从到Thumb: LDR R0,=lable+1 BX R0 从ARM到Thumb: LDR R0,=lable BX R01,ARM状态arm处理器⼯作于32位指令的状态,所有指令均为32位2,thumb状态arm执⾏16位指令的状态,即16位状态3,thumb-2状态这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更⾼的性能,更有效的功耗及更少地占⽤内存。
总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升,优化。
ARM Thumb指令集详解ARM Thumb指令集详解2019-04-27 12:30来源:MCU嵌入式领域ARM Thumb指令集Thumb指令可以看作是ARM指令压缩形式的子集,是针对代码密度的问题而提出的,它具有16位的代码密度。
Thumb不是一个完整的体系结构,不能指望处理只执行Thumb指令而不支持ARM指令集。
因此,Thumb指令只需要支持通用功能,必要时可以借助于完善的ARM指令集,比如,所有异常自动进入ARM状态。
在编写Thumb指令时,先要使用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。
编写ARM指令时,则可使用伪指令CODE32声明。
1 Thumb指令集与ARM指令集的区别Thumb指令集没有协处理器指令,信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其它指令均为无条件执行;大多数Thumb数据处理指令采用2地址格式。
Thumb指令集与ARM指令的区别一般有如下几点:跳转指令程序相对转移,特别是条件跳转与ARM代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。
数据处理指令数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第3个寄存器中。
数据处理操作比ARM状态的更少,访问寄存器R8~R15受到一定限制。
除MOV和ADD指令访问器R8~R15外,其它数据处理指令总是更新CPSR中的ALU状态标志。
访问寄存器R8~R15的Thumb数据处理指令不能更新CPSR中的ALU状态标志。
单寄存器加载和存储指令在Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0~R7。
批量寄存器加载和存储指令LDM和STM指令可以将任何范围为R0~R7的寄存器子集加载或存储。
PUSH和POP指令使用堆栈指令R13作为基址实现满递减堆栈。
Thumb指令集和ARM指令集的对比Thumb指令Thumb指令可以看做是ARM指令压缩形式的子集,是针对代码密度的问题而提出的,它具有16位的代码密度。
Thumb不是一个完整的体系结构,不能指望处理程序只执行Thumb指令而不支持ARM指令集。
因此,Thumb指令只需要支持通用功能,必要时,可借助完善的ARM指令集,例如:所有异常自动进入ARM状态。
在编写Thumb指令时,先要使用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。
编写ARM指令时,可使用伪指令CODE32声明。
代码密度:单位存储空间中包含的指令的个数。
例如ARM指令是32位的,而Thumb指令时16位的,如果在1K的存储空间中,可以放32条ARM指令,就可以放64条Thumb指令,因此在存放Thunb 指令时,代码密度高。
Thumb指令集与ARM指令集的区别Thumb指令集不是完整的指令集,它是ARM指令集的子集。
但是Thumb 指令具有更高的代码密度,即占用存储空间小,仅为ARM代码规格的65%,但其性能却下降的很少。
所以,Thumb指令集使ARM处理器能应用到有限的存储带宽,并且,代码密度要求很高的嵌入式系统中去。
Thumb指令集没有协处理器指令、信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其他指令均为无条件执行;大多数Thumb数据处理指令采用2地址格式。
Thumb指令集与ARM指令集的区别一般有如下几点:1. 跳转指令程序相对转移,特别是条件跳转与ARM代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。
2. 数据处理指令数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第三个寄存器中。
数据处理操作比ARM状态的更少,访问寄存器R8—R15受到一定限制。
thumb与arm状态的区别ARM指令和THUMB指令有什么区别1推荐AREA ThumbSub, CODE, READONLY ; Name this block of code ENTRY ; Mark first instruction to execute CODE32 ; Subsequent instructions are ARM header ADR r0, start + 1 ; Processor starts in ARM state, BX r0 ; so small ARM code header used ; to call Thumb main program.CODE16 ; Subsequent instructions are Thumb. start MOV r0, #10 ; Set up parameters MOV r1, #3 BL doadd ; Call subroutine stop MOV r0, #0x18 ; angel_SWIreason_ReportException LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SWI 0xAB ; Thumb semihosting SWIdoadd ADD r0, r0, r1 ; Subroutine code MOV pc, lr ; Return from subroutine.END ; Mark end of file3、CODE16、CODE32 语法格式: CODE16(或CODE32) CODE16伪指令通知编译器,其后的指令序列为16位的Thumb指令。
CODE32伪指令通知编译器,其后的指令序列为32位的ARM指令。
若在汇编源程序中同时包含ARM指令和Thumb指令时,可用CODE16伪指令通知编译器其后的指令序列为16位的Thumb指令,CODE32伪指令通知编译器其后的指令序列为32位的ARM指令。
ARM架构及ARM指令集、Thumb指令集你了解多少?1991 年ARM 公司成⽴于英国剑桥,在成⽴后的那⼏年,ARM业绩平平,⼯程师们也⼈⼼惶惶,害怕随时都会失业。
在这个情况下,ARM 决定改变他们的产品策略——他们不再⽣产芯⽚,转⽽以授权的⽅式,将芯⽚设计⽅案转让给其他公司,即“Partnership”开放模式。
没想到正是这种模式,开创了属于ARM的全新时代。
ARM所采取的是IP(Intellectual Property,知识产权)授权的商业模式,收取⼀次性技术授权费⽤和版税提成。
具体来说,ARM有三种授权⽅式:处理器、POP以及架构授权。
处理器授权是指授权合作⼚商使⽤ARM设计好的处理器,对⽅不能改变原有设计,但可以根据⾃⼰的需要调整产品的频率、功耗等。
POP(processor optimization pack,处理器优化包)授权是处理器授权的⾼级形式, ARM出售优化后的处理器给授权合作⼚商,⽅便其在特定⼯艺下设计、⽣产出性能有保证的处理器。
架构授权是ARM会授权合作⼚商使⽤⾃⼰的架构,⽅便其根据⾃⼰的需要来设计处理器(例如后来⾼通的Krait架构和苹果的Swift架构,就是在取得ARM的授权后设计完成的)。
所以,授权费和版税就成了ARM的主要收⼊来源。
除此之外,就是软件⼯具和技术⽀持服务的收⼊。
⼀、ARM 微处理器的应⽤领域及特点ARM处理器市场覆盖率最⾼、发展趋势⼴阔,基于ARM技术的32位微处理器,市场的占有率⽬前已达到80%。
绝⼤多数IC制造商都推出了⾃⼰的ARM结构芯⽚。
我国的中兴集成电路、⼤唐电讯、华为海思、中芯国际和上海华虹,以及国外的⼀些公司如德州仪器、意法半导体、Philips、Intel、Samsung等都推出了⾃⼰设计的基于ARM核的处理器。
⼯业控制领域:作为32 的RISC 架构,基于ARM 核的微控制器芯⽚不但占据了⾼端微控制器市场的⼤部分市场份额,同时也逐渐向低端微控制器应⽤领域扩展,ARM 微控制器的低功耗、⾼性价⽐,向传统的8 位/16 位微控制器提出了挑战。
thumb指令集是什么
thumb指令集是arm指令集的一个子集,是针对代码密度问题而提出的,它具有16位的代码宽度。
与等价的32位代码相比较,thumb指令集在保留32位代码优势的同时,大大的节省了系统的存储空间。
thumb不是一个完整的体系结构,不能指望处理器只执行thumb指令集而不支持arm指令集。
thumb指令集分为:分支指令、数据传送指令、单寄存器加载和存储指令以及多寄存器加载和存储指令。
thumb指令集没有协处理器指令、信号量(semaphore)指令以及访问cpsr或spsr的指令。
thumb指令集与arm指令集的区别
1、thumb指令继承了arm指令集的许多特点
thumb指令也是采用load/store结构,有数据处理、数据传送及流控制指令等。
arm架构指令集ARM架构是一种基于RISC(Reduced Instruction Set Computing)的计算机处理器架构,它被广泛应用于移动设备、嵌入式系统、网络设备等领域。
ARM指令集是ARM架构的核心部分,它定义了处理器如何执行指令以及如何访问内存和I/O设备。
一、ARM指令集概述1. ARM指令集分类ARM指令集可以分为三类:ARM指令集,Thumb指令集和Thumb-2指令集。
其中,ARM指令集是32位的,Thumb和Thumb-2是16位的。
2. ARM寄存器ARM架构有15个通用寄存器(R0-R14)和一个程序计数器(PC)。
通用寄存器可以用来存储数据或地址,程序计数器则用来存储下一条要执行的指令地址。
3. ARM指令格式ARM指令格式包括操作码、操作数和条件码。
操作码表示要执行的操作类型,操作数表示要进行操作的数据或地址,条件码表示在何种情况下执行该条指令。
4. ARM访问内存在ARM中,访问内存需要使用Load和Store指令。
Load用于将数据从内存中读取到寄存器中,Store用于将数据从寄存器中写入到内存中。
5. ARM流水线流水线是ARM处理器中的一种指令执行方式,它将指令执行过程分为若干个阶段,每个阶段可以同时执行不同的指令。
ARM流水线包括取指、译码、执行、访存和写回等阶段。
二、ARM指令集详解1. ARM指令集ARM指令集是32位的,它支持数据处理、分支跳转、访存和其他操作。
以下是一些常用的ARM指令:(1)MOV:将一个寄存器中的值移动到另一个寄存器中。
(2)ADD:将两个寄存器中的值相加,并将结果存储到另一个寄存器中。
(3)SUB:将两个寄存器中的值相减,并将结果存储到另一个寄存器中。
(4)MUL:将两个寄存器中的值相乘,并将结果存储到另一个寄存器中。
(5)CMP:比较两个寄存器中的值是否相等,并设置条件码。
2. Thumb指令集Thumb指令集是16位的,它可以减小程序大小和内存占用。
ARM指令集、Thumb指令集、Thumb-2指令集
MCU使⽤什么指令集主要由内核决定的,⽐如Cortex-M3使⽤的是Thumb-2指令集
ARM指令集:
编代码全部是 32bits 的,每条指令能承载更多的信息,因此使⽤最少的指令完成功能,所以在相同频率下运⾏速度也是最快的,但也因为每条指令是32bits 的⽽占⽤了最多的程序空间。
Thumb指令集:
编代码全部是 16bits 的,每条指令所能承载的信息少,因此它需要使⽤更多的指令才能完成功能,因此运⾏速度慢,但它也占⽤了最少的程序空间
Thumb-2指令集:
在前⾯两者之间取了⼀个平衡,兼有⼆者的优势,当⼀个操作可以使⽤⼀条 32bits指令完成时就使⽤ 32bits 的指令,加快运⾏速度,⽽当⼀次操作只需要⼀条16bits 指令完成时就使⽤16bits 的指令,节约存储空间。
【基于Android的ARM汇编语⾔系列】之五:ARM指令集与Thumb指令集写在前⾯:本篇⽂章旨在⼤致介绍下ARM指令集的相关内容,这⾥也同时提供⼀个有详细解释和⽤例的待书签的PDF版本,⽅便⼤家查阅。
指令集是处理器的核⼼,ARM指令的基本格式如下所⽰:opcode {cond}{S}{.W\.N}Rd, Rn{.operand2}12S:指定是否影响CPSR寄存器的值,如ADDS,SUBS等。
.W.N:指令宽度说明符。
Rd:⽬的寄存器。
Rn:第⼀个操作数寄存器。
operand2:第⼆个操作数,第⼆个操作数可以是⽴即数、寄存器或寄存器位操作,cond:执⾏条件,它的取值如下图所⽰:⼀跳转指令1.1 B跳转指令。
1.2 BL带链接的跳转指令。
1.3 BX带状态切换的跳转指令。
⼆存储器访问指令2.1 LDR从存储器中加载数据到寄存器。
2.2 STR存储数据到指定的存储单元。
2.3 LDM从指定的存储单元加载多个数据到⼀个寄存器列表。
2.4 STM将⼀个寄存器列表的数据的数据存储到指定的存储单元。
2.5 PUSH将寄存器推⼊满递减堆栈。
2.6 POP从递减堆栈中弹出数据到寄存器。
2.7 SWP⽤于寄存器和存储器之间的数据交换。
三数据处理指令3.1 MOV将8位⽴即数或寄存器⾥的内容送到⽬标寄存器中。
3.2 MVN将8位⽴即数或寄存器⾥的内容按位取反后送到⽬标寄存器中。
3.3 ADD加法指令。
3.4 ADC带进位的加法指令。
3.5 SUB减法指令。
3.6 RSB逆向减法指令。
3.7 SBC带进位的减法指令。
3.8 RSC带进位的逆向减法指令。
3.9 MUL乘法指令。
3.10 MLS3.11 MLA3.12 UMULL3.13 UMLAL3.14 SMULL3.15 SMLAL3.16 SMLAD3.17 SMLSD 3.18 SDIV有符号数除法指令。
3.19 UDIV⽆符号数除法指令。
3.20 ASR算术右移指令。
Thumb指令集与ARM指令集的区别Thumb 指令集
Thumb 指令可以看做是ARM 指令压缩形式的子集,是针对代码密度【1】
的问题而提出的,它具有16 为的代码密度。
Thumb 不是一个完整的体系结构,不能指望处理程序只执行Thumb 指令而不支持ARM 指令集。
因此,Thumb 指令只需要支持通用功能,必要时,可借助完善的ARM 指令集,例如:所有异
常自动进入ARM 状态。
在编写Thumb 指令时,先要使用伪指令CODE16 声明,而且在ARM 指令中要使用BX 指令跳转到Thumb 指令,以切换处理器状态。
编写ARM 指令时,
可使用伪指令CODE32 声明。
【1】.代码密度:单位存储空间中包含的指令的个数。
例如
ARM 指令是32 位的,而Thumb 指令时16 位的,如果在1K 的存储空间中,可以放32 条ARM 指令,就可以放64 条Thumb 指令,因此在存放Thunb 指令时,代码密度高。
Thumb 指令集与ARM 指令集的区别
Thumb 指令集没有协处理器指令、信号量指令以及访问CPSR 或SPSR 的指令,没有乘加指令及64 位乘法指令等,且指令的第二操作数受到限制;除了。