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

合集下载

ARM状态和THUMB状态

ARM状态和THUMB状态

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指令集详解-9页word资料

ARM Thumb指令集详解-9页word资料

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指令集和ARM指令集的对比

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状态的区别

thumb与arm状态的区别

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指令集你了解多少?

ARM架构及ARM指令集、Thumb指令集你了解多少?

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指令集是什么

thumb指令集是什么
thumb指令集是arm指令集的一个子集,是针对代码密度问题而提出的,它具有16位的代码宽度。

与等价的32位代码相比较,thumb指令集在保留32位代码优势的同时,大大的节省了系统的存储空间。

thumb不是一个完整的体系结构,不能指望处理器只执行thumb指令集而不支持arm指令集。

thumb指令集分为:分支指令、数据传送指令、单寄存器加载和存储指令以及多寄存器加载和存储指令。

thumb指令集没有协处理器指令、信号量(semaphore)指令以及访问cpsr或spsr的指令。

thumb指令集与arm指令集的区别
1、thumb指令继承了arm指令集的许多特点
thumb指令也是采用load/store结构,有数据处理、数据传送及流控制指令等。

ARM及THUMB指令集

ARM及THUMB指令集


; assembles to MVN r0,#0

使用无法用上述方法生成的数据,将产生错误 。
TM
ARM及Thumb指令集
12
12
装载32 bit常数

为允许装载大常数,汇编器提供了一条伪指令: LDR rd, =const 它可能汇编成下列指令: MOV or MVN。 或


LDR 指令,从数据池(Literal pools)读取常数。
11
11
立即数 (2)

Examples:
31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ror #0 ror #8 ror #30
range 0-0x000000ff step 0x00000001 range 0-0xff000000 step 0x01000000 range 0-0x000003fc step 0x00000004
CF
ASR: Arithmetic Right Shift
0
Destination
(无符号数)乘2
Destination
除2,并保留符号位
CF
LSR : Logical Shift Right
...0
ROR: Rotate Right
Destination
位循环
CF
Destination
(无符号数)除2
ARM及Thumb指令集
T
H
E
A
R
C
H
I
T
E
C
T
U
R
E
F
O
R
T TM

arm架构指令集

arm架构指令集

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指令集

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

ARM指令集、Thumb指令集、Thumb-2指令集
MCU使⽤什么指令集主要由内核决定的,⽐如Cortex-M3使⽤的是Thumb-2指令集
ARM指令集:
编代码全部是 32bits 的,每条指令能承载更多的信息,因此使⽤最少的指令完成功能,所以在相同频率下运⾏速度也是最快的,但也因为每条指令是32bits 的⽽占⽤了最多的程序空间。

Thumb指令集:
编代码全部是 16bits 的,每条指令所能承载的信息少,因此它需要使⽤更多的指令才能完成功能,因此运⾏速度慢,但它也占⽤了最少的程序空间
Thumb-2指令集:
在前⾯两者之间取了⼀个平衡,兼有⼆者的优势,当⼀个操作可以使⽤⼀条 32bits指令完成时就使⽤ 32bits 的指令,加快运⾏速度,⽽当⼀次操作只需要⼀条16bits 指令完成时就使⽤16bits 的指令,节约存储空间。

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

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

【基于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算术右移指令。

常用arm指令集

常用arm指令集

常用ARM指令集一、ARM架构简介ARM(Advanced RISC Machine)是一种精简指令集计算机(Reduced Instruction Set Computer,RISC)架构,广泛应用于移动设备、嵌入式系统和主流服务器等领域。

ARM架构的优点包括高效能、高能效、低成本和高可伸缩性,适用于各种应用场景。

二、ARM指令集分类ARM指令集根据其特点和功能可以分为三大类:基本指令集、乘累加指令集和浮点指令集。

1. 基本指令集(ARM和Thumb指令集)基本指令集是ARM架构最基础的指令集,包含大部分常用的数据处理指令、控制指令和访存指令等。

ARM指令集的指令长度为32位。

Thumb指令集是ARM架构的一个变种,指令长度为16位。

Thumb指令集在ARMv4架构引入,用于提高代码密度,适用于存储空间有限的设备。

2. 乘累加指令集(ARM和Thumb-2指令集)乘累加指令集是基于基本指令集的扩展,加入了乘法和累加指令等。

乘累加指令集可以提高乘法和累加运算的效率,适用于需要大量复杂计算的应用。

Thumb-2指令集是Thumb指令集的进一步扩展,兼容Thumb指令集,并增加了32位指令。

Thumb-2指令集使得ARM架构在相同存储空间下能够提供更高的性能。

3. 浮点指令集(VFP和NEON指令集)浮点指令集主要用于进行浮点数运算。

VFP(Vector Floating Point)指令集是ARM架构最早引入的浮点技术,支持单精度和双精度浮点数运算。

