第3章 ARM9指令集和汇编(初稿)_第1页
第3章 ARM9指令集和汇编(初稿)_第2页
第3章 ARM9指令集和汇编(初稿)_第3页
第3章 ARM9指令集和汇编(初稿)_第4页
第3章 ARM9指令集和汇编(初稿)_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选ppt精选ppt1、ARM指令集概述2、ARM指令的寻址方式3、ARM指令简介4、Thumb指令简介精选pptRISC简介ARM状态和Thumb状态ARM9指令类型和指令的条件域精选pptRISC是计算机中央处理器的一种设计模式全称Reduced Instruction Set Computer,中文称为精简指令集计算机RISC选取使用最为频繁的简单指令及部分复杂指令,而且指令等长,通常指令为16位或32位精选ppt从v4版本开始,ARM引入了Thumb指令集Thumb指令为16位,能完成的功能是32位ARM指令的子集ARM处理器支持两种运行状态ARM状态Thumb状态ARM指令必须在AR

2、M状态下执行Thumb指令也必须处于Thumb状态下执行精选ppt必须使用ARM指令的情况ARM处理器启动的第一句指令必须是ARM指令访问程序状态寄存器CPSR或协处理器时必须是ARM指令ARM在处理异常中断时会自动切换到ARM状态,执行中断处理程序入口处的程序。返回时,会再次自动切换到ARM状态ARM指令精选pptv4版本中的函数调用,如果不需要进行状态切换,只需要用到BL指令就可以实现了如果需要进行状态切换,情况较复杂,如图3-1所示精选ppt不同状态间的函数调用精选pptARM v5版本后,引入了一条新的指令BLX,结合了BL和BX指令各自的功能特点,使得上图的所示过程通过一条指令就能实

3、现精选pptARM指令集属于加载/存储型指令指令的操作数都储存在寄存器中,处理结果直接放回到目的寄存器中ARM9指令集可以分为6类跳转指令数据处理指令存储器访问指令协处理器指令杂项指令饱和算术指令精选ppt跳转指令精选ppt数据处理指令精选ppt存储器访问指令精选ppt协处理器指令精选ppt杂项指令精选ppt饱和算术指令精选pptARM指令一般由操作码、目的寄存器、操作数几部分组成,并可以配合条件码,S后缀等可选项目,以完成更复杂操作,它的格式一般为:指令中内的项目是必需的,比如opcode, Rd, Rn等,内的项目是可选的S , , 精选pptopcode操作码,即指令助记符,如BL,AD

4、Dcond条件码,描述指令执行的条件,在下文会有详细介绍S可选后缀,若在指令后加上“S”,在指令完毕后会自动更新CPSR中条件码标志位的值RdARM指令中的目标操作数总是一个寄存器,通常用Rd表示Rn存放第1操作数的寄存器opcode2第2操作数,它的使用非常灵活,不仅可以是寄存器,还能使用立即数,而且能够使用经过位移运算的寄存器和立即数,这在下文也会介绍。表3-1 ARM指令格式精选pptARM指令集几乎每条指令(除了某些v5T指令)都可以是条件执行的。指令的最高4位31:28称为条件码:AMR指令条件码助记符描述CPSR条件码标志位的值0000EQ相等,运行结果为0Z置位0001NE不相等

5、,运行结果不为0Z清零0010CS/HS无符号数大于等于C置位0011CC/LO无符号数小于C清零0100MI负数N置位0101PL非负数N清零0110VS上溢出V置位0111VC没有上溢出V清零1000HI无符号数大于C置位且Z清零1001LS无符号数小于等于C清零且Z置位1010GE带符号数大于等于N=V1011LT带符号数小于N!=V1100GT带符号数大于Z清零且N=V1101LE带符号数小于等于Z置位且N!=V1110AL无条件执行 1111系统保留 精选ppt形式非常灵活,共有11种形式:语法含义#立即数寻址寄存器寻址, LSL #立即数逻辑左移, LSL 寄存器逻辑左移, LSR

6、 #立即数逻辑右移, LSR 寄存器逻辑右移, ASR #立即数算术右移, ASR 寄存器算术右移, ROR #立即数循环右移, ROR 寄存器循环右移, RRX寄存器扩展循环右移精选pptARM指令集有5种形式的位移操作LSL逻辑左移LSR逻辑右移ASR算术右移ROR循环右移RRX带扩展的循环右移精选ppt逻辑左移(Logical Shift Left):操作时在移位操作时,用0补足低位;而逻辑右移(Logical Shift Right)移动的方向相反,并用0补足高位。算术右移(Arithmetic Shift Right):在移位操作时,根据符号位来补足高位,若原数符号位是1,即当原数为

