第8章ARM汇编指令.ppt
《第8章ARM汇编指令.ppt》由会员分享,可在线阅读,更多相关《第8章ARM汇编指令.ppt(59页珍藏版)》请在三一办公上搜索。
1、第8章 ARM汇编指令,ARM采用三地址指令格式:,ARM汇编指令书写格式,S,其中号内的项是必须的,号内的项可选。,opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器;Rn:第1个操作数的寄存器;operand2:第2个操作数(#immed_8r、Rm、Rm,shift);,2023-6-5,2/95,ARM指令中的第2操作数,8位常数循环右移10位,常数#immed_8r由一个8位常数通过循环右移偶数位得到:,Rm,shift由Rm移位得到。移位不消耗额外时间,且Rm值不变。,ALU,桶形移位器,Rd,结果N,预处理,未预处理,Rm,Rn,LSL
2、,0,LSR,ASR,ROR,RRX,2023-6-5,桶形移位器的操作,ADDR1,R1,R1,LSL#3;R1=R1+R1R3,2023-6-5,4/95,ARM机器指令编码格式,所有的ARM指令都可以条件执行,而Thumb指令只有B(跳转)指令具有条件执行 功能。如果指令不标明条件代码,将默认为无条件(AL)执行,ARM指令条件码cond,6/95,ARM处理器寻址方式,寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有几种基本寻址方式:1.寄存器寻址 2.立即寻址 3.寄存器间接寻址移位寻址、间接寻址、基址变址寻址、多寄存器寻址(块寻址)4.堆栈寻址
3、5.相对寻址,7/95,0 xAA,0 x55,R2,R1,寄存器寻址,1.操作数存放在寄存器中;2.指令地址码字段给出寄存器编号(名);3.指令执行时直接取出寄存器值来操作;MOV R1,R2;R1=R2 SUB R0,R1,R2;R0=R1-R2,0 xAA,2023-6-5,8/95,1.操作数包含在指令当中;2.指令地址码部分就是数据本身;3.取指时就取出了可立即使用的操作数;MOVR0,#0 xFF00;R0=#0 xFF00 SUBSR0,R0,#1;R0=R0-1,0 x55,R0,MOV R0,#0 xFF00,立即寻址,0 xFF00,从代码中获得数据,10进制数:#21,#
4、0d572进制数:#0b0110016进制数:#0 x3a001,影响标志位,寄存器寻址,2023-6-5,9/95,1.操作数存放在寄存器中;2.指令地址码字段给出寄存器编号(名)及移位表达式;3.指令执行时取出寄存器值并移位,再将结果作为源操作数;MOV R0,R2,LSL#3;R0=R28 ANDS R1,R1,R2,LSL R3;R1=R1 and(R2R3),0 x55,R0,R2,0 x01,寄存器移位寻址,0 x08,0 x08,逻辑左移3位,寄存器寻址,影响标志位,LSL、LSRASRROR、RRX,寄存器间接寻址,1.操作数存放在内存单元中;2.指令地址码字段给出 寄存器编号
5、(名);3.指令执行时根据寄存器值(指针)找到相应的存储单元;LDRR0,R1;R0=R1SWPR1,R1,R2;R1 R2,0 x55,R0,R1,0 x40000000,0 xAA,0 x40000000,0 xAA,内存单元,2023-6-5,11/95,基址变址寻址,1.操作数存放在内存单元中;2.指令地址码字段给出 寄存器编号(名)和偏移量;3.指令执行时将基址寄存器的内容与偏移量(4K)相加/减,形成操作数的有效地址。4.常用于查表、数组操作、功能部件寄存器访问等。LDRR2,R3,#0 x0C;R2=R3+0 x0CLDR R1,R0,#-4!;R1=R0-4,R0=R0-4LD
6、R R0,R1,#4;R0=R1,R1R14LDR R0,R1,R2;R0=R1+R2,前索引,后索引,0 xAA,内存单元,12/95,多寄存器寻址/块复制寻址,1.操作数存放在内存单元中;2.指令地址码字段给出 寄存器编号(名)列表;3.编号高的寄存器总是对应内存中的高地址单元;4.可完成存储块和16个寄存器或其子集之间的数据传送。LDMIAR1!,R2-R4,R6;R2=R1,R3=R1+4;R4=R1+8,R6=R1+C,R1=R1+10 STMDBR1,R2-R4,R6;R1-4=R6,R1-8=R4;R1-C=R3,R1-10=R2,0 x40000000,R1,R2,0 x?,0
7、 x01,0 x40000000,0 x?,R3,R4,0 x?,R6,0 x?,0 x02,0 x03,0 x04,0 x40000004,0 x40000008,0 x4000000C,0 x40000010,内存单元,Increase After,Decrease Before,堆 栈 寻 址,1.操作数存放在内存栈顶单元中;2.指令地址码字段固定使用栈顶指针SP;3.指令执行时同多寄存器/块寻址,可完成多个数据的入栈和出栈;LDMEASP!,R2-R4,R6;R2=SP,R3=SP+4;R4=SP+8,R6=SP+C,SP=SP+10 STMFDSP!,R2-R4,R6;SP-4=R6
8、,SP-8=R4;SP-C=R3,SP-10=R2,SP=SP-10,0 x40000000,SP,R2,0 x?,0 x01,0 x40000000,0 x?,R3,R4,0 x?,R6,0 x?,0 x02,0 x03,0 x04,0 x40000004,0 x40000008,0 x4000000C,0 x40000010,堆栈单元,Empty Ascending,Full Desending,多寄存器/块寻址,ARM支持的四种堆栈类型,满递增(FA):堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。空递增(EA):堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。满递减(FD):堆栈
9、向下增长,堆栈指针指向内含有效数据项的最低地址。空递减(ED):堆栈向下增长,堆栈指针向堆栈下的第一个空位置。,2023-6-5,15/95,堆栈的递增与递减,递增堆栈:向高地址方向生长,即向上生长递减堆栈:向低地址方向生长,即向下生长,0 x12345678,0 x12345678,2023-6-5,16/95,堆栈的空与满,空堆栈:堆栈指针SP指向下一个待压入数据的空位置满堆栈:堆栈指针SP指向最后压入的堆栈的有效数据项,0 x12345678,0 x12345678,0 x12345678,2023-6-5,17/95,相 对 寻 址,1.操作数为指令存放地址;2.指令地址码字段为地址偏
10、移量;3.指令执行时同基址寻址,由PC提供基地址根据偏移量完成跳转;BLSUBR1;调用SUBR1子程序BEQLOOP;条件跳转到LOOP处.LOOP MOV R6,#1,2023-6-5,18/95,带条件码的指令,C代码:If(a b)a+;Elseb+;,对应的汇编代码:CMPR0,R1;比较R0(a)与R1(b)ADDHIR0,R0,#1;若R0R1,则R0=R0+1ADDLSR1,R1,#1;若R0R1,则R1=R1+1,2023-6-5,19/95,ARM指令集,数据处理指令转移指令程序状态寄存器访问指令加载/存储指令,数据处理指令的编码格式,指令条件码,I=1:立即数;I=0:寄
11、存器移位,第二操作数,Rd目标寄存器,Rn第一操作数寄存器,S=1:根据结果设置CPSR中的条件码S=0:不设置CPSR中的条件码,21/95,乘法指令的编码格式,Rm被乘数寄存器,Rn:MLA指令相加的寄存器RdLo:64位乘法指令目标寄存器的低32位,Rd:目标寄存器RdHi:64位乘法指令目标寄存器的高32位,Rs为乘数寄存器,2023-6-5,22/95,单数据存取指令的编码格式,字和无符号字节存取指令LDR/STR,P表示前/后变址,U=1:加 U=0:减,B=0:字 B=1:字节,W=1:回写基址寄存器,对应指令中的“!”W=0:不回写,存储单元寻址方式,L=1:加载 L=0:存储
12、,Rd为源/目标寄存器,Rn为基址寄存器,S=1:有符号数,S=0:无符号数,H=1:半字,H=0:字节,存储单元寻址方式,半字和有符号字节存取指令LDR/STR,I=1立即数 I=0寄存器移位,23/95,数据块(多寄存器)存取指令的编码格式,数据块(多寄存器)存取指令编码LDM/STM,S对应于指令中的”符号:在恢复PC时也同时恢复SPSR,P表示前/后变址,U表示加/减,W表示回写(!),寄存器列表,Rn为基址寄存器,L=1:加载 L=0:存储,2023-6-5,24/95,寄存器/存储器交换指令的编码格式,B用于区别无符号字节(B为1)或字(B为0),Rm源寄存器,Rd目标寄存器,Rn
13、为基址寄存器,SWPR1,R1,R0;R1R0SWPBR1,R2,R0;将R0指向的存储单元低字节数据读;取到R1中(高24位清零),并将R2的;内容写入到该内存单元中的最低字节,2023-6-5,25/95,分支指令的编码格式,分支指令B/BL指令编码格式,L=0:B指令,跳转L=1:BL指令,保存PC并跳转,可返回,24位有符号立即数(偏移量),分支指令BX指令编码格式,Rm目标地址寄存器,该寄存器装载31位跳转地址,最低位为1时切换到Thumb状态,2023-6-5,26/95,状态寄存器访问指令的编码格式,指定传送的区域,可以为以下字母(必须小写)的一个或者组合:c 控制域屏蔽字节(p
14、sr7.0)x 扩展域屏蔽字节(psr15.8)s 状态域屏蔽字节(psr23.16)f 标志域屏蔽字节(psr31.24),要传送到状态寄存器指定域的立即数,MSR指令编码1,MSR指令编码2,8位立即数,目标寄存器,不能为R15,R 0:CPSR R 1:SPSR,MRS指令编码,立即数移位次数,2023-6-5,软中断指令的编码格式,SWIcond immed_24,指令执行的条件码,指令传递的参数(24位立即数,其值为02241);执行时CPU忽略该参数,交OS处理。,2023-6-5,28/95,数据处理指令,ARM的数据处理指令大致可分为以下几类:数据传送指令:MOV、MVN 算术
15、运算指令:ADD、SUB、RSB、ADC、SBC、RSC、MUL、MLA、UMULL、UMLAL、SMULL、SMLAL 逻辑运算指令:AND、ORR、EOR、BIC 比较指令:CMP、CMN、TST、TEQ 数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据处理指令均可选择使用S后缀,以使指令影响状态标志。,29/95,数据传送指令,MOV R11,#0 xF000000B;R1=0 xF000000B MOV R0,R1;R0=R1 MOVS R3,R1,LSL#2;R3=R12,并影响标志位 MOVPC,LR;PC=LR,子程序返回 MVNR1,#0 x
16、FF;R1=0 xFFFFFF00MVNR1,R2;将R2按位取反,结果存到R1,当有后缀S时指令将根据结果更新标志N和Z,在计算operand2(8位立即数或寄存器)时更新标志C,不影响标志V。MVN指令具有取反功能,所以可以装载范围更广的立即数。,30/95,算术运算指令,可影响N,Z,C和V标志位。,ADDSR1,R1,#1020;R1=R1+1020,并影响标志位ADDR1,R1,R2,LSL#2;R1=R1+R22SUBSR0,R0,#240;R0=R0-240,并影响标志位 SUBSR2,R1,R2;R2=R1-R2,并影响标志位RSB R3,R1,#0 xFF00;R3=0 xF
17、F00-R1ADDSR0,R0,R2;R0等于低32位相加,并影响标志位ADCR1,R1,R3;R1等于高32位相加,并加上低位进位SUBSR0,R0,R2;低32位相减,并影响标志位SBCR1,R1,R3;高32位相减,并减去低位借位RSBSR2,R0,#0;R2=-R0RSCR3,R1,#0;R3=-R1-!Carry,64位取负,64位加法,64位减法,乘(加)法 指 令,MULR1,R2,R3;R1=R2R3,结果的低32位保存MLASR1,R2,R3,R0;R1=R2R3+R0,影响标志位UMULLR0,R1,R5,R8;(R1、R0)=R5R8 UMLALR0,R1,R5,R8;(
18、R1、R0)=R5R8+(R1、R0)SMULLR2,R3,R7,R6;(R3、R2)=R7R6 SMLALR2,R3,R7,R6;(R3、R2)=R7R6+(R3、R2),注:R不能为R15且 RdRm;可影响N、Z标志位;32位指令不影响V,C不确定;64位指令V 和C不确定;,32/95,逻辑运算指令,可标志N和Z。计算Operand2时更新标志C,不影响标志V。,ANDS R0,R0,#0 x01;取R0的最低位数据,并影响标志位 ORR R0,R0,#0 x0F;将R0的低4位置1,其它位不变 EOR R1,R1,#0 x0F;将R1的低4位取反,其它位不变 BIC R1,R1,#0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 汇编 指令
链接地址:https://www.31ppt.com/p-5116927.html