2014-3-嵌入式系统体系结构与开发-指令系统资料_第1页
2014-3-嵌入式系统体系结构与开发-指令系统资料_第2页
2014-3-嵌入式系统体系结构与开发-指令系统资料_第3页
2014-3-嵌入式系统体系结构与开发-指令系统资料_第4页
2014-3-嵌入式系统体系结构与开发-指令系统资料_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统体系构造与开发

嵌入式处理器ARM指令系统ARM体系的构造版本ARM体系的构造版本ARM体系构造共有6个版本,版本号1-6指令集功能不断扩大特定功能:T——支持Thumb指令集M——支持长乘法指令E——支持增加型DSP指令J——javaSIMD——ARM媒体功能扩展ARM微处理器工作模式与存放器ARM微处理器指令集ARMTHUMBARM微处理器工作模式用户模式特权模式〔系统模式与特殊模式〕模式切换存放器组织存放器定义模式与存放器ARM与THUMB从编程的角度看,ARM微处理器有两种指令集,可在两种指令集之间切换:ARM指令集,处理器执行32位的字对齐的ARM指令;Thumb指令集,处理器执行16位的、半字对齐Thumb指令。THUMB指令是ARM指令的子集可以相互调用,只要遵循确定的调用规章Thumb指令与ARM指令的时间效率和空间效率关系为:存储空间约为ARM代码的60%~70%指令数比ARM代码多约30%~40%存储器为32位时,ARM代码比Thumb代码快约40%存储器为16位时,Thumb比ARM代码快约40~50%使用Thumb代码,存储器的功耗会降低约30%ARM与THUMB指令指令切换方法ARM指令集和Thumb指令集均有切换处理器状态的指令,在开头执行代码时,应当处于ARM指令集指令集切换分状态位设置和特殊处理两种进入Thumb指令当操作数存放器的状态位〔位0〕为1时,承受执行BX指令的方法,使微处理器从ARM指令集切换到Thumb指令集当处理器处于Thumb指令时,发生特殊〔如IRQ、FIQ、Undef、Abort、SWI等〕,则特殊处理返回时,自动切换到Thumb指令。切换到ARM指令当操作数存放器的状态位〔位0〕为0时,执行BX指令时可以使微处理器从Thumb切换到ARM在处理器进展特殊处理时,把PC指针放入特殊模式链接存放器中,并从特殊向量地址开头执行程序,也可以使处理器切换到ARM。ARM微处理器运行模式User模式用户程序不能访问有些受疼惜的资源只能通过特殊的形式来转变CPU的当前运行模式特权模式可以存取系统中的任何资源System模式系统模式与User模式的运行环境一样但是它可以不受任何限制的访问任何资源该模式主要用于运行系统中的一些特权任务FIQ模式IRQ模式Supervisor模式Abort模式Undefined模式特殊模式:主要是在外部中断或者程序执行非法操作时会触发用户模式处理器模式用户模式。usr:ARM处理器正常的程序执行状态特权模式〔特殊模式〕fiq:用于高速数据传输或通道处理irq:用于通用的中断处理svc:操作系统使用的疼惜模式abt:用于虚拟存储及存储疼惜und:当消逝未定义指令终止时进入该模式sys:运行具有特权的操作系统任务ARM微处理器运行模式ARM处理器运行模式图ARM微处理器的指令系统

ARM微处理器的指令集是加载/存储型的指令集仅能处理存放器中的数据,处理结果都要放回存放器中对系统存储器的访问则需要通过特地的加载/存储指令来完成。ARM微处理器的指令集可以分为六大类跳转指令数据处理指令程序状态存放器〔PSR〕处理指令加载/存储指令协处理器指令和特殊产生指令OpCode指令助记符Cond:执行条件S:是否影响状态存放器Rd:目标存放器Rn:第1个操作数存放器Operand2:第2个操作数ARM指令根本语法格式<Opcode>{<Cond>}{S}<Rd><Rn>{,<Operand2>}例子LDR R0,[R1] ;无条件执行BEQ LOOP ;等于条件ADDSR2,R2,#1 ;影响状态位,R2<-R2+1指令编码格式ARM指令编码构造——条件域ARM指令编码的条件域当处理器工作在ARM状态时,几乎全部的指令均依据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被无视。每一条ARM指令包含4位的条件码,位于指令的最高4位[31:28]。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。ARM指令编码的条件域条件编码条件码后缀标志含义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出ARM指令编码的条件域条件编码条件码后缀标志含义1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL忽略无条件执行ARM微处理器指令表-1助记符指令功能描述ADC带进位加法指令ADD加法指令AND逻辑与指令B跳转指令BIC位清零指令BL带返回的跳转指令BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令ARM微处理器指令表-2助记符指令功能描述CDP协处理器数据操作指令CMN比较反值指令CMP比较指令EOR异或指令LDC存储器到协处理器的数据传输指令LDM加载多个寄存器指令LDR存储器到寄存器的数据传输指令MCRARM寄存器到协处理器寄存器数据传输ARM微处理器指令表-3助记符指令功能描述MLA乘加运算指令MOV数据传送指令MRC协处理器寄存器到ARM寄存器数据传输MRS传送CPSR或SPSR的内容到通用寄存器MSR传送通用寄存器到CPSR或SPSR的指令MUL32位乘法指令MLA32位乘加指令MVN数据取反传送指令ARM微处理器指令表-4助记符指令功能描述ORR逻辑或指令RSB逆向减法指令RSC带借位的逆向减法指令SBC带借位减法指令STC协处理器寄存器写入存储器指令STM批量内存字写入指令STR寄存器到存储器的数据传输指令SUB减法指令ARM微处理器指令表-5助记符指令功能描述SWI软件中断指令SWP交换指令TEQ相等测试指令TST位测试指令ARM寻址方式ARM寻址方式马上寻址存放器寻址存放器间接寻址基址变址寻址多存放器寻址相对寻址堆栈寻址ARM指令的寻址方式ARM指令系统支持如下几种常见的寻址方式:马上寻址存放器寻址存放器间接寻址基址变址寻址多存放器寻址相对寻址堆栈寻址ARM指令的寻址方式-马上寻址马上寻址操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为马上数。例如以下指令:ADDR0,R0,#1 /*R0←R0+1*/ADDR0,R0,#0x3f /*R0←R0+0x3f*/马上操作数在以上两条指令中,其次个源操作数即为马上数,要求以“#”为前缀,对于以十六进制表示的马上数,还要求在“#”后加上“0x”。ARM指令的寻址方式-存放器寻址存放器寻址利用存放器中的数值作为操作数,这种寻址方式是各类微处理器常常承受的一种方式,也是一种执行效率较高的寻址方式。以下指令: ADD R0,R1,R2 /*R0←R1+R2*/该指令的执行效果是将存放器R1和R2的内容相加,其结果存放在存放器R0中。ARM指令的寻址方式-存放器间接寻址存放器间接寻址以存放器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:ADDR0,R1,[R2] /*R0←R1+[R2]*/LDR R0,[R1] /*R0←[R1]*/STR R0,[R1] /*[R1]←R0*/第一条指令中,以存放器R2的值作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入存放器R0中;其次条指令将以R1的值为地址的存储器中的数据传送到R0中。第三条指令将R0的值传送到以R1的值为地址的存储器中。ARM指令的寻址方式-基址变址寻址