7、负数时,移位空出的高位都用1补足,反之则用0补足。循环右移(ROtate Right):可以将数字看做首位相接的“环形”,当最低位被移出后,它会绕到数组的最高位去,继续参与移位操作。带扩展的循环右移(Rotate Right one bit with eXtended):较前面的几种移位方法复杂一些,它需要用到CPSR中的C位。当最低位被向右移出后,最高位有C位的值补足,然后被移出的最低位被放到C位中。精选ppt立即数#并不是任意数都是合法的,在立即数寻址中,分配给立即数的空间是12位,8位用于保存一个常数,4位用于保存循环右移基数,而循环右移每次需要移动偶数位,即右移的位数是基数*2。假设常

8、数为A,循环右移位数为N,则最后得到的立即数=A循环右移(N*2位)。0 x3FC立即数合法,A=0b11111111,N=0d150 x1FE不合法精选ppt立即寻址寄存器寻址寄存器偏移寻址寄存器间接寻址基址变址寻址多寄存器寻址堆栈寻址相对寻址精选ppt立即寻址立即寻址也可被称为立即数寻址,读取指令后可以立即得到操作数,而不需要去物理内存得到相应内容。这个给出的操作数叫立即数,它一般以“#”为前缀,“#0 x”、“#0d”,“#0b”开头的计数用来表示十六进制,十进制和二进制。ADD R1, R1, #0 x1 ; R1- R1+ 1精选ppt寄存器寻址寄存器寻址也是一种不需要访问存储器内容

9、的寻址方式,指令中直接指明操作数所在的寄存器,执行时处理器直接访问寄存器获取操作数ADD R1, R1, R2 ; R1- R1+ R2 MOV R1, R0; R1- R0精选ppt寄存器偏移寻址寄存器偏移寻址是ARM指令特有的一种寻址方式,第2操作数可以在与第1操作数结合之前,进行各种形式的移位操作ADD R1, R1, R2 , ROR #0 x2; R2循环右移两位后与R1相加,结果放入R1 MOV R1, R0, LSL R2; R0逻辑左移R2位后放入R1中精选ppt寄存器间接寻址寄存器间接寻址的指令中虽然也是指定寄存器,但并不是直接拿寄存器中的值来进行运算操作,此时寄存器中储存的

10、是地址,处理器需要根据这个地址从存储器中获取操作数。所以寄存器间接寻址是需要进行存储器访问的,所以执行效率比寄存器寻址要慢。STR R1, R2; 将R1的值存入以R2内容为地址的存储器中 SWP R1, R1, R2; 交换以R2为地址的存储器内容和R1内容精选ppt基址变址寻址基址变址寻址与寄存器间接寻址相似,但此时从寄存器取出的内容需要加上指令所给定的偏移量,这样才构成操作数的有效地址。变址寻址方式通常用于访问基地址附近的地址单元,常用于查表,数组操作,功能部件寄存器访问等op Rd, Rn, R1 op Rd, Rn, FlexOffsetop Rd, Rn, FlexOffset!o

11、p Rd, Rn, FlexOffset精选ppt多寄存器寻址多寄存器寻址方式可以在同一条指令中完成多个寄存器数据的传送,最多可以传送16个通用寄存器LDMIA R0, R1, R2, R3, R4, R5 ; R1- R0, R2- R0+4, , R5-R0+16STMIA R0, R2-R5, R7; R0-R2, R0+4-R3, , R0+12-R5, R0+16-R7精选ppt堆栈寻址堆栈是一个后进先出的数据结构,堆栈寻址方式会有一个指针,始终指向存储单元的栈顶,这个指针需要用一个专门的寄存器来存放,这个寄存器一般是R13。精选ppt有四种栈堆形式:堆栈指针总是指向最后压入堆栈的数

12、据,称为满堆栈(Full Stack)堆栈指针指向下一个空位置时,称为空堆栈(Empty Stack)从低地址向高地址生长的堆栈叫递增堆栈(Ascending Stack)从高地址向低地址生长的堆栈叫递减堆栈(Descending Stack)精选pptSTMFD SP!, R1-R7, LR ; 将R1-R7,LR存放到堆栈中,这条指令一般用来保护现场精选ppt相对寻址相对寻址可以看作是寄存器变址寻址方式的一个特例,因为此时包含基地址的寄存器特指程序计数器PC,通过PC值与指令中的偏移量结合,生成有效的操作数地址。一般这种寻址方式用于指令跳转BL Label; 转跳到Label标签处.Lab

