第3章ARM微处理器的指令系统1-寻址方式



《第3章ARM微处理器的指令系统1-寻址方式》由会员分享,可在线阅读,更多相关《第3章ARM微处理器的指令系统1-寻址方式(31页珍藏版)》请在文档大全上搜索。
1、第3章 ARM微处理器的指令系统 寻址方式 算术指令 特殊指令 应用举例Assemble Language of ARM2o 本章的主要内容有:n ARM指令集、Thumb指令集概述n ARM指令的寻址方式n ARM指令集的分类与具体应用n Thumb指令集简介及应用场合Assemble Language of ARM33.1 ARM微处理器的指令集概述o 3.1.1 ARM微处理器的指令的分类与格式nARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。nARM微处理器的指令集可以分为
2、:o跳转指令o数据处理指令o加载/存储指令o程序状态寄存器(PSR)处理指令o协处理器指令o异常产生指令n六大类,具体的指令及功能如下表所示(表中指令为基本ARM指令,不包括派生的ARM指令)。Assemble Language of ARM4o ARM指令及功能描述 助记符指令功能描述ADC带进位加法指令ADD加法指令AND逻辑与指B跳转指令BIC位清零指令BL带返回的跳转指BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令CDP协处理器数据操作指令Assemble Language of ARM5o 助记符指令功能描述CMN比较反值指令CMP比较指令EOR异或指令LDC存储器到协处理
3、器的数据传输指令LDM加载多个寄存器指令LDR存储器到寄存器的数据传输指令MCR从ARM寄存器到协处理器寄存器的数据传输指令MOV数据传送指令Assemble Language of ARM6o 助记符指令功能描述MRC从协处理器寄存器到ARM寄存器的数据传输指令MRS传送CPSR或SPSR的内容到通用寄存器指令MSR传送通用寄存器到CPSR或SPSR的指MUL32位乘法指MLA32位乘加指令MVN数据取反传送指令ORR逻辑或指令RSB逆向减法指令RSC带借位的逆向减法指令Assemble Language of ARM7o 助记符指令功能描述SBC带借位减法指令STC协处理器寄存器写入存储器
4、指STM批量内存字写入指令STR寄存器到存储器的数据传输指SUB减法指令SWI软件中断指令SWP交换指令TEQ相等测试指TST位测试指Assemble Language of ARM8ARM指令编码格式o说明nCondo指令执行的条件编码nOpcodeo指令操作符编码nSo决定指令的操作是否影响CPSR的值nRdo操作目标寄存器编码nRno包含第一操作数的寄存器编码nShifter_operando表示第二操作数Shifter_operandRdRnsopcode001cond 31 28 27 25 24 21 20 19 16 15 12 11 8 7 0参见参见“ARM Architec
5、ture Reference Manual”Assemble Language of ARM9o 3.1.2 指令的条件域n当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。n每一条ARM指令包含4位的条件码,位于指令的最高4位31:28。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。o 例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。n在16种条件标志码中,只有15种可以使用,如表3-2所示
6、,第16种(1111)为系统保留,暂时不能使用。Assemble Language of ARM10o 指令的条件码 条件码助记符后缀标 志含 义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出Assemble Language of ARM11o Cf. p.15 条件码助记符后缀标 志含 义1000HIC置位Z清零无符号数大于1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数
7、小于1100GTZ清零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL忽略无条件执行1111NV该指令从不执行cc: Condition CodesGeneric Unsigned SignedCS Carry Set HI Higher Than GT Greater ThanCC Carry Clear HS Higher or Same GE Greater Than or EqualEQ Equal (Zero Set) LO Lower Than LT Less ThanNE Not Equal (Zero Clear) LS Lower T
8、han or Same LE Less Than or EqualVS Overflow Set MI Minus (Negative)VC Overflow Clear PL Plus (Positive)Assemble Language of ARM12条件执行及标志位nARM指令可以通过添加适当的条件码后缀来达到条件执行的目的。n这样可以提高代码密度,减少分支跳转指令数目,提高性能。 CMP r3,#0 BEQ skip ADD r0,r1,r2skipn默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。CMP不需要增加“S”就可改变相应的标志位。loo
9、p SUBS r1,r1,#1 BNE loop如果Z标志清零则跳转R1减1,并设置标志位CMP r3,#0ADDNE r0,r1,r2Assemble Language of ARM133.2 ARM指令的寻址方式 所谓寻址方式寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持如下几种常见的寻址方式。o3.2.1 立即寻址立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:ADD R0,R0,1 ;R0R01ADD R0,R0,0 x3
10、f ;R0R00 x3f 在以上两条指令中,第二个源操作数即为立即数,要求以“”为前缀,对于以十六进制表示的立即数,还要求在“”后加上“0 x”或“&” ,另外表示二进制数。Assemble Language of ARM14立即数 (1)o没有任何一条ARM 指令可包括一个32 bit的立即数n所有的ARM指令都是32 bits固定长度o数据处理指令格式中,第二个操作数有12位o4 bit 移位值 (0-15)乘于2,得到一个范围在0-30,步长为 2的移位值。o记住一条准则: “最后最后8位一定要移动偶数位一定要移动偶数位位”.07118immed_8ShifterRORrotx2
11、Quick Quiz:0 x3F0 #?0 xe3a004ffMOV r0, #?Immed_8=0 x3F, rotate_imm=0 xEorImmed_8=0 xFC, rotate_imm=0 xFAssemble Language of ARM15立即数 (2)o Examples:o下列命令中,汇编器把立即数转换为移位操作:n MOV r0,#4096n ADD r1,r2,#0 xFF0000o也可使用 MVN来进行位反转:n MOV r0, #0 xFFFFFFFF o使用无法用上述方法生成的数据,将产生错误。031ror#0range0-0 xff000000step0 x0