ARM指令分类及寻址方式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
ARM微处理器指令的条件域
指令的条件域表-2
条件码 1000 1001 1010 1011 1100 1101 11100 后缀 HI LS GE LT GT LE AL 标志 C=1且Z=0 C=0且Z=1 N=V N!=V Z=0且(N=V) Z=1或(N!=V) 忽略 含义 无符号数大于(>) 无符号数小于/等于 带符号数大于/等于 带符号数小于 带符号数大于 带符号数小于/等于 无条件执行
LSL(逻辑左移)、LSR (逻辑右移) ASR(算术右移)、ROR(循环右移) RRX(带进位的循环右移)
22
移位操作示意图
各种移位操作如下图所示:
0 (a) LSL移位操作 0 (b) LSR移位操作
(c) ASR移位操作
(d) ROR移位操作
C (e) RRX移位操作
23
ARM微处理器指令的寻址方式
r0 = r1 + 100
r0 = r1 + (r2算术右移一位)
17
ARM微处理器指令的寻址方式
ARM指令系统中的寻址方式 ARM指令系统支持如下几种常见的寻址方式:
立即寻址 寄存器寻址 寄存器间接寻址 寄存器移位(偏移)寻址 基址变址寻址 多寄存器寻址 相对寻址 堆栈寻址
在以上两条指令中,第二个源操作数即为立即数,要 求以“#”为前缀,对于以十六进制表示的立即数,还 要求在“#”后加上“0x”。
19
ARM微处理器指令的寻址方式作为操作数,这 种寻址方式是各类微处理器经常采用的一种方式,也是 一种执行效率较高的寻址方式。以下指令:
21
ARM微处理器指令的寻址方式
寄存器移位寻址
这种寻址方式是ARM指令集特有的。第2个寄存器操作 数在与第1个操作数结合之前,先进行移位操作。 例如指令: ADD R3,R2,R1,LSL #3 ;R3R2+8×R1 寄存器R1的内容逻辑左移3位,再与寄存器R2内容相 加,结果放入R3中。 可以采取的移位操作如下:
助记符
SWI SWP TEQ TST
指令功能描述
软件中断指令 交换指令 相等测试指令 位测试指令
15
ARM 指令系统
ARM指令格式
指令格式举例:
LDR R0,[R1]
BEQ DATAEVEN ADDS R0, R1,#2 SUBNE R0,R1,#0x10
; 将R1中内容为地址的存储单元
; 中数取出送到R0中 ; 若相等则转移到DATAEVEN ; R1+2R0,影响CPSR的标志位(S) ; 不等时执行R1-0x10R0,不影响
ADD
R0,R1,R2
/*R0←R1+R2*/
该指令的执行效果是将寄存器R1和R2的内容相加,其 结果存放在寄存器R0中。
20
ARM微处理器指令的寻址方式
寄存器间接寻址
寄存器间接寻址就是以寄存器中的值作为操作数的地 址,而操作数本身存放在存储器中。例如以下指令: ADD R0,R1,[R2] /*R0←R1+[R2]*/ LDR R0,[R1] /*R0←[R1]*/ STR R0,[R1] /*[R1]←R0*/ 在第一条指令中,以寄存器R2的值作为操作数的地址, 在存储器中取得一个操作数后与R1相加,结果存入寄存 器R0中; 第二条指令将以 R1 的值为地址的存储器中的数据传送 到R0中。 第三条指令将R0的值传送到以R1的值为地址的存储器 中。
27
ARM微处理器指令的寻址方式
基址变址寻址
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,R2] ;R0←[R1+R2] 在第一条指令中,将寄存器R1的内容加上4形成操作数的有 效地址,从而取得操作数存入寄存器R0中。 在第二条指令中,将寄存器R1的内容加上4形成操作数的有 效地址,从而取得操作数存入寄存器 R0 中,然后, R1 的内 容自增4个字节。 在第三条指令中,以寄存器 R1 的内容作为操作数的有效地 址,从而取得操作数存入寄存器 R0 中,然后, R1 的内容自 增4个字节。 在第四条指令中,将寄存器R1的内容加上寄存器R2的内容 形成操作数的有效地址,从而取得操作数存入寄存器R0中。
助记符 MLA MOV MRC MRS MSR MUL MLA 指令功能描述 乘加运算指令 数据传送指令 协处理器寄存器到ARM寄存器数据传输 传送CPSR或SPSR的内容到通用寄存器 传送通用寄存器到CPSR或SPSR的指令 32位乘法指令 32位乘加指令
MVN
数据取反传送指令
13
ARM微处理器指令的分类
10
ARM微处理器指令的分类
ARM微处理器指令表-1
助记符 ADC ADD AND B BIC BL BLX 指令功能描述 带进位加法指令 加法指令 逻辑与指令 跳转指令 位清零指令 带返回的跳转指令 带返回和状态切换的跳转指令
BX
带状态切换的跳转指令
11
ARM微处理器指令的分类
ARM微处理器指令表-2
ARM微处理器指令的条件域
指令的条件域表-1
条件码 0000 0001 0010 0011 0100 0101 0110 0111 后缀 EQ NE CS/HS CC/LO MI PL VS VC 标志 Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 含义 相等 不等 无符号数大于/等于 无符号数小于 负数 正数或零 溢出 未溢出
基址变址寻址
基址变址寻址就是将寄存器(该寄存器一般称作基址 寄存器)的内容与指令中给出的地址偏移量相加,从 而得到一个操作数的有效地址。变址寻址方式常用于 访问某基地址附近的地址单元。采用变址寻址方式的 指令常见有以下几种形式,如下所示: LDR LDR LDR LDR R0,[R1,#4] R0,[R1,#4]! R0,[R1] ,#4 R0,[R1,R2] ;R0←[R1+4] ;R0←[R1+4]、R1←R1+4 ;R0←[R1]、R1←R1+4 ;R0←[R1+R2]
24
简单的基址寻址
str r0, [r1] ldr r2, [r1]
25
前变址寻址 str r0,[r1,#12]{! } ; mem32[r1+12] = r0;{r1 = r1 + 12;}
26
后变址寻址数据访问
str r0, [r1], #12 mem32[r1] = r0; r1 = r1 + 12;
ARM微处理器指令表-4
助记符 ORR RSB RSC 指令功能描述 逻辑或指令 逆向减法指令 带借位的逆向减法指令
SBC
STC STM STR
带借位减法指令
协处理器寄存器写入存储器指令 批量内存字写入指令 寄存器到存储器的数据传输指令
SUB
减法指令
14
ARM微处理器指令的分类
ARM微处理器指令表-5
18
ARM微处理器指令的寻址方式
立即寻址
立即寻址也叫立即数寻址,这是一种特殊的寻址方式, 操作数本身就在指令中给出,只要取出指令也就取到了 操作数。这个操作数被称为立即数,对应的寻址方式也 就叫做立即寻址。例如以下指令:
ADD
ADD
R0,R0,#1
R0,R0,#0x3f
/*R0←R0+1*/
/*R0←R0+0x3f*/
; CPSR标志位(S)
16
ARM 指令系统
ARM指令格式——第2个操作数
如:ADD{cond}{S} Rd, Rn, Operand2
Operand2可能的形式:
若指定S,则根据操作结 果更新条件码标志
#immed_8r:8位常数表达式,由8位的常数循环移位 偶数位得到。 Rm{,shift}
ADD r0, r1, #100 r0 = r1 + r2 ADD r0, r1, r2 ADD r0, r1, r2, ASR #1
8
第2操作数的编码格式图解
31 cond 28 27 26 25 24 00 # 21 20 S 19 Rn 16 15 Rd 目的寄存器 第1操作数寄存器 是否修改CPSR 条件标志位 算术/逻辑功能 第一种 第2操作数格式 #immed_8r 25 0 立即数移位长度 移位类型 第2操作数寄存器 11 Rs 移位长度寄存器 8 7 6 5 4 3 Sh 0 0 Rm 0 25 1 8位立即数循环右移长度 11 第二种 第2操作数格式 Rm{,shift} #shift 8 7 6 5 4 3 Sh 0 0 Rm 0 11 #rotate 8 7 8位立即数 0 12 11 Operand2 0 opcode
4
ARM指令的条件域
EQ/NE: 等于/不等于(equal / not equal) HS/LO: 无符号数高于或等于/无符号数小于(higher or same/lower) HI/LS: 无符号数高于/无符号数低于或等于 (higher/lower or same) GE/LT: 有符号数大于或等于/有符号数小于(greater or equal / less than) GT/LE: 有符号数大于/有符号数小于或等于(greater than / less or equal) MI/PL: 负/非负 VS/VC: 溢出/不溢出(overflow set / overflow clear) CS/CC: 进位/无进位(carry set / carry clear) 5
7
ARM 指令系统
ARM指令格式
<opcode> {<cond>} {S} <Rd>,<Rn> {,<operand2>} 其中: Opcode : 指令助记符,如ADD、SUB、LDR、STR Cond: 执行条件,如EQ、NE、LO、LT S: 是否影响CPSR寄存器的值,写则影响CPSR Rd: 存放结果的寄存器--称目标寄存器 Rn: 存放第1个操作数的寄存器 Operand2:第2个操作数 “< >”: 必需项 “{ }”: 可选项
ARM指令的条件域
当处理器工作在ARM状态时,几乎所有的指令均根据 CPSR中条件码的状态和指令的条件域有条件的执行。 当指令的执行条件满足时,指令被执行,否则指令被 忽略。 每一条ARM指令包含4位的条件码,位于指令的最高4 位[31:28]。条件码共有16种,每种条件码可用两个 字符表示,这两个字符可以添加在指令助记符的后面 和指令同时使用。例如,跳转指令B可以加上后缀EQ 变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置 位时发生跳转。
数据处理指令:数据传输指令,算术指令,逻辑指令,比较指令, 乘法指令,前导零计数。
程序状态访问指令:mrs和msr。
跳转指令:b和bl。
访存指令:单数据访存指令,多数据访存指令,信号量操作指令。 异常中断产生指令:swi和bkpt。 协处理器指令和异常产生指令
3
ARM微处理器指令的条件域
嵌入式系统教案
北京建筑工程学院.计算机系
2015-6-22
提纲
第三章-1 ARM指令系统
1
指令系统基本概念
2 ARM 微处理器指令的分类 3 ARM 微处理器指令的条件域 4 ARM 微处理器指令的寻址方式
2
ARM微处理器指令的分类
ARM微处理器的指令系统
ARM微处理器的指令集是加载/存储型的,也即指令集仅能处 理寄存器中的数据,而且处理结果都要放回寄存器中,而对系 统存储器的访问则需要通过专门的加载/存储指令来完成。 ARM微处理器的指令集可以分为六大类 :
助记符 CDP CMN CMP EOR LDC LDM LDR 指令功能描述 协处理器数据操作指令 比较反值指令 比较指令 异或指令 存储器到协处理器的数据传输指令 加载多个寄存器指令 存储器到寄存器的数据传输指令
MCR
ARM寄存器到协处理器寄存器数据传输
12
ARM微处理器指令的分类
ARM微处理器指令表-3
9
ARM指令的条件执行
所有的ARM指令可包含一个可选的条件码,只有在 cpsr中的条件标志位满足指定的条件时,指令才会被执 行。不符合条件的代码依然占用一个时钟周期(相当 于一个NOP指令)。
if ( (a == b) && (c == d) ) { e++; } // r0, r1, r2, r3, r4 : a, b, c, d, e cmp r0, r1 cmpeq r2, r3 addeq r4, r4, #1
相关文档
最新文档