13、el: 精选pptARM转跳指令主要用于:向后跳转实现循环;通过条件判断实现现在跳转;子程序调用;切换处理器工作状态。精选pptARM实现程序跳转有两种方法将当前的程序寄存器PC值改写为跳转的目的地址,此时可以实现4G地址范围内的长跳转。使用专门的跳转指令实现,包括B、BL、BX和BLX指令等MOV PC, #immediate; PC- immediateLDR PC, PC, #offset; PC- PC+offsetBcond, Label精选pptARM的通用数据处理指令大致可以分为4类数据传送指令算术逻辑运算指令比较指令前导零计数指令精选ppt数据传送指令数据传送指令MOV(MOV

14、E)MOV(MOVE)和和MVN(MOVE NOT)MVN(MOVE NOT)格式为格式为MOV指令将Operand2的值复制到Rd寄存器中,而MVN指令会先将Operand2按位取反后再复制到Rd寄存器中。举例举例MOVcondS Rd, Operand2MVNcondS Rd, Operand2MOVS R0, R0, ASR R2MVNNE R1 #0 x22精选ppt算术逻辑运算指令ADD和ADC,SUB和SBC,RSB和RSC这三组指令分别是加法指令,减法指令,逆向减法指令及其各自的带进位操作指令格式为格式为举例举例opcondS Rd, Rn, Operand2ADDS R6, R

15、0, R3ADCS R7, R1, R4ADC R8, R2, R5精选ppt算术逻辑运算指令ANDAND,ORRORR,EOREOR,BICBIC这四条指令分别是逻辑与指令,逻辑或指令,逻辑异或指令和位清除指令格式为格式为举例举例opcondS Rd, Rn, Operand2EOR R0, R1, #0 xFF00ORR R1, R2, R4, LSR #2BICNES R5, R6, R1, RRX精选ppt比较指令TSTTST和和TEQTEQ位测试指令和相等测试指令格式为格式为举例举例TSTcond Rn, Operand2TEQcond Rn, Operand2TST R1, #0

16、x0FTEQNE R9, #0 x4000精选ppt比较指令CMP和CMN比较指令和反值比较指令格式为格式为举例举例CMPcond Rn, Operand2CMNcond Rn, Operand2CMPLT R4, R2CMN R13, R5, LSL #4精选ppt前导零计数指令CLZCLZ前导零计数指令,它是从v5版本开始引入的格式为格式为该指令从Rm寄存器值的高位开始计数(32位的数据即从31开始),直到遇到第一个非零位为止,统计总共前导零的个数,并将统计值存入Rd中。CLZcond Rd, Rm精选pptMUL和MLAMUL和MLA指令是32的乘法指令和乘加指令格式为格式为举例举例MU

17、LcondS Rd, Rm, RsMLAcondS Rd, Rm, Rs, RnMULLT R7, R7, R8MLA R3, R2, R4, R6精选pptUMULL,UMLAL,SMULL和SMLAL上述指令的U表示无符号,S表示带符号,L表示结果为长整型。所以上述指令分别叫做无符号长整型乘法指令,无符号长整型乘加指令,带符号长整型乘法指令和带符号长整型乘加指令格式为格式为举例举例OpcondS RdLo, RdHi, Rm, RsUMULLS R1, R2, R3, R4UMLALNE R1, R2, R3, R1SMULL R5, R4, R3, R2SMULLLES R5, R3,R

18、2, R1精选pptSMULxy和SMLAxySMULxy指令和SMLAxy指令是16位的带符号乘法指令格式为格式为举例举例SMULcond Rd, Rm, RsSMLAcond Rd, Rm, Rs, RnSMULTT R1, R2, R3SMLABTEQ R2, R3, R4, R4精选pptSMULWySMULWy和和SMLAWySMLAWy分别是32*16位的带符号乘法指令和乘加指令格式为格式为举例举例SMULWcond Rd, Rm, RsSMLAWcond Rd, Rm, Rs, RnSMULWTVS R1, R2, R1SMLAWT R2, R2, R4, R4精选pptLDR和

