ARM的指令集最新培训课件(共71张PPT)_第1页
ARM的指令集最新培训课件(共71张PPT)_第2页
ARM的指令集最新培训课件(共71张PPT)_第3页
ARM的指令集最新培训课件(共71张PPT)_第4页
ARM的指令集最新培训课件(共71张PPT)_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

回顾第一页,共七十一页。第六章ARM根本(gēnběn)指令集与寻址介绍6.1指令集的特征与功能6.2ARM寻址方式6.3ARM指令集编码格式6.4Thumb指令集第二页,共七十一页。6.1指令集的特征(tèzhēng)与功能第三页,共七十一页。1指令(zhǐlìng)概念机器指令〔machineinstruction〕指令集〔InstructionSet〕第四页,共七十一页。2.机器指令要素(yàosù)每一个机器指令必须包含CPU执行所需的全部信息取指令指令地址计算指令译码操作数地址计算数据操作操作数地址计算取操作数存操作数指令完成取下一条多操作数多结果CPU访问存储器或I/OCPU内部操作第五页,共七十一页。2.机器指令要素(yàosù)操作码〔opcode〕源操作数引用结果操作数引用下一指令引用做何操作?对谁做此操作?如何寻找被操作数据的存放器或存储器位置?完成后到哪里去取下一个操作?第六页,共七十一页。3.机器指令的表示(biǎoshì)方法—指令格式指令格式有多种表示形式:定长,变长,混合长度对于32位RISC处理器,一般采用定长格式的32位二进制码。第七页,共七十一页。4.机器指令的表示(biǎoshì)方法采用符号表示法来描述机器指令 e.g.ADD,SUB,Load,Store。由编译器完成符号→二进制的转换第八页,共七十一页。5.指令(zhǐlìng)类型指令集必须充分,应允许用户表达任何处理任务,可以表示任何高级语言的指令形式。E.g.一行简单程序:X=X+Y设:X的内存位置513;Y的内存位置514;1.将内存513位置的值放入存放器reg_x;Load2.将内存514的值放到另一存放器reg_y;Load3.将reg_y加到reg_x,将结果放入reg_x;ADD4.将结果值存入内存513位置;Store第九页,共七十一页。典型分类指令举例数据传送Load,Store,Push,Pop算术Add,Sub,Mul,Div逻辑AND,OR,NOT,ShiftI/ORead,Write系统控制SWI(软中断),BKPT控制传递Jump,Return,NOP,6.指令类型的根本(gēnběn)分类第十页,共七十一页。7.指令集设计(shèjì)的关键环节指令集设计是计算机设计最有影响的方面根本设计出发点操作指令表数据类型指令格式存放器寻址方式应提供多少和怎样的操作?对几种数据类型完成操作?8位字节?32位字?64位双字?指令位长度,地址数目,各字段大小CPU存放器数目以及其用途指定操作数产生的方式第十一页,共七十一页。8.操作数类型(lèixíng)地址无符号整数32位数值整数或定点数浮点数十进制数BCD〔BinaryCodedDecimal〕字符ASCII码逻辑数据第十二页,共七十一页。9.操作(cāozuò)类型典型分类CPU动作指令举例数据传送传送数据到另一个位置Load,Store,Push,Pop算术ALU内完成功能设置条件代码和标志Add,Sub,Mul,Div逻辑同算术指令AND,OR,NOT,ShiftI/O向I/O模块发出命令Read,Write系统控制特权指令,保留给操作系统使用SWI(软中断),BKPT控制传递修改PC,以完成程序调用/返回,管理参数传送Jump,Return,NOP,第十三页,共七十一页。10.汇编语言(huìbiānyǔyán)-举例用机器语言编程语句N=I+J+K第十四页,共七十一页。6.2ARM寻址方式(fāngshì)

