嵌入式系统2-指令系统_第1页
嵌入式系统2-指令系统_第2页
嵌入式系统2-指令系统_第3页
嵌入式系统2-指令系统_第4页
嵌入式系统2-指令系统_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统设计

-指令系统设计嵌入式系统的第一步:确定指令系统,以指导选择嵌入式微处理器核。主流嵌入式处理器核: ARM,MIPS,PowerPC,68K,x86一、计算机体系结构1、冯.诺依曼结构2、哈佛结构3、RISC与CISC4、汇编语言种类1.冯.诺依曼结构五大部件:ALU,Controller,Memory,Input,Output存储程序(storedprogram):程序以数字形式存在,与数据一样被读写。指令执行次序:顺序跳转程序计数器ProgramCounter(PC)2、哈佛体系结构程序与数据有单独的存储器PC只能指向程序存储器目前仍然广泛应用指令cache与数据cache适用于实时信号处理(大部分的DSP)大量数据流入计算机数据必须在精确的时间内处理完成两种存储器模型比较微处理器采用的冯·诺依曼结构将指令和数据存放在同一存储空间中,统一编址,指令和数据通过同一总线访问同一地址空间上的存储器;DSP芯片采用的哈佛结构则将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编制、独立访问。与之相对应的是系统中设置的两条总线-程序总线和数据总线,从而使数据的吞吐率提高了一倍。3、RISC与CISCCISC:复杂指令系统计算机具有大量的指令和寻址方式8/2原则:80%的程序只使用20%的指令大多数程序只使用少量的指令就能够运行。RISC:精简指令系统计算机在通道中只包含最有用的指令确保数据通道快速执行每一条指令使CPU硬件结构设计变得更为简单RISC一般性能比CISC高4、汇编语言种类1)堆栈型汇编PushaPushbAddPopc2)累加器型汇编LoadaAddbStorec3)通用寄存器型汇编(load/store)Load$1,ALoad$2,BAdd$3,$1,$2Store$3,C二、ARM处理器属于RISC体系ARM:只设计内核的英国公司,自己不制造VLSI设备,只提供授权ARM内核被授权给数百家厂商ARM主要应用于无线局域网、3G、手机、手持设备、有线网络通讯应用形式:集成到专用芯片中作控制器ARM体系结构ARM7采用冯.诺依曼体系ARM9采用哈佛体系对汇编程序员透明地址32位地址长度可以配置为低序或者高序

字的最低位放最低位字节(低序)

