1、微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计1 1第八章第八章 ARMARM汇编指令汇编指令4学时学时微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计第八章第八章 ARMARM汇编指令汇编指令8.1 ARM指令格式指令格式(掌握)(掌握)ARM指令的一般编码格式指令的一般编码格式ARM指令的条件域指令的条件域指令的第二源操作数指令的第二源操作数8.2 ARM寻址方式寻址方式(掌握)(掌握)寄存器直接寻址寄存器直接寻址立即寻址立即寻址寄存器移位寻址寄存器移位寻址寄存器间接寻址寄存器间接寻址基址变址寻址基址变址寻址多寄存器直接寻址多寄存器直接寻址相对寻址相对寻址
2、堆栈寻址堆栈寻址2 2微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计第八章第八章 ARMARM汇编指令汇编指令8.3 ARM指令集指令集(掌握)(掌握)数据处理指令数据处理指令转移指令转移指令程序状态寄存器访问指令加载程序状态寄存器访问指令加载/存储指令存储指令异常产生指令异常产生指令伪指令伪指令3 3微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计4 48.1 ARM8.1 ARM指令格式指令格式nARMARM指令长度指令长度u指令集可以是以下任一种指令集可以是以下任一种32 bits 32 bits 长长 (ARM(ARM状态状态) )16 bits 16
3、 bits 长长 (Thumb (Thumb 状态状态) )uARMARM一般支持一般支持3 3种数据类型种数据类型字节字节 (8-bit)(8-bit)半字半字 ( (16-bit)16-bit)字字 (32-bit)(32-bit)u字必须被排成字必须被排成4 4个字节边界对齐个字节边界对齐, ,半字必须被排列成半字必须被排列成2 2个字节边界对齐个字节边界对齐nLoad-store Load-store 结构结构* *uload/store load/store 从存储器中读某个值从存储器中读某个值, ,操作完后再将其放回存储器中操作完后再将其放回存储器中u只对存放在寄存器的数据进行处理
4、只对存放在寄存器的数据进行处理u对于存储器中的数据,只能使用对于存储器中的数据,只能使用load/storeload/store指令进行存取指令进行存取微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计5 5 ARM是三地址指令格式,指令的基本格式如下:ARMARM指令基本指令基本指令格式指令格式 S , 其中号内的项是必须的,号内的项是可选的。各项的说明如下:opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器; Rn:第1个操作数的寄存器;operand2:第2个操作数;指令语法指令语法目标寄存器(目标寄存器(Rd) 源寄存器源寄存器
5、1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r2例:微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计6 6指令集介绍指令集介绍n ARM指令集指令格式微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计7 7操作码操作码条件助记符条件助记符标志标志含义含义0000EQZ=1相等相等0001NEZ=0不相等不相等0010CS/HSC=1无符号数大于或等于无符号数大于或等于0011CC/LOC=0无符号数小于无符号数小于0100MIN=1负数负数0101PLN=0正数或零正数或零0110VSV=1溢出溢出0111VCV=0没有溢出没有溢出1000
6、HIC=1,Z=0无符号数大于无符号数大于1001LSC=0,Z=1无符号数小于或等于无符号数小于或等于1010GEN=V有符号数大于或等于有符号数大于或等于 1011LTN!=V有符号数小于有符号数小于 1100GTZ=0,N=V有符号数大于有符号数大于 1101LEZ=1,N!=V有符号数小于或等于有符号数小于或等于 1110AL任何任何无条件执行无条件执行 (指令默认条件指令默认条件) 1111NV任何任何从不执行从不执行(不要使用不要使用) 指令条件码表指令条件码表所有的ARM指令都可以条件执行,而Thumb指令只有B(跳转)指令具有条件执行功能如果指令不标明条件代码,将默认为无条件(
7、AL)执行微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计8 8指令条件码指令条件码C C代码:代码:If(a b)a+;Elseb+;对应的汇编代码:对应的汇编代码:CMPR0,R1 ;R0(a)与)与R1(b)比较)比较ADDHI R0,R0,#1 ;若若R0R1,则,则R0=R0+1ADDLS R1,R1,#1 ;若若R0R1,则,则R1=R1+1示例:微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计9 9 ARM指令的基本格式如下:ARMARM指令的指令的第第2 2个操作数个操作数 S , 灵活的使用第2个操作数“operand2”能够提高代码效率。它有
8、如下的形式:#immed_8r常数表达式;Rm寄存器方式;Rm,shift寄存器移位方式;0 x120 0 0 1 0 0 1 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x801 0 0 0 0 0 0 00 x040 0 0 0 0 1 0 08位常数循环右移10位该常数是一个8位的常数通过循环右移偶数位得到微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计1010ARMARM指令的指令的第第2 2个操作数个操作数R
9、m,shift寄存器移位方式 将寄存器的移位结果作为操作数(移位操作不消耗额外的时间),但Rm值保持不变ALU桶形移位器Rd结果N预处理未预处理RmRn微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计11 11n 桶形移位器操作桶形移位器操作助记符助记符 说明说明移位操作移位操作 结果结果Y值值LSL逻辑左移逻辑左移 x LSL yxy#1-32 or RsASR算术右移算术右移 x ASR y(signed)xY#1-32 or RsROR算术左移算术左移 x ROR y (unsigned)xy|(x32-y)#1-31 or RsRRX扩展的循扩展的循环右移环右移x RR
10、X y(c flag1)noneARMARM指令的指令的第第2 2个操作数个操作数微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计1212ARMARM指令的指令的第第2 2个操作数个操作数LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C例如:ADDR1,R1,R1,LSL #3;R1=R1+R1R3微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计8.2 ARM8.2 ARM处理器寻址方式处理器寻址方式 寻址方式是根据指令中给出的地址码寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。字段来实现寻找真实操作数
11、地址的方式。 ARM ARM处理器具有几种基本寻址方式:处理器具有几种基本寻址方式:1. 1.寄存器寻址寄存器寻址 2.2.立即寻址立即寻址 3.3.寄存器间接寻址寄存器间接寻址移位寻址移位寻址、间接寻址间接寻址、基址变址寻址基址变址寻址、多寄存器寻址(块寻址)多寄存器寻址(块寻址) 4.4.堆栈寻址堆栈寻址 5.5.相对寻址相对寻址1313微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计0 xAA0 x55R2R11. 1. 操作数存放在寄存器中操作数存放在寄存器中; ;2.2.指令地址码字段给出寄存器编号(名)指令地址码字段给出寄存器编号(名)3.3.指令执行时直接取出寄存
12、器值来操作指令执行时直接取出寄存器值来操作; ;MOV MOV R1, R2R1, R2; ; R1 = R2 R1 = R2 SUB SUB R0, R1, R2 ; R0 = R1-R2 R0, R1, R2 ; R0 = R1-R2 寄存器寻址寄存器寻址0 xAA1414微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计1. 1. 操作数包含在指令当中操作数包含在指令当中; ;2. 2. 指令地址码部分就是数据本身;指令地址码部分就是数据本身;3.3. 取指时就取出了可立即使用的操作数;取指时就取出了可立即使用的操作数;MOVMOVR0,#0 xFF00 ; R0 = #0
13、 xFF00 R0,#0 xFF00 ; R0 = #0 xFF00 SUBSSUBSR0,R0,#1 ; R0 =R0-1R0,R0,#1 ; R0 =R0-10 x55R0MOV R0,#0 xFF00立即寻址立即寻址0 xFF00从代码中获得数据从代码中获得数据10进制数:进制数:#21,#0d572进制数:进制数: #0b0110016进制数:进制数:#0 x3a001影响标志位影响标志位寄存器寻址寄存器寻址1515微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计1. 1. 操作数存放在寄存器中操作数存放在寄存器中; ;2.2.指令地址码字段给出寄存器编号(名)及移指令
14、地址码字段给出寄存器编号(名)及移位表达式位表达式; ;3.3.指令执行时取出寄存器值并移位,再将结果指令执行时取出寄存器值并移位,再将结果作为源操作数作为源操作数; ;MOVMOV R0, R2, LSL #3 R0, R2, LSL #3 ; R0=R2; R0=R28 8 ANDS R1, R1, R2, LSL R3 ANDS R1, R1, R2, LSL R3 ; R1 = R1 and (R2R3) ; R1 = R1 and (R2R3)0 x55R0R20 x01寄存器移位寻址寄存器移位寻址0 x080 x08逻辑左移逻辑左移3位位寄存器寻址寄存器寻址影响标志位影响标志位LS
15、L、LSRASRROR、RRX1616微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计寄存器间接寻址寄存器间接寻址1. 1. 操作数存放在内存单元中操作数存放在内存单元中; ;2.2.指令地址码字段给出指令地址码字段给出 寄存器编号(名)寄存器编号(名); ;3.3.指令执行时根据寄存器值(指针)找到相应指令执行时根据寄存器值(指针)找到相应的存储单元的存储单元; ;LDRLDRR1,R2R1,R2; R1= R2; R1= R2SWPSWPR1,R1,R2R1,R1,R2; R1; R1 R2 R20 x55R0R20 x400000000 xAA0 x400000000 x
16、AA内存单元内存单元1717微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计基址变址寻址基址变址寻址1. 1. 操作数存放在内存单元中操作数存放在内存单元中; ;2.2.指令地址码字段给出指令地址码字段给出 寄存器编号(名)寄存器编号(名) 和偏移量和偏移量; ;3.3.指令执行时将基址寄存器的内容与偏移量(指令执行时将基址寄存器的内容与偏移量(4K4K)相)相加加/ /减,形成操作数的有效地址。减,形成操作数的有效地址。4.4. 常用于查表、数组操作、功能部件寄存器访问等。常用于查表、数组操作、功能部件寄存器访问等。LDRLDRR2,R3,#0 x0CR2,R3,#0 x0C
17、 ;R2=R3+0 x0C ;R2=R3+0 x0CSTRSTR R1,R0,#-4! R1,R0,#-4! ; ; 先先R0-4=R1, R0=R0-4R0-4=R1, R0=R0-4LDRLDR R0,R1 ,#4 R0,R1 ,#4 ;R0=R1 ;R0=R1,R1R1R1R14 4LDR R0,R1,R2 LDR R0,R1,R2 ;R0=R1+R2 ;R0=R1+R2前索引前索引后索引后索引0 x55R2R3 0 x400000000 xAA0 x4000000C0 xAA内存单元内存单元1818微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计多寄存器寻址多寄存器寻址
18、/ /块复制寻址块复制寻址1. 1. 操作数存放在操作数存放在内存单元内存单元中中; ;2.2.指令地址码字段给出指令地址码字段给出 寄存器编号(名)列表寄存器编号(名)列表 ; ;3.3.编号高编号高的寄存器总是对应内存中的的寄存器总是对应内存中的高地址单元高地址单元;4.4. 可完成存储块和可完成存储块和1616个寄存器或其子集之间的数据传送。个寄存器或其子集之间的数据传送。 LDMIALDMIAR1!,R2-R4,R6 R1!,R2-R4,R6 ; R2= R1 , R3= R1+4; R2= R1 , R3= R1+4; R4= R1+8 , R6= R1+0 xC, R1=R1+0
19、x10; R4= R1+8 , R6= R1+0 xC, R1=R1+0 x10 STMDB STMDBR1,R2-R4,R6 R1,R2-R4,R6 ; R1-4= R6 , R1-8=R4; R1-4= R6 , R1-8=R4; R1-0 xC =R3, R1-0 x10=R2; R1-0 xC =R3, R1-0 x10=R20 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C0 x010 x020 x030 x040 x40000010
20、内存单元内存单元Increase AfterDecrease Before!在块操作!在块操作指令中表示指令中表示地址指针要地址指针要回写回写1919微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计堆栈寻址堆栈寻址1. 1. 操作数存放在操作数存放在内存栈顶单元内存栈顶单元中中; ;2.2.指令地址码字段固定使用指令地址码字段固定使用栈顶指针栈顶指针SPSP; ;3.3.指令执行时同多寄存器指令执行时同多寄存器/ /块寻址,可完成多个数据的入块寻址,可完成多个数据的入栈和出栈;栈和出栈; LDMEALDMEASP!,R2-R4,R6 SP!,R2-R4,R6 ; R2= SP-
21、10 , R3= SP-C; R2= SP-10 , R3= SP-C ; R4= SP-8 , R6= SP-4,SP=SP-0 x10 ; R4= SP-8 , R6= SP-4,SP=SP-0 x10 STMFD STMFDSP!,R2-R4,R6 SP!,R2-R4,R6 ; SP-4= R6 , SP-8=R4; SP-4= R6 , SP-8=R4 ; SP-C =R3, SP-0 x10=R2,; SP-C =R3, SP-0 x10=R2, SP=SP-0 x10SP b)a+; Elseb+;对应的汇编代码:对应的汇编代码:CMPR0,R1 ;比较比较R0(a)与)与R1(b
22、)ADDHIR0,R0,#1 ;若若R0R1,则,则R0=R0+1ADDLSR1,R1,#1 ;若若R01,则,则R1=R1+12525微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计2626指令集介绍指令集介绍n ARM指令集指令格式微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计数据处理指令的编码格式数据处理指令的编码格式指令条件码指令条件码I=1I=1:立即数;:立即数; I=0I=0:寄存器移位:寄存器移位第二操作数第二操作数RdRd目标寄存器目标寄存器RnRn第一操作数寄存器第一操作数寄存器S=1S=1:根据结果设置:根据结果设置CPRSCPRS中的条
23、件码中的条件码S=0S=0:不设置:不设置CPRSCPRS中的条件码中的条件码带进位加法带进位加法ADCADC01010101带进位减法指令带进位减法指令SBCSBC01100110带进位逆向减法指令带进位逆向减法指令RSCRSC01110111位测试指令位测试指令TSTTST10001000相等测试指令相等测试指令TEQTEQ10011001比较指令比较指令CMPCMP10101010负数比较指令负数比较指令CMNCMN10111011逻辑或操作指令逻辑或操作指令ORRORR11001100数据传送数据传送MOVMOV11011101位清除指令位清除指令BICBIC11101110数据非传送
24、数据非传送MVNMVN11111111加法运算指令加法运算指令ADDADD01000100逆向减法指令逆向减法指令RSBRSB00110011减法运算指令减法运算指令SUBSUB00100010逻辑异或操作指令逻辑异或操作指令EOREOR00010001逻辑与操作指令逻辑与操作指令ANDAND00000000说明说明指令助记符指令助记符操作码操作码2727微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计乘法指令的编码格式乘法指令的编码格式RmRm被乘数寄存器被乘数寄存器Rn: MLARn: MLA指令相加的寄存器指令相加的寄存器RdLo: 64RdLo: 64位乘法指令目标寄位
25、乘法指令目标寄存器的低存器的低3232位位Rd: Rd: 目标寄存器目标寄存器RdHi: 64RdHi: 64位乘法指令目标寄存器的高位乘法指令目标寄存器的高3232位位RsRs为乘数寄存器为乘数寄存器64位有符号乘加指令位有符号乘加指令SMLAL11164位有符号乘法指令位有符号乘法指令SMULL11064位无符号乘加指令位无符号乘加指令UMLAL10164位无符号乘法指令位无符号乘法指令UMULL10032位乘加指令位乘加指令MLA00132位乘法指令位乘法指令MUL000说明说明指令助记符指令助记符操作码操作码2828微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计单数据
26、存取指令的编码格式单数据存取指令的编码格式字和无符号字节存取指令字和无符号字节存取指令LDR/STRLDR/STRP P表示前表示前/ /后变址后变址U=1:U=1:加加 U=0: U=0: 减减B=0B=0:字节:字节 B=1B=1:字:字 W=1W=1:回写基址寄存器,对:回写基址寄存器,对应指令中的应指令中的“!” ” W=0W=0:不回写:不回写存储单元寻址方式存储单元寻址方式L=1L=1:加载:加载 L=0L=0:存储:存储RdRd为源为源/ /目标寄存器目标寄存器RnRn为基址寄存器为基址寄存器S=1:S=1:有符号数,有符号数, S=0: S=0: 无符号数无符号数H=1H=1:
27、半字,:半字,H=0H=0:字节:字节存储单元寻址方式存储单元寻址方式半字和有符号字节存取指令半字和有符号字节存取指令LDR/STRLDR/STRI=1I=1立即数立即数 I=0I=0寄存器移位寄存器移位2929微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计数据块数据块(多寄存器多寄存器)存取指令的编码格式存取指令的编码格式数据块(多寄存器)存取指令编码数据块(多寄存器)存取指令编码LDM/STMLDM/STMS S对应于指令中的对应于指令中的”符号:在恢复符号:在恢复PCPC时也时也同时恢复同时恢复SPSRSPSRP P表示前表示前/ /后变址后变址U U表示加表示加/ /
28、减减WW表示回写表示回写(!)(!)寄存器列表寄存器列表RnRn为基址寄存器为基址寄存器L=1:L=1:加载加载 L=0:L=0:存储存储3030微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计寄存器寄存器/存储器交换指令的编码格式存储器交换指令的编码格式B B用于区别无符号字节用于区别无符号字节(B B为为1 1)或字()或字(B B为为0 0)RmRm源寄存器源寄存器RdRd目标寄存器目标寄存器RnRn为基址寄存器为基址寄存器SWPR1,R1,R0; ; R1R1 R0R0SWPB R1,R2,R0; ;将将R0R0指向的存储单元低字节指向的存储单元低字节数据读数据读; ;
29、取到取到R1R1中中( (高高2424位清零位清零) ),并将,并将R2R2的的; ;内容写入到该内存单元中的最低字节内容写入到该内存单元中的最低字节3131微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计分支指令的编码格式分支指令的编码格式分支指令分支指令B/BLB/BL指令编码格式指令编码格式L=0L=0:B B指令,跳转指令,跳转L=1L=1: BLBL指令,保存指令,保存PCPC并跳转,可返回并跳转,可返回2424位有符号立即数位有符号立即数(偏移量)(偏移量)分支指令分支指令BXBX指令编码格式指令编码格式RmRm目标地址寄存器,该寄存器装载目标地址寄存器,该寄存器装
30、载3131位跳位跳转地址,最低位为转地址,最低位为1 1时切换到时切换到ThumbThumb状态状态3232微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计状态寄存器访问指令的编码格式状态寄存器访问指令的编码格式指定传送的区域,可以为指定传送的区域,可以为以下字母(必须小写)的以下字母(必须小写)的一个或者组合:一个或者组合:c c 控 制 域 屏 蔽 字 节控 制 域 屏 蔽 字 节(psr7.0)(psr7.0)x x 扩 展 域 屏 蔽 字 节扩 展 域 屏 蔽 字 节(psr15.8)(psr15.8)s s 状 态 域 屏 蔽 字 节状 态 域 屏 蔽 字 节(psr
31、23.16)(psr23.16)f f 标 志 域 屏 蔽 字 节标 志 域 屏 蔽 字 节(psr31.24)(psr31.24)要传送到状态寄要传送到状态寄存器指定域的立存器指定域的立即数即数MSRMSR指令编码指令编码1 1MSRMSR指令编码指令编码2 28 8位立即数位立即数目标寄存器,不能为目标寄存器,不能为R15R15R R 0 0:CPSR CPSR R R 1 1:SPSRSPSRMRSMRS指令编码指令编码立即数立即数移位次数移位次数3333微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计软中断指令的编码格式软中断指令的编码格式SWIcond immed_2
32、4指令执行指令执行的条件码的条件码指令传递的参数(指令传递的参数(2424位立即数,其值位立即数,其值为为0 02 224241 1););执行时执行时CPUCPU忽略该参数,交忽略该参数,交OSOS处理。处理。3434微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计35358.3 ARM8.3 ARM指令集指令集n指令分类指令分类u数据处理指令:使用和改变寄存器的值数据处理指令:使用和改变寄存器的值u数据传送指令:寄存器与存储器之间的数据传送数据传送指令:寄存器与存储器之间的数据传送u控制流指令:控制流指令:分支分支分支和链接:保存返回的地址,以恢复次序分支和链接:保存返回的
33、地址,以恢复次序陷入系统代码陷入系统代码u程序状态寄存器处理指令程序状态寄存器处理指令u协处理器指令协处理器指令u异常产生指令异常产生指令微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计3636ARMARM指令助记符指令助记符n数据处理指令数据处理指令uMOV 数据传送数据传送 MVN 数据取反传送数据取反传送uCMP 比较比较 CMN 反值比较反值比较uTST 位测试位测试 TEQ 相等测试相等测试uADD 加法指令加法指令 ADC 带进位加法带进位加法uSUB 减法减法 SBC 带借位减法带借位减法uRSB 逆向减法逆向减法 RSC 带借位的逆向减法带借位的逆向减法uAND
34、 逻辑与逻辑与 ORR 逻辑或逻辑或uEOR 逻辑异或逻辑异或 BIC 位清除位清除n乘法与乘加指令乘法与乘加指令uMUL 32位乘法位乘法 MLA 32位乘加位乘加uSMULL 64位有符号数乘法位有符号数乘法 SMLAL 64位有符号数乘加位有符号数乘加uUMULL 64位无符号数乘法位无符号数乘法 UMLAL 64位无符号数乘加位无符号数乘加n跳转指令跳转指令uB 跳转跳转 BL 带返回的跳转带返回的跳转uBLX 带返回和状态切换的跳转带返回和状态切换的跳转 BX 带状态切换的跳转带状态切换的跳转n程序状态寄存器存取程序状态寄存器存取uMRS 程序状态寄存器程序状态寄存器-通用寄存器通用
35、寄存器uMSR 通用寄存器通用寄存器程序状态寄存器程序状态寄存器微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计3737ARMARM指令助记符指令助记符n数据交换指令uSWP 字数据交换 SWPB 字节数据交换n移位元指令uLSL 逻辑左移 ASL 算术左移uLSR 逻辑右移 ASR 算术右移uROR 循环右移 RRX 带进位的循环右移n寄存器加载/存储指令uLDR 字数据加载 LDRB 字节数据加载uLDRH 半字数据加载 STRH 半字数据存储 uSTR 字数据存储 STRB 字节数据存储uLDM 连续数据加载 STM 连续数据存储n协处理器指令uCDP 协处理器操作 LD
36、C 协处理器数据加载uSTC 协处理器数据存储uMCR ARM处理器寄存器协处理器寄存器的数据传送uMRC 协处理器寄存器ARM处理器寄存器的数据苍松微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计3838ARMARM指令集指令集 数据处理指令大致可分为3类: 数据传送指令;算术逻辑运算指令;比较指令。 数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据处理指令均可选择使用S后缀,以使指令影响状态标志。 ARM指令集指令集ARM数据处理指令数据处理指令微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计3939ARM数据处理指令指令
37、编码指令执行的条件码I用于区别立即数(I为1)和寄存器移位(I为0)opcode数据处理指令操作码第二操作数Rd目标寄存器Rn第一操作数寄存器S设置条件码,与指令中的S位对应带进位加法ADC0101带进位减法指令SBC0110带进位逆向减法指令RSC0111位测试指令TST1000相等测试指令TEQ1001比较指令CMP1010负数比较指令CMN1011逻辑或操作指令ORR1100数据传送MOV1101位清除指令BIC1110数据非传送MVN1111加法运算指令ADD0100逆向减法指令RSB0011减法运算指令SUB0010逻辑异或操作指令EOR0001逻辑与操作指令AND0000说明指令助
38、记符操作码opcode操作码功能表操作码操作码条件助记符条件助记符标志标志含义含义0000EQZ=1相等相等0001NEZ=0不相等不相等0010CS/HSC=1无符号数大于或等于无符号数大于或等于0011CC/LOC=0无符号数小于无符号数小于0100MIN=1负数负数0101PLN=0正数或零正数或零0110VSV=1溢出溢出0111VCV=0没有溢出没有溢出1000HIC=1,Z=0无符号数大于无符号数大于1001LSC=0,Z=1无符号数小于或等于无符号数小于或等于1010GEN=V有符号数大于或等于有符号数大于或等于 1011LTN!=V有符号数小于有符号数小于 1100GTZ=0,
39、N=V有符号数大于有符号数大于 1101LEZ=1,N!=V有符号数小于或等于有符号数小于或等于 1110AL任何任何无条件执行无条件执行 (指令默认条件指令默认条件) 1111NV任何任何从不执行从不执行(不要使用不要使用) 微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计4040助记符助记符说明说明操作操作条件码位置条件码位置MOV Rd,operand2MOV Rd,operand2数据传送数据传送RdRdoperand2 operand2 MOVcondSMOVcondSMVN Rd,operand2MVN Rd,operand2数据非传送数据非传送RdRd(opera
40、nd2)(operand2)MVNMVNcondcondSSARM数据处理指令数据传送注:当注:当后缀后缀S时时,这些指令根据结果更新标,这些指令根据结果更新标志志N和和Z,在计算,在计算Operand2时更新标志时更新标志C,不影响标志不影响标志V。微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计4141助记符助记符说明说明操作操作条件码位置条件码位置MOV Rd,operand2数据传送数据传送RdRdoperand2 operand2 MOVMOVcondcondSSMVN Rd,operand2MVN Rd,operand2数据非传送数据非传送RdRd(operand2
41、)(operand2)MVNMVNcondcondSSARM数据处理指令数据传送 MOVMOV指令将指令将8 8位位图立即数(参看位位图立即数(参看“第第2 2操作数:操作数:#immed_8r#immed_8r常常数表达式数表达式 ”)或寄存器传送到目标寄存器()或寄存器传送到目标寄存器(RdRd),可用于移位运算等),可用于移位运算等操作。指令格式如下:操作。指令格式如下: MOVcondS Rd,operand2 MOVMOV指令举例如下:指令举例如下: MOVR1,#0 xF000000B;R1= 0 xF000000B ;R1= 0 xF000000B MOVR0,R1;R0=R1R
42、0=R1 MOVSR3,R1,LSL #2;R3=R12R3=R12,并影响标志位,并影响标志位 MOVPC,LR;PC=LRPC=LR,子程序返回,子程序返回 微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计4242助记符助记符说明说明操作操作条件码位置条件码位置MOV Rd,operand2MOV Rd,operand2数据传送数据传送RdRdoperand2 operand2 MOVcondSMOVcondSMVN Rd,operand2数据非传送数据非传送RdRd(operand2)(operand2)MVNMVNcondcondSSARM数据处理指令数据传送 MVNM
43、VN指令将指令将8 8位图立即数(参看位图立即数(参看“第第2 2操作数:操作数:#immed_8r#immed_8r常数常数表达式表达式 ”)或寄存器()或寄存器(operand2operand2)按位取反按位取反后传送到目标寄存器后传送到目标寄存器(RdRd),因为其具有取反功能,所以可以装载范围更广的立即数。指令格),因为其具有取反功能,所以可以装载范围更广的立即数。指令格式如下:式如下: MVNcondS Rd,operand2 MVNMVN指令举例如下:指令举例如下: MVNR1,#0 xFF;R1=0 xFFFFFF00R1=0 xFFFFFF00 MVNR1,R2;将将R2R2按
44、位取反,结果存到按位取反,结果存到R1R1微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计4343助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-operand2SUBcondSSUBcondSRSB Rd, Rn, operand2RSB Rd, Rn,
45、 operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2带进位减法指令带进位减法指令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NOT)CarrySBCcondSSBCcondSRSC Rd, Rn, ope
46、rand2RSC Rd, Rn, operand2带进位逆向减法带进位逆向减法指令指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARM数据处理指令算术运算注:这些指令注:这些指令影响影响N,Z,C和和V标志位。标志位。微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计4444助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, Rn, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDADDcondcondSSSUB Rd, Rn, op
47、erand2SUB Rd, Rn, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-operand2SUBcondSSUBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, operand2SB
48、C Rd, Rn, operand2带进位减法指令带进位减法指令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NOT)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2带进位逆向减法带进位逆向减法指令指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARM数据处理指令算术运算 加法运算指令加法运算指令ADDADD指令将指令将operand2operand2的值与的值与RnRn的值相加,结果保的值相加,结果保存到
49、存到RdRd寄存器。指令格式如下:寄存器。指令格式如下: ADDcondS Rd,Rn,operand2 应用示例:应用示例: ADDS R1,R1,#1020;R1=R1+1020;R1=R1+1020,并影响标志位,并影响标志位 ADD R1,R1,R2,LSL #2;R1=R1+R22;R1=R1+R22 微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计4545助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, ADD Rd, RnRn, operand2, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDco
50、ndSADDcondSSUB Rd, Rn, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-operand2SUBSUBcondcondSSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, opera