第十五页,共七十一页。6.2.1寻址方式(fāngshì)第十六页,共七十一页。1.寻址方式(fāngshì)的考虑为什么要采用多种寻址方式?根本寻址方式:立即寻址直接寻址间接寻址存放器寻址存放器间接寻址偏移寻址堆栈寻址第十七页,共七十一页。2.RISC体系(tǐxì)采用的指令集结构ISA有两种ISA:Register-memoryRegister-RegisterRISC采用Register-Regiter〔Load-Store〕第十八页,共七十一页。6.2.2ARM处理器的寻址方式(fāngshì)第十九页,共七十一页。1.立即(lìjí)寻址操作数直接通过指令给出,数据包含在32位指令编码中。32位有效立即数通过循环右移偶数位而间接得到举例ADDR0,R0,#1ANDR8,R7,#0xFFMOVR1,#0x00012800第二十页,共七十一页。2.存放(cúnfàng)器寻址利用存放器中的数值作为操作数,指令中的地址码给出的是存放器名第二操作数位存放器型时,可以选择对第二操作数进行移位举例ADDR0,R1,R2ADDR3,R2,R1,LSR#2ADDR3,R2,R1,LSRR4LSL,LSR,ASL,ASR,ROR,RRX第二十一页,共七十一页。3.存放(cúnfàng)器间接寻址ARM的数据传送指令都是基于存放器间接寻址,通过Load/Store完成对数据的操作。举例LDRR0,[R1]STRR0,[R1]R0←mem32[R1]R0→mem32[R1]第二十二页,共七十一页。4.基址(jīzhǐ)加偏址寻址〔变址寻址〕将基址存放器的内容与指令中给出的偏移量相加,形成存储器的有效地址,用于访问基址附近的存储器单元。偏移量不超过4KB〔指令编码中Offset为12位〕前变址,后变址,自动变址三种模式存放器间接寻址实际是偏移量为0的基址加偏址寻址举例LDRR0,[R1,#4]LDRR0,[R1,#4]!LDRR0,[R1],#4LDRR0,[R1,R2]LDRR0,[R1,R2,LSL,#2]LDRBR0,[R1]LDRHR1,[R0,#20]前变址:R0←Mem32[R1+4];自动变址:R0←Mem32[R1+4];R1←R1+4后变址:R0←Mem32[R1];R1←R1+4;字节传送:R0←Mem8[R1]半字传送:R1←Mem16[R0+20]第二十三页,共七十一页。5.堆栈(duīzhàn)寻址Stack是用于保存数据的一块连续内存,按照FIFO或FILO顺序存取指向堆栈的地址存放器成为堆栈指针〔SP〕对堆栈的访问通过堆栈指针R13指向堆栈区域来实现举例STMFDSP!{R1-R7,LR}LDMFDSP!{R1-R7,LR}第二十四页,共七十一页。6.块拷贝寻址是多存放器传送指令LDM/STM的寻址方式(fāngshì),可以把内存中的数据块加载到多个存放器中去。LDM/STM根据其后缀名,其寻址方式有所不同LDM/STM的后缀选择举例STMIAR9!,(R0,R1,R5)STMIBR9!,(R0,R1,R5)STMDAR9!,(R0,R1,R5)STMDBR9!,(R0,R1,R5)第二十五页,共七十一页。7.相对(xiāngduì)寻址可以认为是基址为PC的变址寻址,偏移量给出了目的地址于现行指令之间的相对位置。举例BLSUBR 。。。。。。SUBRMOVPC,R14子程序入口地址返回转移到SUBR第二十六页,共七十一页。小结第二十七页,共七十一页。6.3ARM指令集编码(biānmǎ)与格式第二十八页,共七十一页。1.ARM指令(zhǐlìng)分类分类指令指令列举数据处理ADD、ADC、SUB、RSB、SBC;MOV、MVN;AND、ORR、EOR、BIC;CMP、CMN;TST、TEQ;MUL、MLA、UMULL、UMLAL、SMULL、SMLAL数据传送LDR、STR(单寄存器存取);LDM、STM(多寄存器存取);SWP(信号量)状态寄存器访问