19、STRLDR和STR指令是单一数据加载和存储指令,LDR指令从内存读取数据装入寄存器中,STR指令将寄存器中的数据存入内存。格式为格式为举例举例opcondBT Rd, RnopcondB Rd, Rn, FlexOffset!opcondB Rd, labelopcondBT Rd, Rn, FlexOffsetLDR R0, R1STRT R2, R0, R3, LSL #0 x2!LDRB R4, R8, #0 x4精选pptLDM和STM批量加载指令LDM将一片连续内存单元的数据加载到一组通用寄存器中,而批量存储指令STM将一组通用寄存器中的值存储到一片连续内存单元之中格式为格式为举例

20、举例opcondmode Rn!, reglistLDMFA R5, R1, R3, R5, R7STMFD R13!, R0-R4, LR;将R0-R4及LR压入栈堆LDMFD R13!, R0-R4, PC;恢复R0-R4及PC,一般用于程序返回精选pptSWP(Swap)交换指令SWP用于寄存器和存储器之间内容的交换,它将指定内存单元的数据存入目标寄存器,然后将源寄存器的内容储存到该内存单元中格式为格式为举例举例SWPcondB Rd, Rm, RnSWPB R2, R3, R4;SWP R1, R1, R5; 将R1与R5指定的内存进行内容交换精选pptPLD预读取PLD指令是ARMv

21、5E版本引入的,它指示存储器系统在接下去的几条指令中很可能会有Load指令,存储系统以此做好相应的准备,从而加速内存访问过程格式为格式为举例举例PLD Rn, FlexOffsetPLD R2, #Label*5; Label*5在汇编时计算,范围应该在-4095到+4095PLD R3, R2, LSR #0 x2精选pptCDP和CDP2CDP是协处理器数据处理指令(Coprocessor Data oPeration),用来执行特定的数据操作;CDP2是从ARMv5版本引进的格式为格式为举例举例CDPcond coproc, opcode1, CRd, CRn, CRm, opcode2

22、CDP2 coproc, opcode1, CRd, CRn, CRm, opcode2CDP P3, 2, C12, C10, C3, 4; 完成协处理器P3的初始化CDP2 P6, 1, C3, C4, C5精选pptLDC和LDC2,STC和STC2LDC指令将存储器内容复制到协处理器寄存器中,而STC指令则是将协处理器寄存器数据拷贝到存储器中。格式为格式为举例举例opcondL coproc, CRd, RnopcondL coproc, CRd, Rn, #-offset!opcondL coproc, CRd, Rn, #-offsetLDC P5, C2, R4, #0 x8!S

23、TC P6, C2, R3,#-0 x7精选pptMCR, MCR2MCR, MCR2和和MCRRMCRRMCR指令将ARM寄存器中的数据传输到协处理器寄存器中。MCR指令将ARM寄存器中的数据传输到协处理器寄存器中格式为格式为举例举例MCRcond coproc, opcode1, Rd, CRn, CRm, opcode2MCR2 coproc, opcode1, Rd, CRn, CRm, opcode2MCRRcond coproc, opcode1, Rd, Rn, CRmMCR P7, 3, R1, C3, C2, 1; 将ARM寄存器R1的数据存入协处理器P7的寄存器C2,C3中

24、精选pptMRC,MRC2和MRRCMRC指令的数据传输方向与MCR指令相反,它将协处理器寄存器中的数据传送到ARM处理器寄存器中。MRC2指令是从ARMv5版本引入的,而MRRC指令从ARMv5E版本引入格式为格式为举例举例MRCcond coproc, opcode1, Rd, CRn, CRm, opcode2MRC2 coproc, opcode1, Rd, CRn, CRm, opcode2MRRCcond coproc, opcode1, Rd, Rn, CRmMRC P4, 3, R1, C5, C6, 1; 将协处理器P4的寄存器数据传送到ARM处理器寄存器中精选pptSWI软

25、件中断指令SWI用来实现在用户模式下的程序调用管理模式下的代码,这条指令造成处理器模式的切换,CPSR会被存入管理模式下的SPSR,随后指令会跳转到中断向量。格式为格式为举例举例SWIcond immed_24SWI 0 x22222精选pptMRS和MSR状态寄存器读取指令MRS(Move to ARM Register from Status register)和写状态寄存器指令MSR(Move to a Status register from ARM Register),用于在程序状态寄存器和ARM通用寄存器之间传输数据格式为格式为举例举例MRScond Rd, psrMSRcond