字的最低位放最高位字节(高序)2.1汇编书写模式属于通用寄存器型(GPR)汇编Load-Store结构数据必须装载到寄存器才能运算Load从内存装到寄存器Store从寄存器存储到内存ARM的寄存器16个通用寄存器r0…r15r15同时做PC1个特殊寄存器:当前程序状态寄存器CPSR在进行运算时被自动设置CPSR高四位为NZCVN:负数Z:为0C:进位V:溢出2.2数据运算1)寄存器型指令:addr0,r1,r2r1寄存器的内容加r2寄存器的内容,存到r0算术运算Add加Adc进位加Sub减Sbc进位减Rsb:逆减Rsc:进位逆减Mul:乘Mla:乘且累加逻辑运算And:按位与Orr:按位或EOR:按位异或BIC:位清除移位运算LSL:逻辑左移(添0)LSR:逻辑右移(添0)ASL:算术左移ASR:算术右移ROR:循环右移RRX:带进位位的循环右移比较指令CMP:比较CMN:比较求反TST:按位测试TEQ:按位测试求反移动指令MOV:移动MVN:移动求反内存访问指令LDR:装入STR:存储LDRH:装入半字STRH:存储半字LDRSH:装入半个带符号字LDRB:装入字节STRB:存储字节ADR:设置寄存器为地址2)立即数寻址Addr0,r1,#23)寄存器间接寻址LDRr0,[r1,#4]4)自动变址LDRr0,[r1,#16]!r1的内容加16,然后用这个新值作为地址5)后变址LDRr0,[r1],#16把r1为地址的内存数据载入到r0,然后把r1的值加入16并把新值赋值给r16)例子:x=(a+b)-c;ADRr4,aLDRr0,[r4]ADRr5,bLDRr1,[r5]ADDr3,r0,r1ADRr4,cLDRr2,[r4]SUBr3,r3,r2ADRr4,xSTRr3,[r4]2.3控制流1)B指令分支指令分支目标计算例子B#100表示当前程序计数器的值加上400。(100字长)2)条件码EQ:等于0,Z=1NE:不等于0,Z=0CS:进位置1,C=1CC:进位清除:C=0MI:负数,N=1PL:非负数:N=0VS:溢出,V=1VC:非溢出:V=0HI:无符号大于,C=1且Z=0LS:无符号小于或等于,C=0或Z=1GE:有符号小于或等于,N=VLT:有符号小于,N≠VGT:有符号大于,Z=0且N=VLE:有符号小于或等于,Z=1或N≠V3)例子:if(a<b){x=5;y=c+d;}elsex=c-d;ADRr4,aLDRr0,[r4]ADRr4,bLDRr1,[r4]CMPr0,r1 ;a<b?BGEfblock ;ifa>=b,gotofblockMOVr0,#5ADRr4,xSTRr0,[r4]ADRr4,cLDRr0,[r4]ADRr4,dLDRr1,[r4]ADDr0,r0,r1 ;a+bADRr4,ySTRr0,[r4]Bafter ;branchtoendfblock:ADRr4,cLDRr0,[r4]ADRr4,dLDRr1.[r4]SUBr0,r0,r1 ;a-bADRr4,xSTRr0,[r4]after:同样c程序,用汇编可以写成不需要跳转的。如下:ADRr4,aLDRr0,[r4]ADRr4,bLDRr1,[r4]CMPr0,r1 ;a<b?MOVLTr0,#5ADRLTr4,xSTRLTr0,[r4]ADRLTr4,cLDRLTr0,[r4]ADRLTr4,dLDRLTr1,[r4]ADDLTr0,r0,r1 ;a+bADRLTr4,ySTRLTr0,[r4]ADRGEr4,cLDRGEr0,[r4]ADRGEr4,dLDRGEr1.[r4]SUBGEr0,r0,r1 ;a-bADRGEr4,xSTRGEr0,[r4]习题1在ARM中实现C的switch语句switch(test){case0:…break;case1:…break;…}习题2在ARM中实现C的循环语句FIR求∑cixi1≤i≤N

