ARM指令集
第二讲ARM指令集课件

第二讲 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指令集详解(超详细!带实例!)

算术和逻辑指令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指令集

移位方式示意图
第二操作数的移位位数: 第二操作数的移位位数: 移位位数可以用立即数方式或者寄存器方式给出, 移位位数可以用立即数方式或者寄存器方式给出, 如下所示: 如下所示: 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指令集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指令集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指令集类型摘要:一、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指令集

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架构指令集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位的,它可以减小程序大小和内存占用。
- 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指令功能說明