26、_, #immed_8rMSRcond _, RmMSR R5, SPSRMSR CPSR_f, R7;更新状态寄存器的标志位精选pptBKPTARMv5版本引入的断点指令,使用断点指令使ARM处理器进入Debug模式格式为格式为举例举例BKPT immed_16BKPT 0 xFF32BKPT 640精选pptQADD,QSUB,QDADD和QDSUB饱和算术指令(saturating arithmetic instructions)在发生溢出时,Q位会被置位,若结果小于231,返回的结果为231,若结果大于231 -1,则返回的结果为231 -1。因此如果在计算结束后目标寄存器保存了饱和数

27、(231或231 -1)且Q置位,则说明程序发生了溢出。格式为格式为举例举例opcond Rd, Rm, RnQADD R3, R3, R2QDSUB R4, R3, R8精选pptADR小范围的地址读取伪指令,主要用来读取基于PC相对偏移的地址或基于寄存器相对偏移的地址。格式为格式为举例举例ADRcond register, exprSUB R2, PC, 0 xC; 相对PC偏移12个字节精选pptADRLADRL中等范围地址取指伪指令,它的取值范围比ADR要大,通常会用两条指令来替代格式为格式为举例举例ADRcondL register, exprstart MOV R4, #0 x22

28、ADR R2, start + 60000精选pptLDR这里讲的是LDR伪指令,不是内存访问指令LDR。LDR伪指令是大范围地址读取伪指令,用于加载32位的立即数或是一个地址值格式为格式为举例举例LDRcond register, =expr | label-exprLDR R1, =0 xFF0LDR R2, =0 xFFFLDR R3, =place精选pptThumb指令将32位ARM指令的一个子集进行编码,成为一个16位的指令集。相对于ARM指令集,Thumb指令拥有更高的代码密度,这对于嵌入式设备来说至关重要。Thumb指令继承了ARM指令许多特点,它也是采用Load/Store结

29、构,有数据处理、数据传送机流控制指令等。除了B指令外,Thumb指令都是无条件执行的,许多Thumb指令数据处理指令都是采用2地址格式,即目的寄存器和源寄存器相同,而大多数ARM数据处理指令采用3地址格式精选pptBB指令是Thumb指令中唯一可以条件执行的指令。格式为格式为举例举例Bcond labelBEQ labelB loop精选pptBL带链接的长跳转格式为格式为举例举例BL labelBL section1精选pptBXBX指令在跳转的同时,会选择性的切换指令集格式举例BX RmBX R3精选pptBLXBLX是带链接的跳转,并选择性的切换指令集。指令格式如下:格式举例BLX Rm

30、BLX labelBLX R4BLX armsub精选pptAND,ORR,EOR和BIC这四条指令是按位逻辑运算指令,分别是按位与,按位或,按位异或和按位清零操作格式举例op Rd, RmORR R2, R3精选pptASR,LSL, LSR和ROR这四条指令是移位指令,分这四条指令是按位逻辑运算指令,分别是按位与,按位或,按位异或和按位清零操作格式举例op Rd, Rsop Rd, Rm, #exprASR R3, R5LSR R0, R3, #5LSL R1, R4, #0精选pptCMP和CMN比较指令和反值比较指令格式举例CMP Rn, #exprCMP Rn, RmCMN Rn,

31、RmCMP R7, #255CMP R7, R12CMN R2, R3精选pptMOV,MVN和NEG格式:举例MOV Rd, #exprMOV Rd, RmMVN Rd, RmNEG Rd, RmMOV R3, #0MOV R0, R12;此时不更新标志位MVN R7, R1NEG R3, R3精选pptTST位测试指令格式举例TST Rn, RmTST R3, R4精选ppt低寄存器低寄存器 的的ADD和和SUB低寄存器是指指令中使用的寄存器范围是R0-R7格式举例op Rd, Rn, Rmop Rd, Rn, #expr3op Rd, #expr8ADD R2, R3, R4SUB R1

32、, R2, #33ADD R5, #244精选ppt高寄存器或低寄存器的ADD 格式举例op Rd, RmADD R11, R3ADD R2,R3;此时和ADD R2, R2, R3等价ADD R3, R12精选pptsp的ADD和SUB这两条指令将堆栈指针sp作为操作数,用来增加或减少sp格式举例ADD sp, #exprSUB sp, #exprADD sp #256SUB sp #vc+8精选pptpc或sp相关的ADD这条指令将sp或pc的值加上或减去一个常量,并将结果存入低寄存器中格式举例ADD Rd, Rp, #exprADD R5, sp, #64ADD R3, pc, #980精选pptA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论