您好,欢迎访问三七文档
嵌入式系统第五讲ARM微处理器的指令系统西安电子科技大学计算机学院本节内容ARM指令集简述ARM指令格式ARM指令集编码ARM寻址方式ARM指令介绍Thumb指令介绍西安电子科技大学计算机学院5.1ARM指令集简述Load/Store结构在通用寄存器中进行操作;load/store–从存储器中读某个值,操作完后再将其放回存储器中。指令分类数据处理指令load/store指令跳转指令CPSR处理指令协处理器指令异常产生指令西安电子科技大学计算机学院5.2ARM指令格式基本格式opcode{cond}{S}Rd,Rn{,operand2}说明opcode指令助记符,如LDR,STR等cond执行条件,如EQ,NE等S是否影响CPSR寄存器的值Rd目标寄存器Rn存放第一操作数的寄存器operand2第二个操作数西安电子科技大学计算机学院举例LDRR0,[R1]读取R1地址上的存储器单元内容,执行条件ALBEQDATAEVEN跳转指令,执行条件EQ,即相等跳转到DATAEVENADDSR1,R1,#1加法指令,R1+1=R1影响CPSR寄存器,带有SSUBNESR1,R1,#0xD条件执行减法运算(NE),R1-0xD=R1,影响CPSR寄存器,带有S西安电子科技大学计算机学院条件码西安电子科技大学计算机学院5.3ARM指令集编码西安电子科技大学计算机学院5.4ARM寻址方式寻址方式是根据指令编码中给出的地址码字段来寻找真实操作数的方法分类立即寻址寄存器寻址寄存器偏移寻址寄存器间接寻址变址寻址堆栈寻址块拷贝寻址相对寻址西安电子科技大学计算机学院5.4.1立即寻址也叫立即数寻址操作数就包含在指令的32位编码中如:ADDR0,R0,#1ANDR3,R4,0xFF只有第二源操作数可用立即数立即数要以“#”为前缀,表示16进制数值时以“0x”表示。西安电子科技大学计算机学院立即数的表示用12位数据表示32位数据空间指令编码中留给立即数的空间只有12位每个立即数都由一个8位常数循环右移偶数位得到8(常数)+4(偶数移位个数)=12西安电子科技大学计算机学院例子合法的立即数0xF2000x1100000x12800非法的立即数0x10100x001020xFF1000西安电子科技大学计算机学院5.4.2寄存器寻址操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值操作。如:MOVR1,R2;R2-R1SUBR0,R1,R2;R1-R2-R0西安电子科技大学计算机学院5.4.3寄存器偏移寻址寄存器偏移寻址是ARM指令集特有的寻址方式,是寄存器寻址方式的改进如:MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0,即R0=R2*8ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相与操作,结果放入R1注:第2操作数的12位编码空间有冗余位西安电子科技大学计算机学院移位方式LSL(LogicalShiftLeft)逻辑左移LSR(LogicalShiftRight)逻辑右移ASL(ArithmeticShiftLeft)算术左移ASR(ArithmeticShiftRight)算术右移ROR(RotateRight)循环右移RRX带扩展的循环右移西安电子科技大学计算机学院移位操作西安电子科技大学计算机学院移位位数移位位数可以用立即数或寄存器方式给出如:ADDR3,R2,R1,LSR#2ADDR3,R2,R1,LSRR4西安电子科技大学计算机学院5.4.4寄存器间接寻址利用一个寄存器的值作为存储器地址如:LDRR0,[R1]STRR0,[R1]数据传送指令都是基于寄存器间接寻址的注:数据传送指令都是基于寄存器间接寻址。西安电子科技大学计算机学院5.4.5变址寻址将基址寄存器的内容与指令中给出的偏移量相加,形成存储器的有效地址;是寄存器间接寻址的增强形式如:LDRR0,[R1,#4]偏移量不超过4kOffset为12位西安电子科技大学计算机学院变址模式前变址模式LDRR0,[R1,#4]自动变址模式LDRR0,[R1,#4]!后变址模式LDRR0,[R1],#4西安电子科技大学计算机学院5.4.6堆栈寻址堆栈是一块用于保存数据的连续内存堆栈操作的特点是先进后出堆栈增长方式向上增长(递增)向下增长(递减)堆栈指针指向的数据位置满堆栈空堆栈西安电子科技大学计算机学院ARM支持的堆栈形式满递增:指令如LDMFA,STMFA等空递增:指令如LDMEA,STMEA等满递减:指令如LDMFD,STMFD等空递减:指令如LDMED,STMED等FFullEEmpty西安电子科技大学计算机学院堆栈操作ARM指令中的堆栈形式STMFDSP!{R1-R7,LR}LDMFDSP!{R1-R7,LR}Thumb指令中的堆栈形式PUSH{R1-R7,LR}POP{R1-R7,PC}西安电子科技大学计算机学院5.4.7块拷贝寻址块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式寄存器组可以是16个通用寄存器的任意子集地址增长顺序IAIBDADB西安电子科技大学计算机学院例子西安电子科技大学计算机学院5.4.8相对寻址基地址是程序计数器PC的变址寻址BLSUBR;转移到SUBR;返回到此处SUBR;子程序入口……MOVPC,R14;返回主要用于分支指令西安电子科技大学计算机学院5.5ARM指令介绍5.5.1数据处理指令主要完成寄存器中数据的算术和逻辑运算操作基本原则•所有操作数都是32位宽度•操作数来自寄存器或着立即数分类•数据传送指令•算术、逻辑运算指令•比较、测试指令•乘法指令西安电子科技大学计算机学院5.5.2ARM存储器访问指令单寄存器存取指令(LDR和STR)加载/存储字(32位对齐)加载/存储半字(16位对齐)加载/存储字节(8位对齐)多寄存器存取指令(LDM和STM)可以实现在一组寄存器和一块连续的内存单元之间传输数据堆栈操作和块拷贝存储器和寄存器交换指令SWP使用SWP可实现信号量操作西安电子科技大学计算机学院5.5.3跳转指令B跳转到指定的地址执行程序BL将下一条指令的地址拷贝到R14(即LR)链接寄存器中,然后跳转到指定地址运行程序BX带状态切换的跳转指令BLX带连接和状态切换的跳转指令注:跳转的范围是±32MB西安电子科技大学计算机学院5.5.4杂项指令状态寄存器与通用寄存器之间的传送指令MRSMSR软件中断指令SWI协处理器指令西安电子科技大学计算机学院5.6Thumb指令集Thumb指令集是针对代码密度的问题而提出的。可以看作是ARM指令集的子集。所有Thumb指令均有对应的ARM指令,而Thumb编程模型也对应于ARM模型。Thumb是一个不完整的体系结构,不能指望处理器只执行Thumb代码而不支持ARM指令集。一般Thumb代码只需支持通用功能,必要时可以借助ARM指令集(例:所有异常自动进入ARM模式)应用程序可以灵活的将ARM指令和Thumb程序混合,以便提高性能和代码密度。同时达到降低功耗、节约成本和提高性能的目的。西安电子科技大学计算机学院5.6.1Thumb指令集的执行在任何时刻,对指令流的解释取决于CPSR的第5位,即位T,若T置位,则认为指令流为16位的Thumb指令;否则为标准的ARM指令。并不是所有的ARM处理器都支持Thumb指令。只有在命名中有字母T的才支持,例如以上提到的ARM7TDMI。西安电子科技大学计算机学院5.6.2Thumb状态切换进入Thumb模式复位后,ARM启动并执行ARM指令。转向执行Thumb指令的通常方法是执行一条交换转移指令BX。若BX指令指定的寄存器的最低位为1,则将T置位,并将程序计数器切换为寄存器其他位给出的地址异常返回也可以将微处理器从ARM状态转换为Thumb状态。通常这种指令用于返回到进入异常前所执行的指令流,而不是特地用于转换到Thumb模式西安电子科技大学计算机学院5.6.2Thumb状态切换退出Thumb模式执行ThumbBX指令可以显式地返回到ARM指令流。利用异常进入ARM指令流西安电子科技大学计算机学院5.6.3Thumb指令集特点继承ARM指令集的特点采用Load/Store结构支持8位、16位、32位数据处理丢弃了ARM指令集一些特点大多数Thumb指令无条件执行大多数Thumb数据处理采用2地址格式异常时的表现所有异常都会使处理器返回到ARM状态由Thumb状态进入时地址偏移(2字节对齐)与ARM(4字节对齐)不同Thumb的寻址方式几乎对等于ARM的方式西安电子科技大学计算机学院谢谢!
本文标题:嵌入式系统(五)
链接地址:https://www.777doc.com/doc-4047312 .html