NEON指令集是ARM架构后续引入的SIMD(Single Instruction, Multiple Data)指令集,用于提高并行处理能力和多媒体应用性能。

三、常用ARM指令以下是常用的ARM指令及其功能:1.数据处理指令–加法指令:ADD、ADC(带进位的加法指令)–减法指令:SUB、SBC(带借位的减法指令)–乘法指令:MUL、SMULL(有符号乘法指令)、UMULL(无符号乘法指令)–除法指令:SDIV(有符号除法指令)、UDIV(无符号除法指令)–移位指令:LSL(逻辑左移)、LSR(逻辑右移)、ASR(算术右移)、ROR(循环右移)2.控制指令–条件分支指令:B(无条件分支指令)、BEQ(等于零条件分支指令)、BNE(不等于零条件分支指令)等–无条件分支指令:BX(无条件跳转指令,用于实现函数调用)–跳转指令:BL(带链接跳转指令,用于实现函数调用,并将返回地址保存在链接寄存器中)3.访存指令–数据传送指令:LDR(加载指令,用于将数据从内存中加载到寄存器中)、STR(存储指令,用于将数据从寄存器中存储到内存中)–堆栈指令:PUSH(将数据压入堆栈)、POP(将数据从堆栈中弹出)–字节和半字操作指令:LDRB(加载字节指令)、LDRH(加载半字指令)、STRB(存储字节指令)、STRH(存储半字指令)4.特殊指令–中断指令:SWI(软中断指令,用于触发软件中断)–协处理器指令:CDP(协处理器数据处理指令)、MCR、MRC(协处理器寄存器传递指令)四、ARM指令优化技巧为了提高ARM指令执行效率和代码性能,可以采取以下优化技巧:1.使用适当的数据处理指令,避免不必要的指令执行和数据拷贝。

ARM及THUMB指令集

ARM及THUMB指令集

loop
… SUBS r1,r1,#1
R1减1,并设置标志位
BNE loop
如果 Z标志清零则跳转
ARM及Thumb指令集
TM
4
4
Condition Codes
下表为所有可能的条件码:
注意:AL为默认状态,不需要单独指出
Suffix
EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL
位循环
RRX: Rotate Right Extended
Destination
CF
位轮换,从 CF到MSB都参与操作
ARM及Thumb指令集
TM
9
9
寄存器, 可选择是否增加移位操作. 移位值可以是:
5 bit 无符号整数 放在另一个寄存器的低字节
用于常数乘法
立即数 8 bit ,大小范围0-255。
ARM及Thumb指令集
TM
0
0x22
地址增加
r0
0x11
20
20
块数据传送
LDM / STM指令允许一次传送1到16个寄存器到/从存储器中。 寄存器传送顺序不能被指定 • 最小数字的寄存器总是被传送到/从存储器的最低地址上。 LDMIA r10,{r0,r1,r4}
新建一个 text文件 另存为 “gcd.s” 加入到项目中
Build 并执行
AREA myarea, CODE ENTRY
start
MOV r0, #9 MOV r1, #15
; your code here
stop
B stop END
ARM及Thumb指令集
Quiz #2 - GCD

7ARM指令集特点、寻址方式和指令分类详解 习题4

7ARM指令集特点、寻址方式和指令分类详解 习题4
17
寄存器偏移寻址


寄存器偏移寻址是ARM指令集特有的寻址方式。 当第2作数是寄存器偏移方式时,第2个寄存器 操作数在与第1操作数结合之前,选择进行移 位操作。 寄存器偏移寻址指令举例如下: MOV R0, R2, LSL #3 ;R2的值左移3位,结果放入R0,即R0=R2×8 ANDS R1, R1, R2, LSL R3 ;R2的值左移R3位,然后与R1相“与” ,结果 放入R1,并且影响标志位。 SUB R11, R12, R3, ASR #5 ;R12―R3÷32,然后存入R11。

11
指令的条件执行


大多数ARM指令可包含一个可选的条件码{cond}, 只有CPSR中的条件码满足指定条件时,带条件码的 指令才能执行。 此外,大多数ARM指令可以根据执行结果选择是事 更新条件标志,如果更新则指令中须包含字母‘S’: MOVS R4, R4, LSR #32 ;C标志更新为R4的位[31],R4清零。
21
基址加偏移寻址

