ARM指令集
第二讲ARM指令集课件
![第二讲ARM指令集课件](https://img.taocdn.com/s3/m/b22c39277f21af45b307e87101f69e314332faeb.png)
第二讲 ARM指令集
块拷贝与栈操作的对应关系
栈操作
块拷贝
先 增
后
先 减
后
地址变化方向
向上
向下
满
空
满
空
STMIB
LDMIB
STMFA
LDMED
STMIA
LDMIA
STMEA
LDMFD
LDMDB
STMDB
LDMEA
STMFD
LDMDA
STMDA
LDMFA
前变址不回写形式: [<Rn>,+/-<Rm>] 前变址回写形式: [<Rn>,+/-< Rm >]! 后变址回写形式: [<Rn>],+/-< Rm >
第二讲 ARM指令集
偏移量为寄存器值的指令编码类型对应关 系 31 28 27 25 24 23 22 21 20 19 16 15 12 11 8 7 6 5 4 3 0
内容提要
3.1 3.2 3.3 3.4
ARM指令的编码格式 数据处理指令寻址方式 Load/Store指令寻址 批量Load/Store指令寻址方式
第二讲 ARM指令集
3.1 ARM指令的编码格式
一般编码格式 指令条件码
第二讲 ARM指令集
一般编码格式
每条ARM指令占有4个字节,其指令长度为32位
ARM指令集详解(超详细!带实例!)
![ARM指令集详解(超详细!带实例!)](https://img.taocdn.com/s3/m/0006fd26d1f34693dbef3e71.png)
算术和逻辑指令ADC : 带进位的加法(Ad dition with C arry)ADC{条件}{S} <dest>, <op 1>, <op 2>dest = op_1 + op_2 + carryADC将把两个操作数加起来,并把结果放置到目的寄存器中。
它使用一个进位标志位,这样就可以做比32 位大的加法。
下列例子将加两个128 位的数。
128 位结果: 寄存器0、1、2、和3第一个128 位数: 寄存器4、5、6、和7第二个128 位数: 寄存器8、9、10、和11。
ADDS R0, R4, R8 ; 加低端的字ADCS R1, R5, R9 ; 加下一个字,带进位ADCS R2, R6, R10 ; 加第三个字,带进位ADCS R3, R7, R11 ; 加高端的字,带进位如果如果要做这样的加法,不要忘记设置S 后缀来更改进位标志。
ADD : 加法(Add ition)ADD{条件}{S} <dest>, <op 1>, <op 2>dest = op_1 + op_2ADD将把两个操作数加起来,把结果放置到目的寄存器中。
操作数 1 是一个寄存器,操作数2 可以是一个寄存器,被移位的寄存器,或一个立即值:ADD R0, R1, R2 ; R0 = R1 + R2ADD R0, R1, #256 ; R0 = R1 + 256ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 << 1)加法可以在有符号和无符号数上进行。
AND : 逻辑与(logical AND)AND{条件}{S} <dest>, <op 1>, <op 2>dest = op_1 AND op_2AND将在两个操作数上进行逻辑与,把结果放置到目的寄存器中;对屏蔽你要在上面工作的位很有用。
03-ARM指令集
![03-ARM指令集](https://img.taocdn.com/s3/m/2bac4bd3c1c708a1284a44cb.png)
移位方式示意图
第二操作数的移位位数: 第二操作数的移位位数: 移位位数可以用立即数方式或者寄存器方式给出, 移位位数可以用立即数方式或者寄存器方式给出, 如下所示: 如下所示: ADD R3,R2,R1,LSR #2 ;R3 ←R2 + R1÷4 , , , ÷ ADD R3,R2,R1,LSR R4 ;R3←R2 + R1÷2R4 , , , ÷ 寄存器R1的内容分别逻辑右移 位 寄存器 的内容分别逻辑右移2位、R4位(亦即 的内容分别逻辑右移 位 R1÷4、R1÷2R4),再与寄存器 的内容相加,结 ),再与寄存器 的内容相加, ÷ 、 ÷ ),再与寄存器R2的内容相加 果放入R3中 果放入 中。
与基址变址寻址方式相类似,相对寻址以程序计 与基址变址寻址方式相类似,相对寻址以程序计 数器PC的当前值为基地址 的当前值为基地址, 数器 的当前值为基地址,指令中的地址标号作为偏 移量,将两者相加之后得到操作数的有效地址。 移量,将两者相加之后得到操作数的有效地址。 以下程序段完成子程序的调用和返回, 以下程序段完成子程序的调用和返回,跳转指令 BL采用了相对寻址方式: 采用了相对寻址方式: 采用了相对寻址方式 BL NEXT …… NEXT …… MOV PC,LR , ;从子程序返回 ;跳转到子程序 NEXT 处执行
条件域表 2: :
条件码 1001 1010 1011 1100 1101 1110 后缀 LS GE LT GT LE AL 标志 C清零 置位 清零Z置位 清零 N等于 等于V 等于 N不等于 不等于V 不等于 Z清零且(N等 清零且( 等 清零且 于V) ) Z置位或(N不 置位或( 不 置位或 等于V) 等于 ) 忽略 含义 无符号数小于或等于 带符号数大于或等于 带符号数小于 带符号数大于 带符号数小于或等于 无条件执行
常用arm指令集
![常用arm指令集](https://img.taocdn.com/s3/m/70b54af32dc58bd63186bceb19e8b8f67d1cef42.png)
常用arm指令集ARM指令集是一种广泛使用的指令集架构,被广泛应用于各种嵌入式系统、移动设备和服务器等领域。
它具有高效、灵活、可扩展等特点,是现代计算机体系结构的重要组成部分。
本文将介绍常用的ARM指令集。
一、ARM指令集概述ARM指令集是一种精简指令集(RISC)架构,它采用了精简的指令集来提高执行效率和降低功耗。
由于其精简化的设计,ARM处理器可以在更小的面积内实现更高的性能和更低的功耗。
目前,ARM处理器已经广泛应用于各种嵌入式系统、移动设备和服务器等领域。
二、常用ARM指令集1.数据处理指令数据处理指令是最基本和最常用的ARM指令之一。
它包括加法、减法、乘法、除法等运算操作。
这些操作不涉及内存访问,只对寄存器中的数据进行操作。
例如:ADD R1, R2, R3:将R2和R3中的值相加,并将结果存储到R1中。
SUB R1, R2, #10:将R2中的值减去10,并将结果存储到R1中。
MUL R1, R2, R3:将R2和R3中的值相乘,并将结果存储到R1中。
2.数据传输指令数据传输指令是用于在寄存器和内存之间传输数据的指令。
它包括从内存读取数据、向内存写入数据等操作。
例如:LDR R1, [R2]:从地址为R2的内存单元中读取一个字节的数据,并将其存储到寄存器R1中。
STR R1, [R2]:将寄存器R1中的值写入地址为R2的内存单元中。
3.分支指令分支指令用于实现程序跳转,包括无条件跳转、有条件跳转等操作。
它是实现程序控制流程的关键指令之一。
例如:B label:无条件跳转到标记为label的位置。
BEQ label:如果前一次比较结果为相等,则跳转到标记为label的位置。
4.逻辑运算指令逻辑运算指令用于实现与、或、非、异或等逻辑运算操作。
它通常用于实现位操作和掩码操作等功能。
例如:AND R1, R2, #0xFF:将寄存器R2和0xFF进行按位与操作,并将结果存储到寄存器R1中。
ORR R1, R2, #0xFF:将寄存器R2和0xFF进行按位或操作,并将结果存储到寄存器R1中。
ARM指令集
![ARM指令集](https://img.taocdn.com/s3/m/990c9447f78a6529657d5341.png)
ARM指令集6种类型(53种主要助记符):数据处理指令(22种主要助记符)跳转指令(4种主要助记符)Load/Store指令(16种主要助记符)程序状态寄存器指令(2种主要助记符)协处理器指令(5种主要助记符)软件中断指令(2种主要助记符)数据处理指令数据处理指令大致可分为3类:数据传送指令;算术逻辑运算指令;乘法指令比较指令。
数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。
所有ARM数据处理指令均可选择使用S后缀,并影响状态标志。
数据处理指令1MOV 数据传送指令格式:MOV{<cond>}{S} <Rd>,<op1>;功能:Rd=op1op1可以是寄存器、被移位的寄存器或立即数。
例如:MOV R0,#5 ;R0=5MOV R0,R1 ;R0=R1MOV R0,R1,LSL#5 ;R0=R1左移5位数据处理指令22.MVN 数据取反传送指令格式:MVN{<cond>}{S} <Rd>,<op1>;功能:将op1表示的值传送到目的寄存器Rd中,但该值在传送前被按位取反,即Rd=!op1;op1可以是寄存器、被移位的寄存器或立即数。
例如:MVN R0,#0 ;R0=-1数据处理指令33.ADD 加法指令格式:ADD{<cond>}{S} <Rd>,<Rn>,<op2>;功能:Rd=Rn+op2op2可以是寄存器,被移位的寄存器或立即数。
例如:ADD R0,R1,#5 ;R0=R1+5ADD R0,R1,R2 ;R0=R1+R2ADD R0,R1,R2,LSL#5 ;R0=R1+R2左移5位数据处理指令44.ADC 带进位加法指令格式:ADC{<cond>}{S} <Rd>,<Rn>,<op2>;功能:Rd=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即数;carry为进位标志值。
arm指令集类型
![arm指令集类型](https://img.taocdn.com/s3/m/dbf2ab6ee3bd960590c69ec3d5bbfd0a7956d533.png)
arm指令集类型摘要:一、arm 指令集简介1.arm 指令集的发展历程2.arm 指令集的优势和特点二、arm 指令集的类型1.armv1 和armv2 指令集2.armv3 指令集3.armv4 指令集4.armv5 指令集5.armv6 指令集6.armv7 指令集7.armv8 指令集三、arm 指令集的应用领域1.嵌入式系统2.移动设备3.服务器和数据中心4.物联网设备正文:arm 指令集类型随着科技的飞速发展,arm 指令集在现代处理器中扮演着举足轻重的角色。
arm 指令集以其高性能、低功耗和强大的兼容性在全球范围内得到了广泛的应用。
本文将对arm 指令集的类型进行详细的介绍。
一、arm 指令集简介arm 指令集起源于英国Acorn 计算机公司,后由ARM 公司进行进一步研发和推广。
它具有高性能、低功耗、指令集简单、开发成本低等优点。
arm 指令集在嵌入式系统、移动设备、服务器和数据中心等领域有着广泛的应用。
二、arm 指令集的类型arm 指令集从armv1 到armv8,共经历了八个版本的迭代。
1.armv1 和armv2 指令集:这是arm 指令集的早期版本,主要用于嵌入式系统。
2.armv3 指令集:在armv2 的基础上进行了改进,增加了浮点运算指令。
3.armv4 指令集:引入了Thumb-1 指令集,是一种基于arm 指令集的压缩指令集,可以减少程序的存储空间和运行时间。
4.armv5 指令集:对armv4 指令集进行了优化,提高了性能。
5.armv6 指令集:引入了Thumb-2 指令集,是对thumb-1 指令集的升级,增加了更多的指令,提高了性能。
6.armv7 指令集:在armv6 的基础上进行了改进,引入了VFPv3 和NEON 协处理器,增强了浮点运算和多媒体处理能力。
7.armv8 指令集:这是arm 指令集的最新版本,采用了全新的架构,包括AArch32 和AArch64 两种执行状态,支持64 位计算,显著提高了性能。
ARM指令集
![ARM指令集](https://img.taocdn.com/s3/m/288bc3763186bceb19e8bbeb.png)
PC+4
1
DABT SUBS PC,R14_abt,#8
PC+8
PC+8
3
RESET NA
-
-
4
备注: 1--在此PC应是具有预取中止的BL/SWI/未定义指令所取的地址。 2--在此PC是从FIQ或IRQ取得不能执行的指令的地址。 3--在此PC是产生数据中止的加载或存储指令的地址。 4--系统复位时,保存在R14_svc中的值是不可预知的。
ARM指令集
2020年7月11日星期六
5.1 引言--ARM指令与Thumb指令
ARM处理器是基于精简指令集计算机(RISC)原理 设计的,指令集和相关译码机制较为简单。一些 ARM核具有32位ARM指令集和16位Thumb指令集 。
ARM指令集效率高,但是代码密度低;
而Thumb指令集具有较高的代码密度,却仍然保持ARM 的大多数性能上的优势,它是ARM指令集的子集。
指令预取中止 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器 发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
数据中止
若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中 止异常。
IRQ(外部中 当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外 断请求) 设可通过该异常请求中断服务。
所有的ARM指令都是可以有条件执行的,而Thumb指令 仅有一条指令具备条件执行功能。
ARM程序和Thumb程序可相互调用,相互之间的状态切 换开销几乎为零。
ARM指令集与Thumb指令集的关系
ARM指令集支持 ARM核所有的特 性,具有高效、 快速的特点
Thumb指令集 具有灵活、小 巧的特点
arm架构指令集
![arm架构指令集](https://img.taocdn.com/s3/m/5cca54b08662caaedd3383c4bb4cf7ec4afeb628.png)
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指令集
![ARM指令集](https://img.taocdn.com/s3/m/7981a3225b8102d276a20029bd64783e09127da9.png)
ARM指令集ARM指令的基本格式ARM指令的基本格式为:<Opcode> {<Cond>} {S} <Rd>, <Rn> { , <Opcode2> }其中,<>内的项是必需的,{}内的项是可选的。
1)Opcode项Opcode是指令助记符,即操作码,说明指令需要执⾏的操作,在指令中是必需的。
2)Cond项(command)Cond项表明了指令的执⾏的条件,每⼀条ARM指令都可以在规定的条件下执⾏,每条ARM指令包含4位的条件码,位于指令的最⾼4位[31:28]。
条件码共有16种,每种条件码⽤2个字符表⽰,这两个字符可以添加⾄指令助记符的后⾯,与指令同时使⽤。
当指令的执⾏条件满⾜时,指令才被执⾏,否则指令被忽略。
如果在指令后不写条件码,则使⽤默认条件AL(⽆条件执⾏)。
指令的条件码条件码助记符后缀标志含义0000 EQ Z置位相等equal0001 NE Z清零不相等not equal0010 CS C置位⽆符号数⼤于或等于Carry Set0011 CC C清零⽆符号数⼩于0100 MI N置位负数minus0101 PL N清零正数或零plus0110 VS V置位溢出0111 VC V清零没有溢出1000 HI C置位Z清零⽆符号数⼤于high1001 LS Z置位C清零⽆符号数⼩于或等于less1010 GE N等于V 带符号数⼤于或等于1011 LT N不等于V 带符号数⼩于least1100 GT Z清零且(N等于V)带符号数⼤于great1101 LE Z清零或(N不等于V)带符号数⼩于或等于1110 AL 忽略⽆条件执⾏all1111条件码应⽤举例:例:⽐较两个值⼤⼩,并进⾏相应加1处理,C语⾔代码为:if ( a > b ) a++;else b++;对应的ARM指令如下(其中R0中保存a 的值,R1中保存b的值):CMP R0, R1 ; R0与R1⽐较,做R0-R1的操作ADDHI R0, R0, #1 ;若R0 > R1, 则R0 = R0 + 1ADDLS R1, R1, #1 ; 若R0 <= R1, 则R1 = R1 + 1CMP⽐较指令,⽤于把⼀个寄存器的内容和另⼀个寄存器的内容或⼀个⽴即数进⾏⽐较,同时更新CPSR中条件标志位的值。
ARM指令集详解
![ARM指令集详解](https://img.taocdn.com/s3/m/6b74b2bd2e3f5727a4e96231.png)
用于返回到调用代码,方法是把连接存放器的内容传送 到 R15: • MOV PC, R14 ; 退出到调用者 • MOVS PC, R14 ; 退出到精调品P用PT 者并恢复标志位
目的存放器中。操作数 Rn 是一个存放器,操作 数 op_2可以是一个存放器,被移位的存放器, 或一个立即值:
• RSB R0, R1, R2 ; R0 = R2 - R1
• RSB R0, R1, #256 ; R0 = 256 - R1
• RSB R0, R2, R3,LSL #1 ; R0 = (R3 << 1) - R2
• CMP R1,R2
• MOVNE R0,#0xff
精品PPT
比较指令
• CMN : 比较取负的值 • CMN{条件}{P} <op 1>, <op 2> • status = op_1 - (- op_2) • CMN 同于 CMP,但它允许你与小负值(操作数
2 的取负的值)进行比较,与 -1 比较将使用: • CMN R0, #1 ; 把 R0 与 -1 进行比较
• ADDS R0, R4, R8 ; 加低端的字
• ADCS R1, R5, R9 ; 加下一个字,带进位
• ADCS R2, R6, R10 ; 加第三个字,带进位
• ADCS R3, R7, R11 ; 加高端的字,带进位 如果要做这 样的加法,不要忘记设置 S 后缀来更改进位标志。
精品PPT
• TST R0, #0x3F8 精品PPT
测试指令
• TEQ{条件}{P} <op 1>, <op 2> • Status = op_1 EOR op_2 • TEQ 类似于 TST。区别是 EOR 而不是 AND。
常用arm指令集
![常用arm指令集](https://img.taocdn.com/s3/m/60240071e418964bcf84b9d528ea81c759f52e53.png)
常用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的指令集
![arm的指令集](https://img.taocdn.com/s3/m/912e10d7afaad1f34693daef5ef7ba0d4b736d67.png)
arm的指令集
ARM(Advanced RISC Machine)是一种基于RISC(Reduced Instruction Set Computing)架构的处理器指令集。
ARM的指令集可以分为不同的版本和产品系列,主要包括以下几个主要的指令集:1. ARMv4:最早的ARM架构,包含基本的32位指令集。
支持基本的数据处理、数据传输、控制流和内存访问指令等。
2. ARMv5:在ARMv4的基础上添加了一些新的特性,如乘法指令、Jazelle Java加速指令等。
3. ARMv6:引入了Thumb指令集,将每个32位指令压缩为16位,以提高代码密度和节省存储空间。
4. ARMv7:包括ARMv7-A、ARMv7-R和ARMv7-M三个不同的配置。
ARMv7-A是面向应用处理器的指令集,增加了一些新的功能和内核特性,如NEON浮点数SIMD指令集、虚拟化扩展等。
ARMv7-R是面向实时处理器的指令集,增加了对实时操作系统和实时任务的支持。
ARMv7-M是面向嵌入式微控制器的指令集,专注于低功耗、低成本和实时性能。
5. ARMv8:引入了AArch64指令集,支持64位处理器架构,同时保持对32位指令的向后兼容。
ARMv8-A广泛用于高性能服务器、移动设备和嵌入式系统。
除了上述主要的指令集版本外,ARM还有一些针对特定应用领域的扩展指令集,如SIMD指令集(NEON)用于增强媒体和信号处理能力,以及加密扩展指令集(Crypto Extensions)用于加速数据加解密操作等。
arm指令集类型
![arm指令集类型](https://img.taocdn.com/s3/m/c3f1422c1fb91a37f111f18583d049649b660ea2.png)
arm指令集类型(原创版)目录1.ARM 指令集概述2.ARM 指令集的类型3.ARM 指令集的应用领域正文【1.ARM 指令集概述】ARM 指令集,全称 Advanced RISC Machine,即高级 RISC 机器指令集,是一种基于 RISC(精简指令集计算机)架构的 32 位/64 位指令集。
相较于传统的 CISC(复杂指令集计算机)架构,RISC 架构通过简化指令集,降低了硬件的复杂性,提高了指令的执行速度。
ARM 指令集由英国 ARM 公司设计开发,目前已成为嵌入式系统以及移动设备领域的主流处理器指令集。
【2.ARM 指令集的类型】ARM 指令集根据不同的应用场景和需求,分为以下几种类型:(1)ARM32:32 位 ARM 指令集,包括 ARMv1-v7 等多个版本。
其中,ARMv7 是 ARM32 架构的最新版本,也是目前应用最广泛的版本。
(2)ARM64:64 位 ARM 指令集,包括 ARMv8-v9 等多个版本。
相较于 32 位的 ARM32,ARM64 提供了更多的寄存器、更大的内存地址空间以及更高的性能。
目前,许多服务器、桌面电脑以及移动设备都采用了 ARM64 架构的处理器。
(3)MIPS:虽然不属于 ARM 指令集,但 MIPS(Millions of Instructions Per Second)也是一种常见的嵌入式处理器指令集。
MIPS 架构的处理器在很多场景下与 ARM 处理器兼容,因此有时也会被提及。
【3.ARM 指令集的应用领域】ARM 指令集广泛应用于以下领域:(1)嵌入式系统:ARM 指令集由于其低功耗、高性能的特点,在嵌入式系统领域具有广泛的应用。
很多微控制器(MCU)都基于 ARM 指令集设计,如 Cortex-M 系列。
(2)移动设备:智能手机、平板电脑等移动设备对处理器的功耗和性能要求较高,ARM 指令集正好满足这一需求。
目前,苹果、高通、三星等主流移动设备处理器均采用 ARM 指令集。
03ARM指令集
![03ARM指令集](https://img.taocdn.com/s3/m/b06f604abb1aa8114431b90d6c85ec3a86c28b50.png)
(5)堆栈寻址
当 SP 指向最后压入堆栈的数据时,称为满堆栈 (Full Stack),而当 SP 指向下一个将要放入数据的 空位置时,称为空堆栈(Empty Stack);
入栈时,SP 向高地址方向变化,称为递增堆栈 (Ascending Stack);SP 向低地址方向变化,称为递 减堆栈(Descending Stack)。
1、ARM 指令集概述
ARM指令集是32位的,程序的启动都是从ARM 指令开始;所有的ARM指令集都可以是可以条件执 行的。
从以下三个方面介绍: ① 指令集编码 ② 条件执行 ③ 指令分类及指令格式
① 指令集编码
ARM指令集是以32位二进制编码的方式给出的, 大部分的指令编码中定义了第一操作数、第二操作数、 目的操作数、条件标志影响位以及每条指令所对应的 不同功能实现的二进制位。
乘法指令的二进制编码: 乘法指令的详细列表:
(2)Load/Store 指令
唯一用于寄存器和存储器之间进行数据传送的指令:
单寄存器的存取指令(LDR,STR) 多寄存器存取指令(LDM,STM) 单寄存器交换指令(SWP)
LDR/STR:单字和无符号字节的数据传送指令 前变址格式
LDR|STR {<cond>}{B} Rd,[Rn,<offset>]{!} 后变址格式
(1)立即寻址
操作数本身就在指令中给出,只要取出指令也就
取到了操作数,这个操作数被称为立即数,对应的寻
址方式也就叫做立即寻址。例如以下指令:
ADD R0,R0,#1
;R0←R0+1
ADD R0,R0,#0x3f ;R0←R0+0x3f
以上两指令中第二个源操作数即为立即数,要求 以“#”为前缀并声明其进制,如 0x、0d、0b等。
第九讲 ARM指令集
![第九讲 ARM指令集](https://img.taocdn.com/s3/m/e08ee31aa8114431b90dd886.png)
LDR BEQ ADDS
R0,[R1] DATAEVEN R2,R1,#1
;读取R1地址上的存储器单元内容,传送给R0(ALL); ;条件执行分支指令(EQ),即相等则跳转到DATAEVEN; ;加法指令,R2=R1+1,影响CPSR寄存器(S);
SUBNES R2,R1,#0x20;条件执行减法运算(NE),R2=R1-0x20,影响CPSR寄存器(S)。
由是观之,指令中的立即数是由指令编码中的后12位间接表示的,其中最后8位[7: 0]为immed_8,前4位[11:8]为rotate_immed_4。 而0x0101、0x0102、0xFF1000等常数不是合法的立即数。 显然,8位立即数都是合法的立即数,不需要经过移位间接表示,可以直接表9.1.3 指令分类及指令格式
ARM指令集是Load/Store型的,只能通过Load/Store指令实现对系统存储器的访 问,而其它的指令是基于处理器内部的寄存器操作完成。 ARM指令集可分为6大类:
数据处理指令; Load/Store指令; 跳转指令; 程序状态寄存器处理指令; 协处理器指令;
9.1 ARM指令集概述
9.1.1 ARM指令集编码 ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定 义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令 所对应的不同功能实现的二进制位。每条32位ARM指令都具有不同的二进 制编码方式,与不同的指令功能相对应。如下图。
第九讲 ARM指令集
第九讲 ARM指令集
9.1.2 条件执行
在ARM的指令编码表中,最高4位[31:28]表示条件码(cond),每种条件用两个 英文缩写字符表示其含义,可添加在指令助记符的后面,表示指令执行时必须要满 足的条件。ARM指令根据CPSR中的条件位(NZCV)自动判断是否执行指令。条件 满足时指令执行,条件不满足时指令被忽略(相当于执行了一条NOP伪指令)。条 件码编码表见下表。
《ARM指令集》课件
![《ARM指令集》课件](https://img.taocdn.com/s3/m/a3cfa39229ea81c758f5f61fb7360b4c2e3f2ac3.png)
3
2000年代至今
随着移动设备的普及,ARM指令集在智能手机 、平板电脑等领域得到广泛应用。
ARM指令集的特点和优势
低功耗
ARM指令集以其低功耗特性而闻名,适合于移动设备和嵌入式系统。
高性能
ARM指令集采用精简的指令集设计,使得处理器能够快速执行指令,提高性能。
ARM指令集还支持流水线技术,即将一条指令的执行分为取指、译码、执行、存回等多个阶段,以提高 程序的执行效率。
03
ARM指令集的编程实践
ARM指令集在汇编语言中的应用
01
ARM指令集在汇编语言中主要用于编写低级程序,如操作系统内核、 驱动程序等。
02
ARM指令集提供了丰富的控制和数据处理指令,使得汇编语言能够高 效地控制硬件和执行复杂的数据处理任务。
01
指令级并行
在同一时钟周期内,处理多条指令 。
线程级并行
利用多线程并行执行,提高整体性 能。
03
02
数据级并行
对数据进行分组处理,提高处理速 度。
任务级并行
将复杂任务分解为多个子任务,并 行执行。
04
ARM指令集的功耗优化技术
动态电压频率调节
根据实际需求调整电压和频率,降低功耗。
低功耗模式
在空闲或低负载时,进入低功耗模式,降低 功耗。
易于移植
ARM指令集具有良好的可移植性,使得软件在不同ARM处理器之间易于移植。
开放架构
ARM指令集采用开放架构,允许厂商根据需求进行定制和扩展。
ARM指令集的应用领域
智能手机
ARM指令集广泛应用于智能 手机领域,包括苹果、三星
、华为等知名品牌。
ARM 指令集(中文版)
![ARM 指令集(中文版)](https://img.taocdn.com/s3/m/86750fd226fff705cc170a5f.png)
ARM 指令集•寄存器和处理器模式(26-bit 体系)•寄存器和处理器模式(32-bit 体系)•程序状态寄存器和操纵它的指令•寄存器装载和存储指令•算术和逻辑指令•移位操作•乘法指令•比较指令•分支指令•条件执行•软件中断指令•APCS (ARM 过程调用标准)•编写安全的 32-bit 代码的基本规则•IEEE 浮点指令•汇编器伪指令•指令快速查找•ARM 指令格式寄存器和处理器模式ARM 处理器有二十七个寄存器,其中一些是在一定条件下使用的,所以一次只能使用十六个...•寄存器 0 到寄存器 7 是通用寄存器并可以用做任何目的。
不象 80x86 处理器那样要求特定寄存器被用做栈访问,或者象 6502 那样把数学计算的结果放置到一个累加器中,ARM 处理器在寄存器使用上是高度灵活的。
•寄存器 8 到 12 是通用寄存器,但是在切换到 FIQ 模式的时候,使用它们的影子(shadow)寄存器。
•寄存器 13 典型的用做 OS 栈指针,但可被用做一个通用寄存器。
这是一个操作系统问题,不是一个处理器问题,所以如果你不使用栈,只要你以后恢复它,你可以在你的代码中自由的占用(corrupt)它。
每个处理器模式都有这个寄存器的影子寄存器。
•寄存器 14 专职持有返回点的地址以便于写子例程。
当你执行带连接的分支的时候,把返回地址存储到 R14 中。
同样在程序第一次运行的时候,把退出地址保存在 R14 中。
R14 的所有实例必须被保存到其他寄存器中(不是实际上有效)或一个栈中。
这个寄存器在各个处理器模式下都有影子寄存器。
一旦已经保存了连接地址,这个寄存器就可以用做通用寄存器了。
•寄存器 15 是程序计数器。
它除了持有指示程序当前使用的地址的二十六位数之外,还持有处理器的状态。
为更清晰一些... 提供下列图表:User 模式 SVC 模式 IRQ 模式 FIQ 模式 APCSR0 ------- R0 ------- R0 ------- R0 a1R1 ------- R1 ------- R1 ------- R1 a2R2 ------- R2 ------- R2 ------- R2 a3R3 ------- R3 ------- R3 ------- R3 a4R4 ------- R4 ------- R4 ------- R4 v1R5 ------- R5 ------- R5 ------- R5 v2R6 ------- R6 ------- R6 ------- R6 v3R7 ------- R7 ------- R7 ------- R7 v4R8 ------- R8 ------- R8 R8_fiq v5R9 ------- R9 ------- R9 R9_fiq v6R10 ------ R10 ------ R10 R10_fiq slR11 ------ R11 ------ R11 R11_fiq fpR12 ------ R12 ------ R12 R12_fiq ipR13 R13_svc R13_irq R13_fiq spR14 R14_svc R14_irq R14_fiq lr------------- R15 / PC ------------- pc最右侧的列是 APCS 代码使用的名字,关于 APCS 的详情参见这里。
ARM指令集
![ARM指令集](https://img.taocdn.com/s3/m/ef573833182e453610661ed9ad51f01dc28157d0.png)
ARM指令集1.Branch,Exception generating.System instruction1.1 条件分⽀:B.cond指令 指令格式:其中,cond这4位是决定是否满⾜分⽀跳转的条件,根据相应的译法有相应的条件位,label是imm19,是⼀个偏移地址,下⼀次分⽀地址=当前PC+labelCBNZ指令 指令格式:其中,wt和xt代表的是Rt的译码得到的通⽤⽬的寄存器的号码,0-31,当这个寄存器的值(64位)⾮零,那么执⾏跳转,地址当前PC+label 偏移地址。
CBZ CBZ和CBNZ的区别在于判定寄存器的值是⾮零还是零,与CBNZ类似。
TBNZ 指令格式: 测试位不为0发⽣跳转,imm指定⽬的寄存器的某⼀个位,『b5:b40』组成,0-63或者0-31,有b5决定。
哪个⽬的寄存器由Rt指定,label是偏移地址。
TBZ 与TBNZ类似。
1.2 ⾮条件分⽀,⽴即(branch unconditional,immediate)B 指令格式: label=imm26,为branch的分⽀指令BL 指令格式: 直接跳往label+PC地址,并且往X30这个寄存器写⼊当前PC+4作为地址标签。
LINK指令与⾮LINK指令的差别就在于在某个寄存器写⼊当前的地址+4,下⼀次程序返回(RET),那么就可以直接从这个寄存器拿地址返回,不⽤指定具体的地址。
1.3 ⾮条件分⽀,寄存器 ⾮条件branch带R(寄存器)和imme(⽴即数)的差别就是跳转的范围差别,imme跳转的范围⼩,通过指定当前的偏移地址来跳,带R的指令寄存器号码进⾏跳转,可以跳到整个地址空间的任意⼀个地⽅。
BLR 指令格式: 直接跳转到⽬的寄存器的地址,⽬的寄存器有Rn进⾏译码,并且把当前PC+4回写到X30BR 指令格式: 与BLR差别在于有⽆回写。
RET 指令格式: Xn有Rn译码,如果舍弃的话那么默认X30!(什么样的⽅式来暗⽰舍弃?)1.4 中断产⽣和返回BRK(breakpoint Instruction) 指令格式: imm=imm16,PE会记住中断状态,在ESR_ELx这个寄存器,x由中断等级决定,EC值=0X3C并且将相应的imm写⼊到ESR_ELx的ISS部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
21
ARM指令功能說明
• SMULxy(有號數乘法)----16位16位, 結果為32位
SMUL<x><y>{cond} Rd, Rm, Rs ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標 SMULTBEQ R5, R7, R9
22
ARM指令功能說明
16
ARM指令功能說明
• MOV 和 MVN----搬移, 搬移反值
MOV{cond}{S} Rd, operand2 MVN{cond}{S} Rd, operand2 MOV R5, R2 MVNNE R11, #0XF000000B MOVS R0, R0, ASR 14 ;從異常返回, 恢復CPSR
18
ARM指令功能說明
• CLZ---前導0計數
CLZ{cond} Rd, Rm 功能:將Rm中值的前導0的個數進行計算, 將結果放 在Rd中 CLZ R4, R9 CLZNE R2, R3
19
ARM指令功能說明
• MUL和MLA---乘法和乘加
MUL{cond}{S} Rd, Rm, Rs MLA{cond}{S} Rd, Rm, Rs, Rn ;Rd=Rm*Rs+Rn ps:不能使用R15, Rd不能與Rm相同 MUL R1, R2, R3 MLA R1, R2, R3, R4 MULS R0, R2, R2
5
加
連進位旗標一起加
減
連進位旗標一起減
ARM指令系統特點
指令符號
RSB RSC
AND ORR EOR CMP CMN BIC TEQ TST CDP
指令說明 反向減 帶進位的反向減 邏輯and 邏輯or 邏輯xor 比較 反值比較 清除位元
位元測試相等
功能
Rd:=Op2-Rn Rd:=Op2-Rn-進位?
• SMLAxy(有號數乘加)----16位16位, 結果為32位
SMLA<x><y>{cond} Rd, Rm, Rs, Rn ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標 SMLATT R8, R1, R0, R8
23
ARM指令功能說明
• SMULWy(有號數乘法)----32位16位, 結果為高 32位
LDR LDRNE STR LDR LDR
R1, [R10] R2, [R5, #5]! R1, [R2, R4] R1, [R2, R3, LSL #2] R0, localdata
27
ARM指令功能說明
• LDRH、STRH等----半字與有號數傳送類指令
位元測試
輔助運算器資料處理
Rd:=Rn And Op2 Rd:=Rn Or Op2 Rd:=Rn Xor Op2 CPSR flags = Rn-Op2 CPSR flags = Rn+Op2 Rd:=Rn And Not Op2 CPSR flags = Rn Xor Op2 CPSR flags = Rn And Op2
6
ARM指令系統特點
指令符號 指令說明 功能
MUL MLA MOV MVN LDR STR LDM STM
乘 乘加 搬移 移動暫存器
Rd:=Rm*Rs Rd:=(Rm*Rs)+Rn Rd:=Op2 Rd:=0xFFFFFFFF XOR Op2 從記憶體載入暫存器 Rd:=[地址] 從暫存器存回記憶體 [地址]:=Rd 多暫存器載入 堆疊操作(Pop) 儲存多暫存器 堆疊操作(Push)
<LDR|STR>{cond}<H|SH|SB> H:半字,S:有號, B:位元組 LDRH R1, [R2, -R3]! STRH R3, [R4, #14] LDRSB R8, [R2], #-223 LDRNESH R11, [R0]
Rd, <Address>
28
ARM指令功能說明
• 雙字(64位元)傳送類指令
9
條件域
編碼 0110 0111 1000 1001 1010 1011 1100 1101 附加字母 VS VC HI LS GE LT GT LE 旗標 V=1 V=0 C=1且Z=0 C=0且Z=0 意義 溢位 未溢位 無號大於 無號小於或等於 大於或等於 小於
N=V N!=V Z=0且N=V 大於 Z=1且N!=V 小於或等於
7
ARM指令系統特點
• 輔助運算器類及雜項類指令 指令符號 指令說明
PSR存到暫存器
暫存器存到PSR CPU暫存器存到輔助運算器
功能
MRS MSR MCR MRC
LDC STC SWI SWP
Rd:=PSR PSR:=Rd
輔助運算器的暫存器存到暫 存器
記憶體載入輔助運算器 輔助運算器存到記憶體 軟體中斷 暫存器和記憶體交換
ARM指令功能說明
• BLX ---- 帶鏈結分支並可選交換指令集
BLX{cond} Rm BLX label
14
ARM指令功能說明
資料處理類指令
• ADD, SUB, RSB, ADC, SBC, RSC, AND, ORR, EOR和BIC
cond(28-31):條件碼 I(25):第二個運算元格式,1:立即資料, 0:暫存器 Opcode(21-24):操作碼, 算術邏輯功能 S(20):是否更新條件旗標 Rn(16-19):第一運算元編號 Rd(12-15):結果運算元編號 Operand2(0-11):第二個運算元
17
ARM指令功能說明
• CMP、CMN、TST 和 TEQ----比較、比較反值、 測試和測試相等
Opcode{cond} Rn, operand2 功能:改變 N, Z, C, V CMP R2, R8 CMN R1, #6400 CMPGT R13, R7, LSL #2 TST R1, #0X3F8 TEQEQ R10, R8
前索引定址
• LDR R0, [R1, #4]! ;R0:=[R1+4], R1:=R1+4
後索引定址
• LDR R0, [R1], #4 ;R0:=[R1], R1:=R1+4
;R0:=[R1+R2]
基底位址加索引定址
• LDR R0, [R1, R2]
• 多暫存器定址
LDMIA R1, {R0, R2, R5} ;R0:=[R1], R2:=[R1+4], R5:=[R1+8]
25
ARM指令功能說明
• SMLALxy(有號數乘加)----16位16位, 加法為64 位元
SMLAL<x><y>{cond} RdLo, RdHi, Rm, Rs ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標, SMLALTB R2, R3, R7, R1
4
ARM指令系統特點
ARM指令概述
• 大致可以分為轉移類、資料處理類、乘法類、資料傳 送類、輔助運算器類以及雜項類等 指令符號 B 指令說明 轉移 功能 R15:=位址
BL BX ADD ADC SUB SBC
帶鏈結轉移
轉移並交換指令集
R14:=R15, R15:=位址
R15:=Rn, T bit:=Rn[0] Rd:=Rn+Op2 Rd:=Rn+Op2+進位 Rd:=Rn-Op2 Rd:=Rn-Op2-進位?
ARM指令系統
ARM 指令系統特點 條件域 ARM指令的定址方式 ARM指令功能說明 未使用的指令空間 ARM巨集組譯
1
ARM指令系統特點
指令
• SUBNES R4, R5, R7, LSR R2
組譯之後相對應的機器碼
• • • • • • • • • 0001 00 0 0100 1 0101 0100 0111 0 01 1 0010 cond I opcode S Rn Rd operand2 cond:28-31:條件碼 I:25:第二個運算元格式 opcode:操作碼 S:是否更新條件旗標 Rn:第一運算元編號 Rd:結果運算元編號 operand2:第二個運算元
20
ARM指令功能說明
• UMULL、UMLAL、SMULL和SMLAL---無號與 有號長整數乘法和乘加(32位32位, 結果為64位)
op{cond}{S} RdLo, RdHi, Rm, Rs ps:RdHi_RdLo=Rm*Rs + RdHi_RdLo不能使用R15, Rd 不能與Rm相同 UMULL R1, R4, R2, R3 ;R4_R1=R2 R3 UMLALS R1, R5, R2, R3 ;R5_R1=R2 R3 + R5_R1
26
ARM指令功能說明
• LDR和STR----單數據傳送類指令
<LDR|STR>{cond}{B}{T} Rd, <Address> B:表示對位元組的操作, T:在後索引指令中, 強制執 行非特權模式操作 <Address>有三種
• 產生位址的運算式、前索引偏移(二種)、後索引偏移(三種)
12
ARM指令功能說明