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指令集没有协处理器指令、信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其他指令均为无条件执行;大多数Thumb数据处理指令采用2地址格式。Thumb指令集与ARM指令集的区别一般有如下几点:

?         跳转指令

程序相对转移,特别是条件跳转与ARM代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。

?         数据处理指令

数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第三个寄存器中。

数据处理操作比ARM状态的更少,访问寄存器R8—R15受到一定限制。

(除MOV和ADD指令访问寄存器R8—R15外,其他数据处理指令总是更新CPSR中ALU状态标志)

访问寄存器R8—R15的Thumb数据处理指令不能更新CPSR中的ALU状态标志

?         单寄存器加载和存储指令

在Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0—R7

?         批量寄存器加载和存储指令

LDM和STM指令可以将任何范围为R0——R7的寄存器子集加载或存储

Thumb指令集与ARM指令集的区别

时间: 2024-10-28 22:50:55

Thumb指令集与ARM指令集的区别的相关文章

Thumb指令集与ARM指令集的差别

Thumb指令集 Thumb指令能够看做是ARM指令压缩形式的子集.是针对代码密度[1]的问题而提出的.它具有16为的代码密度.Thumb不是一个完整的体系结构,不能指望处理程序仅仅运行Thumb指令而不支持ARM指令集. 因此.Thumb指令仅仅须要支持通用功能.必要时,可借助完好的ARM指令集,比如:全部异常自己主动进入ARM状态. 在编写Thumb指令时.先要使用伪指令CODE16声明,并且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态.编写ARM指令时,可使用伪指令C

S3C6410 Memory Map & ARM 指令集 笔记

Memory Map &  指令集 上面这幅图表明了 Main memory  物理地址空间和各个控制器之间的关系, 例如,0x 0000 0000 ~ 0x07FF FFFF之间的地址空间属于Int.ROM控制器 SROM控制器 和One NAND控制器寻址的空间,其余的以此类推.具体的细节和内存子系统有关系. 图中标注有2的方框表示这个地址空间既能SROM控制器或OneNAND 控制器,至于具体给谁,这取决于系统控制器 6410 支持 32-bit 的物理地址空间,这部分地址空间可以被划分为

[基于Android的ARM汇编语言系列]之六:NEON指令集与VFP指令集

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell NEON指令集与VFP指令集是ARM指令集的扩展,多用于多媒体编程和浮点运算. 一 Android平台使用NEON指令集与VFP指令集 Android NDK从r3版本开始也添加了对NEON指令集与VFP指令集的支持.使用方法如下所示: 1 运行时检测处理器是否支持NEON指令集与VFP指令集 Andr

ARM指令集、Thumb指令集、Thumb-2指令集

MCU使用什么指令集主要由内核决定的,比如Cortex-M3使用的是Thumb-2指令集 ARM指令集: 编代码全部是 32bits 的,每条指令能承载更多的信息,因此使用最少的指令完成功能, 所以在相同频率下运行速度也是最快的, 但也因为每条指令是32bits 的而占用了最多的程序空间. Thumb指令集: 编代码全部是 16bits 的,每条指令所能承载的信息少,因此它需要使用更多的指令才能完成功能, 因此运行速度慢, 但它也占用了最少的程序空间 Thumb-2指令集:在前面两者之间取了一个

[基于Android的ARM汇编语言系列]之五:ARM指令集与Thumb指令集

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 写在前面:本篇文章旨在大致介绍下ARM指令集的相关内容,这里也同时提供一个有详细解释和用例的待书签的PDF版本,方便大家查阅. ARM指令集详解 指令集是处理器的核心,ARM指令的基本格式如下所示: opcode {cond}{S}{.W\.N}Rd, Rn{.operand2} S:指定是否影响CPS

ARM指令集——跳转指令

ARM 汇编指令条件执行 在ARM模式下,任何一条数据处理指令可以选择是否根据操作的结果来更新CPSR寄存器中的ALU状态标志位.在数据处理指令中使用S后缀来实现该功能. 不要在CMP,CMN,TST或者TEQ指令中使用S后缀.这些比较指令总是会更新标志位. 在Thumb模式下,所有数据处理指令都更新CPSR中的标志位.有一个例外就是:当一个或更多个高寄存器被用在MOV和ADD指令时,此时MOV和ADD不能更新状态标志. 几乎所有的ARM指令都可以根据CPSR中的ALU状态标志位来条件执行.参见

[ARM] ARM指令集

ARM指令集 一.ARM指令的格式和分类 经典ARM指令格式如下: <opcode> {<cond>} {S} <Rd>,<Rn>,<operand2> <opcode>   {<cond>}   {S}    <Rd>,<Rn>,<operand2> <> 为必选项,{}为可选项 为操作码,如ADD表示算术加操作指令 {} 决定指令执行条件域 {S} 决定指令执行是否影响C

ARM指令集----杂项指令

ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load.Store指令,协处理器指令和异常中断指令 跳转指令: 在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种是直接向PC寄存器写入目标地址的值 通过直接向PC寄存器写入目标寄存器的数字可以实现在4GB 地址空间的任意跳转,这种跳转又称为长跳转,如果在残肢令前面使用MOV LR,PC等指令,可以保存返回来的地址值,这样就实现了在4GB空间中的子程序调用 ARM的跳转指令可以从当前指令向前或者是向后的32位的

【转】ARM指令集

ARM指令集 6种类型(53种主要助记符) : 数据处理指令(22种主要助记符) 跳转指令(4种主要助记符) Load/Store指令(16种主要助记符) 程序状态寄存器指令(2种主要助记符) 协处理器指令(5种主要助记符) 软件中断指令 (2种主要助记符) 数据处理指令 数据处理指令大致可分为3类: 数据传送指令: 算术逻辑运算指令: 乘法指令 比较指令. 数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作.所有ARM数据处理指令均可选择使用S后缀,并影响状态标志. 数据处理