MRS、MSR分支指令B、BL;BX、BLX;异常产生SWI(软中断产生);BKPT(断点指令);协处理器CDP;LDC、STC;MCR、MRC;第二十九页,共七十一页。2.ARM指令(zhǐlìng)编码ARM指令编码格式ARM条件编码格式第三十页,共七十一页。3.根本指令(zhǐlìng)格式<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}指令助记符可选条件码;指令执行条件可选后缀,可根据指令结果更新CPSR条件码Rd:目标存放器;Rn:第一操作数存放器第2操作数第三十一页,共七十一页。3.根本指令(zhǐlìng)格式举例LDRR0,[R1]BEQDATAEVENADDSR2,R1,#1SUBNESR2,R1,#0x20读取R1地址上的内容,执行条件AL〔总是〕条件执行分支指令,执行条件EQ,即相等那么跳转加法指令:R2←R1+1;影响CPSR的标志位条件执行减法:R2←R1-0x20;执行条件NE,影响CPSR的标志位NZCV……IFTM4M3M2M1M0第三十二页,共七十一页。4.数据处理指令(zhǐlìng)数据处理1.算术运算指令ADD、SUB、ADC、SBC、RSB、RSC;2.逻辑运算指令AND、ORR、EOR、BIC;3.比较指令CMP、CMN;4.测试指令TST、TEQ;5.乘法指令MUL、MLA、UMULL、UMLAL、SMULL、SMLAL6.数据传送指令MOV、MVN;第三十三页,共七十一页。4.1乘法(chéngfǎ)指令完成2个存放器的数据相乘。按照结果位宽可分成两类:64位结果;仅保存最低有效32位。2种类型都有“乘-累加〞变形,即将成绩连续相加成总和,且适用于无符号和有符号数乘法指令举例MUL、乘(32位结果)Rd←(Rm*Rs)[31:0]MLA、乘-累加(32位结果)Rd←(Rm*Rs+Rn)[31:0]UMULL、无符号数长乘RdHi:RdLo←Rn*RsUMLAL、无符号数长乘-累加RdHi:RdLo+=Rn*RsSMULL、符号数长乘RdHi:RdLo←Rn*RsSMLAL符号数长乘-累加RdHi:RdLo+=Rn*Rs第三十四页,共七十一页。4.2Load/Store指令(zhǐlìng)ARM处理器是Load/Store型的。将数据从存储器中调入存放器中进行处理;处理完成后经过存放器将结果存回到存储器中I/O功能是通过存储器映射的可循之外围存放器和终端输入的组合来实现。在存储器映射系统中,外设中的存放器被映射为存储器的地址,对这些存放器的操作方法与对存储器的操作相同处理器对外设的操作也是适用Load/Store指令通过类似存储器操作来完成。第三十五页,共七十一页。4.2.1单存放(cúnfàng)器存取指令LDR/STR传送的数据可以是8位字节、16位半字或32位字可以适用7种寻址方式;可以适用自动变址寻址方式〔硬件支持〕指令格式前变址: LDR|STR{<cond>}{B}Rd,[Rn,<offset>]{!}后变址 LDR|STR{<cond>}{B}{T}Rd,[Rn],<offset>相对PC变址 LDR|STR{<cond>}{B}Rd,LABELB表示传送无符号字节还是字。缺省B=0为传送字T标志位只能在非用户模式即特权模式下使用。作用是选择用户角度的存储器变换系统LDR/STR举例第三十六页,共七十一页。4.2.2多存放(cúnfàng)器存取指令LDM/STM可用一条指令将16个可见存放器的任意子集存储到内存或者相反。寻址模式受到限制LDM/STM的两种用途可允许OS加载或存储用户模式存放器来保护和恢复用户处理状态〔保存作业现场〕;可作为异常处理返回的一局部,完成从SPSR中恢复CPSR。多存放器存取指令形式指令举例第三十七页,共七十一页。4.3状态存放(cúnfàng)器与GPRs之间的传送MSR/MRSPSW到GPRs的传送指令MRS;GPRs到PSW的传送指令MSR;修改PSW一般是通过“读-修改-写〞3个步骤来完成。不能通过该指令直接修改CPSR中的T位直接将程序状态切换到Thumb状态,而是必须通过BX指令完成状态切换。第三十八页,共七十一页。4.4异常中断产生(chǎnshēng)指令SWI指令用于产生SWI异常中断,可以实现在用户模式下对OS中特权模式的程序调用。SWI代表“软件中断〞,用户可通过其调用系统例程,又被称为监控调用。它将处理器至于SVC监控模式,从0x08开始执行指令。指令格式与举例BKPT用于产生软件断点,供调试程序使用。用于软件调试,使处理器停止执行正常指令而进入相应的调试程序。第三十九页,共七十一页。6.4Thumb指令(zhǐlìng)第四十页,共七十一页。1.Thumb指令编码(biānmǎ)格式第四十一页,共七十一页。2.Thumb指令集特点(tèdiǎn)16位指令编码压缩指令,在ARM的Pipeline中先动态解压,再作为标准32位ARM指令执行CPSR[5]位T决定指令流类型:T=1那么Thumb;Thumb指令集没有协处理器、信号量、乘加、64位乘、状态存放器等指令;指令均为无条件执行,只有B指令除外;采用2地址格式的数据处理指令;NZCV……IFTM4M3M2M1M0第四十二页,共七十一页。Thumb指令(zhǐlìng)使用:Thumb指令功能受限,除非有严格的指令空间的要求,一般很少使用。第四十三页,共七十一页。小结第四十四页,共七十一页。10.汇编语言(huìbiānyǔyán)-举例用机器语言编程语句N=I+J+K假设:I,J,K变量初始化为2,3,4;N,I,J,K4个变量的存储位置从0x201处开始;程序从位置0x101处开始,由4条指令组成:将位置201的内容装入AC;将位置202的内容加到AC;将位置203的内容加到AC;将AC的内容存入位置204;