for(i=0,f=0;i<N;i++) f=f+c[i]*x[i];习题1解答ADRr2,testLDRr0,[r2]ADRr1,switchtabLDRr15,[r1,r0,LSL#2]switchtabDCDcase0DCDcase1…case0…;codeforcase0case1…;codeforcase1…2.4函数x=a+b;foo(x);y=c-d;汇编:BLfoo ;分支链接分支前将当前pc值存在r14中。返回只要MOVr15,r14调用过程必须注意不覆盖r14嵌套调用上述方法不适用于嵌套调用嵌套调用时,将返回地址存堆栈voidf1(inta){f2(a);}f1 LDRr0,[r13]STRr13!,[r14]STRr13!,[r0]BLf2SUBr13,#4LDRr13!,r15三、SHARC处理器使用哈佛结构的DSP例子:R1=DM(M0,I0),R2=PM(M8,I8);!注释LABEL: R3=R1+R2;每条指令用分号结束,!开始为注释3.1存储器结构SHARC指令48位基本数据字32位地址位32位片上带大量的存储器系列中的21061有1Mbit片上存储器存储器包括PM:程序存储器DM:数据存储器芯片外还能够加更多的存储器数据类型32位IEEE单精度浮点40位IEEE扩展精度浮点32位整数主要设计为浮点密集型运算适用DSP改进的哈佛结构程序存储器可以包含数据与指令数据可以并行取出3.2体系结构整数操作使用R0到R15,16个整数寄存器浮点操作使用F0到F15,16个浮点寄存器所有数据都是40bit,如果32位数据存储时,存在高32位三个数据功能单元一个ALU一个乘法器一个移位器三个模式寄存器算术状态(ASTAT)粘着(STKY)随着ASTAT的位被设置,但不被清除模式1(MODE1)浮点运算舍入等3.3整数运算Rn=Rx+Ry 加Rn=Rx-Ry 减Rn=Rx+Ry+CI 进位加Rn=Rx-Ry+CI-1 借位减Rn=(Rx+Ry)/2 平均COMP(Rx,Ry) 比较Rn=Rx+CI 进位加Rn=Rx+CI-1 借位加Rn=Rx+1 加1Rn=Rx-1 减1Rn=-Rx 求反Rn=ABSRx 绝对值Rn=PASSRx 将Rx拷贝到RnRn=RxandRy逻辑加Rn=RxorRy 逻辑或Rn=RxxorRy 逻辑异或Rn=NotRx 逻辑非Rn=Min(Rx,Ry) 求最小值Rn=Max(Rx,Ry) 求最大值Rn=ClipRxbyRy 在[-Ry,Ry]范围内截取Rx溢出处理溢出导致最大范围的值不是循环3.4浮点运算Fn=Fx+FyFn=Fx-FyFn=ABS(Fx+Fy)Fn=ABS(Fx-Fy)Fn=(Fx+Fy)/2COMP(Fx,Fy)Fn=-FxFn=ABSFxFn=PassFxFn=RNDFx 舍入Fn=ScalbFxbyRy 用Ry换算成Fx的指数Rn=MantFx 提取Fx的尾数Rn=LOGBFx 把Fx的指数换算成整数Rn=FIXFx,Rn=TRUNCFx将浮点转换成整数Rn=FLOATRxbyRy,FLOATRx将整数换成浮点Fn=RECIPSFx 为倒数创建种子Fn=RSQRTSFx 为倒数平方根创建种子Fn=FxCOPYSIGNFy 把Fy的符号拷贝到FxFn=Min(Fx,Fy)Fn=Max(Fx,Fy)Fn=ClipFxbyFy3.5SHARC的移位操作Rn=LSHIFTRxbyRy 逻辑移位Ry位Rn=RnORSHIFTRxbyRy 逻辑移位并逻辑或Rn=ASHIFTRxbyRy 算术移位Rn=RnORASHIFTRxbyRy 算术移位并逻辑或Rn=ROTRxbyRy 循环移位Ry位Rn=BCLRRxbyRy 清Rx中的一位Rn=BSETRxbyRY 设Rx中的一位Rn=BTGLRxbyRy 切换Rx中的1位BTSTRxbyRy 测试Rx中的1位Rn=FDEPRxbyRy 将Rx中的域累计进Rn中Rn=RnORFDEPRxbyRy 使用OR操作累计并符号扩展Rn=FEXTRxbyRy 提取Rx中的域Rn=EXPRx 提取指数域Rn=EXPRx(Ex) 从ALU中提取指数域Rn=LEFTZRx 提取引导0的个数Rn=LEFTORx 提取引导1的个数Rn=FPACKFx 将32位浮点数转换为16位浮点数Rn=FUNPACKRn 将16位浮点数转换为32位浮点数3.6数操作状态位ASTAT中有AZ,AU,AN,AV,AC,AI,MN,MV,MU,MI,SZ,SV,SSSTKY中溢出位AOS,MOS,MVS,MUS,MIS具体含义略3.7内存操作装入存储体系结构提供用来控制装入和存储的特殊寄存器两个数据地址发生器(DAG)一个是数据存储器一个是程序存储器DAG能够象对数组一样进行访问数据3.8DAG寻址模式1)最简单的立即值R0=DM(0x20000000)或者R0=RM(_a)或DM(_a)=R02)绝对地址3)具有更新的后修改模式R0=DM(I3,M1)DM(I2,1)=R14)基址加偏移量寻址R0=DM(M1,I0)如I0=0x20000000,M1=4将0x20000004数据装入R05)循环缓冲区6)反位寻址应用于FFT3.9程序例子x=(a+b)-cR0=DM(_a);R1=DM(_b);R3=R1+R2;R2=DM(_c);R3=R3-R2;

温馨提示

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

评论

0/150

提交评论