基址变址寻址将基址存放器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址四周的地址单元。承受变址寻址方式的指令常见有以下几种形式,如下所示: LDRR0,[R1,#4] ;R0←[R1+4] LDRR0,[R1,#4]! ;R0←[R1+4]、R1←R1+4 LDRR0,[R1],#4 ;R0←[R1]、R1←R1+4 LDRR0,[R1,R2] ;R0←[R1+R2]在第一条指令中,将存放器R1的内容加上4形成操作数的有效地址,从而取得操作数存入存放器R0中。在其次条指令中,将存放器R1的内容加上4形成操作数的有效地址,从而取得操作数存入存放器R0中,然后,R1的内容自增4个字节。在第三条指令中,以存放器R1的内容作为操作数的有效地址,从而取得操作数存入存放器R0中,然后,R1的内容自增4个字节。在第四条指令中,将存放器R1的内容加上存放器R2的内容形成操作数的有效地址,从而取得操作数存入存放器R0中。ARM指令的寻址方式-多存放器寻址多存放器寻址方式,一条指令可以完成多个存放器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用存放器的值。以下指令: LDMIAR0,{R1,R2,R3,R4} ;R1←[R0] ;R2←[R0+4] ;R3←[R0+8] ;R4←[R0+12]该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送到R1~R4。STMIAR0!,{R1-R4};[R0]←R1 ;[R0+4]←R2 ;[R0+8]←R3 ;[R0+12]←R4ARM指令的寻址方式-相对寻址

与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL承受了相对寻址方式:

BLNEXT ;跳转到子程序NEXT处执行 …… NEXT …… MOV PC,LR ;从子程序返回ARM指令的寻址方式-堆栈寻址

堆栈是一种数据构造,按先进后出〔FirstInLastOut,FILO〕的方式工作,使用一个称作堆栈指针的专用存放器指示当前的操作位置,堆栈指针总是指向栈顶。当堆栈指针指向最终压入堆栈的数据时,称为满堆栈〔FullStack〕,而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈〔EmptyStack〕。ARM指令的寻址方式-堆栈寻址堆栈的生成方式:递增堆栈〔AscendingStack〕当堆栈由低地址向高地址生成时,称为递增堆栈;递减堆栈〔DecendingStack〕,当堆栈由高地址向低地址生成时,称为递减堆栈。四种类型的堆栈工作方式:满递增堆栈:堆栈指针指向最终压入的数据,且由低地址向高地址生成。满递减堆栈:堆栈指针指向最终压入的数据,且由高地址向低地址生成。空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成ARM伪指令ARM伪指令数据定义伪指令把握伪指令地址加载伪指令声明引用段域伪指令ARM的伪指令定义数据伪指令DCB安排连续的字节存储单元,并设置初值DCW/DCWU安排连续的半字存储单元,并设置初值DCD/DCDU安排连续的字存储单元,并设置初值DCQ/DCQU安排8字节为块存储单元,并设置初值DCFS/DCFSU为单精度浮点数安排连续存储单元,并设置初值DCFD/DCFDU为双精度浮点数安排连续的字存储单元,并设置初值SPACE安排一块连续的存储单元FIELD安排一块连续的存储单元MAP定义一个构造化的内存表的首地址ARM的伪指令把握伪指令IF指令序列ELSE指令序列ENDIF条件编译指令WHILEWEND条件循环执行指令地址加载伪指令ADR 小范围的地址读取ADRL 中范围的地址读取LDR 大范围的地址读取NOPARM的伪指令声明引用EQU定义字符名称EXPORT声明全局标号IMPORT在其他源文件中定义标号EXTERN在其他源文件中定义标号GET(或Include)包含源文件指令INCBIN包含目标文件和数据文件包指令RN定义存

温馨提示

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

评论

0/150

提交评论