基址寻址就是将基址寄存器的内容与指令中给出的偏移 量相加,形成操作数的有效地址。基址寻址用于访问基 址附近的存储单元,常用于查表、数组操作、功能部件 寄存器访问等。基址寻址指令举例如下: LDR R2,[R3,#0x0C] 读取R3+0x0C地址上的存储单元的内容,放入R2。 STR R1,[R0,#-4]! ;[R0-4]←[R1],R0=R0-4,符号“!”表明指令在完 成数据传送后应该更新基址寄存器,否则不更新;属 前索引。 LDR R2,[R3],#0x0C ;R2=[R3],R3=R3+0x0C 称为后索引
6
灵活的第2操作数

立即数型


格式: #<32位立即数> 也写成#immed_8r #<32位立即数>是取值为数字常量的表达式,并 不是所有的32位立即数都是有效的。 有效的立即数很少。它必须由一个8位的立即数 循环右移偶数位得到。原因是32位ARM指令中 条件码和操作码等占用了一些必要的指令码位, 32位立即数无法编码在指令中。 举例:

第5章 Thumb指令

第5章 Thumb指令
opcode Rd, Rs
TM
22
22
例:
EOR R3,R4
ROR R1,R0
MUL R0,R7
NEG R5,R3
CMP R2,R6
TM
23
23
5.1.4 带高位寄存器操作的Thumb指令


这类指令的汇编语法格式为
opcode Rd, Hs opcode Hd, Rs opcode Hd, Hs
opcode 0 0 1 0 1 0
TM
15
15
例:
ASR R3,R5 LSR R0,R2,#16
;将R2的内容逻辑右移16次后,结果 放入R0中
LSR R2,R5,#10 LSL R0,R3,#8 ASR R1,R2,#3
TM
16
16
5.1.2 低位寄存器算术运算指令




1.加法与减法运算指令(对R0~R7操作)
Rd:目标寄存器 R0~R7
Hd:目标寄存器R8~R15
Rs:源操作数寄存器 R0~R7 Hs:源操作数寄存器 R8~R15
TM
24
24
例: ADD PC,R1
MOV R13,R14
CMP R4,R12
CMP PC,R12
TM
25
25
5.1.5 带SP/PC的算术运算指令


1.SP/PC加法运算指令 这类指令的汇编语法格式为
39
例: LDR R2,[PC,#0x10]
LDR R0,[R15,#0x40]
TM
40
40

SP作为基址寄存器的加载/存储指令 LDR Rd, [SP,# immed_8×4] STR Rd, [SP,# immed_8×4]

第3.1章ARM指令集

第3.1章ARM指令集

(3)MOV、MVN
MOV MVN R9,R2 R9,R2 //取反传送,R2每位取反->R9
27
(4)CMP、CMN

CMP CMN
R9,R2 R9,R2
28
(5)TST、TEQ

TST R2,#0xFF00 //位与操作,结果丢弃,更新CPSR TEQ R10,R9 //用于测是否相等 //按位异或操作,更新CPSR
扩展域(PSR[15:8])(未使用) 状态域(PSR[23:16])(未使用) 标志域(PSR[31:2 CPSR_f ,#0xf0000000 MRS R0, CPSR ORR R0, R0, #0x20000000 MSR CPSR_f, R0
;设置所有标志位 ;设置R0的29位
32
指令中第二操作数的寻址方式:
前变址模式: LDR R0,[R1,#4] ;R0←[R1+4] 自动变址模式: LDR R0,[R1,#4]!;R0←[R1+4]、R1←R1+4 后变址模式: LDR R0,[R1],#4 ;R0←[R1]、R1←R1+4
寄存器间接寻址 LDR R0,[R1]
33
B 转移指令 BL 带链接的转移指令 BX 带状态切换的转移指令
40
四、转移指令
转移和转移链接指令
B ,BL
汇编格式如下: B{L}{<cond>}
<target address>
B 转移指令 :完成简单的跳转,可跳转到指令中 指定的目的地址 BL 带链接的转移指令:在跳转的同时,把转移 指令后面紧接的指令地址保存到LR(R14)中
/*R0←[R1]*/ /*[R1]←R0*/
第一条指令将以R1的值为地址的存储器中的数据 传送到R0中。第二条指令将R0的值传送到以R1的值为 地址的存储器中。

ARM指令集

ARM指令集
“红领巾”真好
ARM指令集
厦门市松柏第二小学 吴小蔚
5.1 引言--ARM指令与Thumb指令
ARM处理器是基于精简指令集计算机(RISC)原理 设计的,指令集和相关译码机制较为简单。一些 ARM核具有32位ARM指令集和16位Thumb指令集。
ARM指令集效率高,但是代码密度低; 而Thumb指令集具有较高的代码密度,却仍然保持ARM
SUBS PC,R14_fiq ,#4 该指令将寄存器R14_fiq的值减去4后,复制到程序计数器PC 中,从而实现从异常处理程序中的返回,同时将SPSR_mode 寄存器的内容复制到当前程序状态寄存器CPSR中。
13
IRQ(Interrupt Request)
IRQ异常属于正常的中断请求,可通过对处理器的nIRQ引脚 输入低电平产生,IRQ的优先级低于FIQ,当程序执行进入 FIQ异常时,IRQ可能被屏蔽。
Thumb指令集 具有灵活、小 巧的特点
3
5.1 引言—数据类型
ARM微处理器的指令长度可以是32位(在 ARM状态下),也可以为16位(在Thumb状 态下)。
ARM微处理器中支持三种数据类型:
字节(8位有符号和无符号字节) 半字(16位有符号和无符号半字) 字(32位有符号和无符号字) 其中,字需要4字节对齐(地址的低两位为0)、
2、将CPSR复制到相应的SPSR中。 3、根据异常类型,强制设置CPSR的运行模式位。 4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相
应的异常处理程序处。
还可以设置中断禁止位,以禁止中断发生。
如果异常发生时,处理器处于Thumb状态,则当异常向量地 址加载入PC时,处理器自动切换到ARM状态。
15

13ARM指令集与Thumb指令集

13ARM指令集与Thumb指令集

13ARM指令集与Thumb指令集指令格式ARM基本格式<opcode>{<cond>}{S}{.W|.N}<Rd>,<Rn>{,<operand2>}opecode:指令助记符cond:执⾏条件助记符标志含义EQ Z=1相等NE Z=0不相等CS/HS C=1⽆符号数⼤于或等于CC/LO C=0⽆符号数⼩于MI N=1负数PL N=0正数或0VS V=1溢出VC V=0没有溢出HI C=1,Z=0⽆符号数⼤于LS C=0,Z=1⽆符号数⼩于或等于GE N=V有符号数⼤于或等于LT N!=V有符号数⼩于GT Z=0,N=V有符号数⼤于LE Z=1,N!=V有符号数⼩于或等于AL任何⽆条件执⾏(指令默认条件)S:指令是否影响CPSR寄存器.W和.N:宽度说明符,默认16位,32位使⽤ .W说明符。

ARM和Thumb都可以使⽤1。

跳转指令,4条1。

B跳转:B{cond} label2。

BL带链接跳转(类似单步步⼊)将当前指令下⼀条指令地址存⼊R14寄存器,常⽤来调⽤⼦程序:BL{cond} label3。

BX带状态切换跳转(在ARM与Thumb之间切换)处理器判断Rm的位[0]为1,是则将CPSR寄存器标志T置位,切换⾄Thumb,反之切换为ARM:RX{cond} Rm4。

BLX带链接和状态切换的跳转:BLX{cond} Rm2。

存储器访问指令:LDR:寄存器←存储器格式:LDR{type}{cond} Rd,label LDRD{cond} Rd,Rd2,labelType取值:B:⽆符号字节(加载时0扩展为32位)SB:有符号字节(加载时符号扩展为32位)H:⽆符号半字节(加载时0扩展为32位)SH:有符号半字节(加载时符号扩展为32位)Rd:加载寄存器Label:读取的内存地址LDRD:⼀次加载双字的数据STR:寄存器→内存STR{type}{cond} Rd,labelSTRD{cond} Rd,Rd2,labelType中的SB和HS对STR⽆效LDM可以指定多个存储单元:寄存器←内存LDM{addr_mode}{cond} Rn{!} reglistaddr_mode:IA:Increase After,基址寄存器在执⾏指令后增加,默认IB:Increase Before,基址寄存器在执⾏指令前增加(仅ARM)DA:Decrease After,基址寄存器在执⾏指令后减少(仅ARM)DB:Decrease Before,基址寄存器在执⾏指令之前减少FD:满递减堆栈,堆栈向低地址⽣长,堆栈指针指向最后⼀个⼊栈的有效数据项 FA:满递增堆栈,堆栈向⾼地址⽣长,堆栈指针指向下⼀个要放⼊的空地址ED:空递减堆栈,堆栈向低地址⽣长EA:孔递增堆栈,堆栈向⾼地址⽣长Rn:基地址寄存器,存储初始地址!:可选后缀,有则最终地址将写回到Rn寄存器reglist:存储数据的寄存器列表,多个连续寄存器可⽤“-”链接,不连续⽤“,”分隔 STM:寄存器列表数据→内存 STM{addr_mode}{cond} Rn{!} reglistPUSH:将寄存器推⼊满递减堆栈PUSH{cond} reglistPOP:从满递减堆栈弹出寄存器信息POP{cond} reglistSWP:寄存器←→内存SWP{B}{cond} Rd,Rm,[Rn]B:可选字节,有B则交换字节否则交换32位的字cond:执⾏条件Rd:从内存中加载数据的寄存器Rm:写⼊数据的到内存的寄存器Rn:需要交换数据的存储器地址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

标题:Thumb指令集与ARM指令集的区别
2010-06-21 21:43:58
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位乘法指令等,且指令的第二操作数受到限制;除了跳转指令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的寄存器子集加载或存储。

相关文档
最新文档