第四十五页,共七十一页。8.汇编语言(huìbiānyǔyán)-举例地址内容10100100010000000011020001001000000010103000100100000001110400110010000001002010000000000000010202000000000000001120300000000000001002040000000000000000地址内容10122011021202103120310432042010002202000320300042040000地址指令101LDA201102ADD202103ADD203104STA204201DAT2202DAT3203DAT4204DAT0标号操作操作数FORMULLDAIADDJADDKSTANIDATA2JDATA3KDATA4NDATA0二进制→16进制符号程序汇编程序第四十六页,共七十一页。1.寻址方式(fāngshì)的考虑指令格式中的地址字段通常是非常有限的,希望能够大范围的访问主存或虚拟存储器。为了实现此目标,采用了各类寻址技术。各类寻址技术都涉及到如下两方面的权衡:地址范围和寻址灵活性;存储器引用数与地址计算的复杂性;第四十七页,共七十一页。2.几种根本(gēnběn)的寻址方式立即寻址Opcode操作数指令第四十八页,共七十一页。2.几种(jǐzhǒnɡ)根本的寻址方式直接寻址OpcodeA指令操作数存储器第四十九页,共七十一页。2.几种(jǐzhǒnɡ)根本的寻址方式间接寻址OpcodeA指令操作数存储器第五十页,共七十一页。2.几种根本(gēnběn)的寻址方式存放器寻址R指令操作数存放器组第五十一页,共七十一页。2.几种根本(gēnběn)的寻址方式存放器间接寻址R指令存放器组操作数存储器第五十二页,共七十一页。2.几种(jǐzhǒnɡ)根本的寻址方式偏移寻址R指令存放器组操作数存储器A第五十三页,共七十一页。2.几种(jǐzhǒnɡ)根本的寻址方式堆栈寻址指令栈顶隐含第五十四页,共七十一页。6.LDM/STM指令(zhǐlìng)后缀选择IA〔IncrementAfter〕操作完成后地址递增IB〔IncrementBefore〕地址递增后完成操作DA〔DecrementAfter〕操作完成后地址递减DB〔DecrementBefore〕地址递减后完成操作EA〔EmptyIncrement〕空递增堆栈FD〔FullDecrement〕满递减堆栈ED〔EmptyDecrement〕空递减堆栈FA〔FullIncrement〕满递增堆栈用于数据的存储和读取用于堆栈的操作第五十五页,共七十一页。1.ARM指令集编码(biānmǎ)第五十六页,共七十一页。ARM指令集条件(tiáojiàn)码编码第五十七页,共七十一页。3.2乘法指令(zhǐlìng)举例形成两个矢量的标积:MovR11,#20MovR10,#0LOOPLDRR0,[R8],#4LDRR1,[R9],#4MLAR10,R0,R1,R10SUBSR11,R11,#1BNELOOP格式:UMLAL{<cond>}{S}RdHi,RdLo,Rm,RsE.g.UMLALR4,R3,R2,R1R4:R3←R2*R1初始化循环计数初始化总和读取第一分量读取第二分量乘积累加循环计数减一第五十八页,共七十一页。4.1单存放(cúnfàng)器存取指令举例LDRR8,[R10]LDRNER1,[R5,#960]!STRR2,[R9,#consta-struc]LDRR1,localdataLDRR0,[R1],R2,LSL#2LDRBR0,[R2,#3]LDRR1,[R0,-R2,LSL#2]STRR0,[R7],#-8R8←[R10]〔有条件地〕R1←[R5+960],然后R5←[R5+960]常量表达式,-4095~4095加载一个字,该字位于标号Localdata所在位置先将R1指向的内存单元的数据读入,再将R1←[R1+R2x4]将[R2+3]中的字节数据读入R0,R0高24位置0将[R0-R2x4]处的数据读到R1中,R0,R2中的值不变将R0的数据写入到[R7]位置,再R7←[R7-8]第五十九页,共七十一页。4.1单存放器存取指令(zhǐlìng)举例编程中,经常使用相对PC的形式将R0中的一个字存到外设中:LDRR1,UARTADDSTRR0,[R1]。。。。。。UARTADD&1000000也经常使用相对PC的形式将外设中数据读到R0中:LDRR1,UARTADDLDRR0,[R1]。。。。。。UARTADD&1000000第六十页,共七十一页。4.2多存放器存取指令(zhǐlìng)指令(zhǐlìng)形式LDM/STM{<cond>}<addmode>Rn{!}<registers>数据存取堆栈操作IA(IncrementAfter)EA(EmptyAggrandizement)空递增堆栈IB(IncrementBefore)FA(FullAggrandizement)满递增堆栈DA(DecrementAfter)ED(EmptyDecrement)满递减堆栈DB(DecrementBefore)FD(FullDecrement)满递减堆栈编号低的存放器在存储数据或者加载数据时对应于存储器的低地址第六十一页,共七十一页。4.2多存放器存取指令(zhǐlìng)举例LDMIAR1,{R0,R2,R5}SRMDBR1!,{R3-R6,R11,R12}STMEDSP!,{R0-R7,LR}R0←[R1]R2←[R1+4]R5←[R1+8][R1-4]←R3[R1-8]←R4[R1-12]←R5[R1-16]←R6[R1-20]←R11[R1-24]←R12R1←R1-24现场保存:将R0~R7,LR入栈[R13]←R0[R13-4]←R1。。。R13←R13-36第六十二页,共七十一页。4.3.1PSW到GPRs的传送(chuánsònɡ)指令MRS三种情况下会使用:修改PSW内容。MRS用于将PSW内容读到通用存放器中;异常中断允许嵌套时,需要在进入中断之后、嵌套中断发生之前保存当前处理器模式对应的SPSR。这时要先读出SPSR值,再用其它指令将其保存;当发生进程切换时,也需要保存当前存放器值。格式MRS{<cond>}Rd,CPSR|SPSR举例MRSR0,CPSRMRSR2,SPSR第六十三页,共七十一页。4.3.2GPRs到PSW的传送(chuánsònɡ)指令MSR当要保存或修改当前的CPSR/SPSR时,必须将这些内容先传送到GPRs中进行处理,然后就要采用MSR指令写回到PSW中。通过MSR指令,可以将立即数或GPRs的内容加载到CPSR或SPSR中的指定区域第六十四页,共七十一页。4.3.2MSR格式(géshi)MSR{<cond>}CPSR_f|SPSR_f,#<32位立即数>MSR{<cond>}CPSR_f|SPSR_f,Rm_f或者<field>域表示域屏蔽控制,可为以下情况之一:C---控制域PSR[7:0]X----扩展域,PSR[15:8]S----状态域,PSR[23:16]F---标志位域,PSR[31:24]NZCV……IFTM4M3M2M1M0条件码标志位

温馨提示

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

评论

0/150

提交评论