嵌入式微处理器第2章指令系统ppt课件

上传人:枫** 文档编号:591889258 上传时间:2024-09-18 格式:PPT 页数:73 大小:526.50KB
返回 下载 相关 举报
嵌入式微处理器第2章指令系统ppt课件_第1页
第1页 / 共73页
嵌入式微处理器第2章指令系统ppt课件_第2页
第2页 / 共73页
嵌入式微处理器第2章指令系统ppt课件_第3页
第3页 / 共73页
嵌入式微处理器第2章指令系统ppt课件_第4页
第4页 / 共73页
嵌入式微处理器第2章指令系统ppt课件_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《嵌入式微处理器第2章指令系统ppt课件》由会员分享,可在线阅读,更多相关《嵌入式微处理器第2章指令系统ppt课件(73页珍藏版)》请在金锄头文库上搜索。

1、第 2章指令系统 计算机体系构造的分类ARM 处置器SHARC处置器Von Neumann 体系构造p数据和指令都存放在存储器里。p计算机从存储器取指令。pCPU与存储器分别的是存储程序计算机。pCPU 存放器主要用于程序计数器PCVon Neumann 体系构造memoryCPUPCaddressdataIRADD r5,r1,r3200200ADD r5,r1,r3Harvard 体系构造 CPUPCdata memoryprogram memoryaddressdataaddressdatavon Neumann 与 Harvard体系构造pHarvard 不可以运用自修正编码pHarv

2、ard 可以同时进展两个存取任务。p多数DSP运用Harvard体系构造 。p更大的存储带宽。p带宽的可预见性更强RISC 与 CISCpComplex instruction set computer (CISC):复杂指令集计算机p多种类型的指令p变长型指令p程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。p优点是控制简单,但计算器各部分的利用率不高,执行速度慢。 pReduced instruction set computer (RISC):精简指令集计算机p种类比较少p管道化的指令p寻址方式也比复杂指令集少 p数据管道是在同一个运用中对象之间快速传送数据的

3、小型一致部件,比信息message传输的方式更块指令集的特点p固定长度与可变长度p寻址方式p操作数的个数p操作数的类型p胜利的体系构造运用广泛。p时钟速度可变;p不同的总线宽度;p不同的缓存规模ARM 版本pARM构造被扩展成为多个版本。p本课将集中在ARM7pARM7是von Neumann构造的pARM9是Harvard构造的。汇编言语p汇编言语指令与翻译成的机器言语指令之间根本是一一对应的关系p根本特点:p一个指令一行;p给内存单元提供名字的标志LABEL,由第一列开场。p指令通常在随后的列开场。p注释以分号开头,分号右边的内容将被汇编程序忽略ARM 汇编言语p相当规范的汇编言语:pLD

4、R r0,r8 ; a commentplabelADD r4,r0,r1ARM 汇编言语例子label1ADR r4,cLDR r0,r4 ; a commentADR r4,dLDR r1,r4SUB r0,r0,r1 ; commentr0r1r2r3r4r5r6r7r8r9r10r11r12r13r14r15 (PC)CPSR310N Z C VARM编程器模型p16个通用存放器,包括PCp一个形状存放器Current. Program Status Register 字节的陈列顺序pARM允许32位长地址,但每个地址访问是一个字节而不是一个字。byte 3 byte 2 byte 1

5、 byte 0byte 0 byte 1 byte 2 byte 3位31位0低序高序word 4word 0word 4word 0位31位0ARM 数据类型p32位字长p分成四个8位的字节pARM地址可是32位长。p地址是以字节来援用的。p可在加电时设置高序或低序。ARM 形状位p第个算术、逻辑或位移运算都会调整CPSR位:pN (negative), Z (zero), C (carry), V (overflow).p例如: p-1= 0xffffffff p1 = 0x1 p-1 + 1 = 0: NZCV = 0110.p0 1 = - 1 : 0x0 0x1 = 0xffffff

6、ff NZCV = 1000p231-1+1 = -231: 0x80000000+0fffffffp 0x7fffffff + 0x1 = 0x80000000 NZCV = 1001.ARM 数据指令p根本方式:pADD r0,r1,r2p把 r1+r2的值存储在r0中p立刻操作数:pADD r0,r1,#2p将 r1+2的值存储在r0中。ARM数据指令pADD, ADC : add (w. carry)pSUB, SBC : subtract (w. carry)pRSB, RSC : reverse subtract (w. carry)pMUL, MLA : multiply (an

7、d accumulate)pAND, ORR, EORpBIC : bit clearpLSL, LSR : logical shift left/rightpASL, ASR : arithmetic shift left/rightpROR : rotate rightpRRX : rotate right extended with C数据操作的不同方法p逻辑位移:p补“0p算术位移:p在右移时以符号位来充填。pRRX 执行的是33位的循环,包括来自在符号位上的CPSR的C位。ARM 比较指令pCMP : 比较pCMN : 负数比较pTST : 按位测试与pTST R0, #0X0f;判

8、别R0的低4位能否为0pTEQ : 按位求反测试(异或) pTEQ R0,R1; 比R0,R1能否相等p这些操作的结果只是去更新CPSR中的NZCV位。ARM 数据传送指令pMOV, MVN :数据非传送p pMOV r0, r1 ; 将r1的内容放入r0p MVN R1,#0xFF; R=0xFFFFF00ARM 存储器访问指令pLDR, LDRH, LDRB: load (half-word, byte)pSTR, STRH, STRB : store (half-word, byte)p寻址方式:p存放器间接寻址: LDR r0,r1p有第二个存放器 : LDR r0,r1,-r2p带常

9、数的: LDR r0,r1,#4p存储器指令不直接访问主存储器地址。p通常由PC计算后给出一个地址。pADR伪操作产生一个要求计算地址的指令:pADR r1,FOO例: C 的赋值语句pC: px = (a + b) - c;p汇编言语:pADR r4,a; get address for apLDR r0,r4; get value of apADR r4,b; get address for b, reusing r4pLDR r1,r4; get value of bpADD r3,r0,r1; compute a+bpADR r4,c; get address for cpLDR r2

10、,r4; get value of cpSUB r3,r3,r2; complete computation of xpADR r4,x; get address for xpSTR r3r4; store value of x例: C 的赋值语句pC:py = a*(b+c);p汇编言语: pADR r4,b ; get address for bpLDR r0,r4 ; get value of bpADR r4,c ; get address for cpLDR r1,r4 ; get value of cpADD r2,r0,r1 ; compute partial resultpAD

11、R r4,a ; get address for apLDR r0,r4 ; get value of apMUL r2,r2,r0 ; compute final value for ypADR r4,y ; get address for ypSTR r2,r4 ; store y例: C 的赋值语句pC:pz = (a R1 SUB R0,R1,R2 ;R1 - R2 - R0立刻立刻寻址址 SUBS R0,R0,#1 ;R0 1 - R0 MOV R0,#0xff00 ;0xff00 - R0存放器存放器间接接寻址址 LDR R1,R2 ;将将R2 中的数中的数值作作为地址,取出此地址

12、,取出此地址中的数地址中的数 据保管在据保管在R1 中。中。 SWP R1,R1,R2;将如中的数将如中的数值作作为地址,取出地址,取出此地址中的此地址中的 数数值与与R1 中的中的值交交换多种寻址方式p基址加偏移量寻址基址寻址pLDR r0,r1,#16p将存储在地址r1+16单元的值装入r0p自动变址寻址:pLDR r0,r1,#16!p将16与r1的值相加,然后把这个值作为地址。p后变址寻址pLDR r0,r1,#16p将r1给定地址的存储单元中的值装入r0,然后把r1的值加16并将新值赋给r1.ARM 控制流pB指令Branch operationpB #100p在PC的值上加400p

13、任何分支指令都可有条件地执行。是ARM中改动控制流的根本机制。分支的目的地址称为分支目的。分支是与程序计数器相关的,分支指明了从当前程序计数器到分支目的的偏移量,这个偏移量的单位是字。由于ARM是对字节定址的,所以要把偏移量乘4。例: if 语句在ARM中的实现pC: pif (a b) x = 5; y = c + d; else x = c - d;p汇编:p ; compute and test conditionpADR r4,a ; get address for apLDR r0,r4 ; get value of apADR r4,b ; get address for bpLD

14、R r1,r4 ; get value for bpCMP r0,r1 ; compare a = b, branch to false blockp ; true blockpMOV r0,#5 ; generate value for xpADR r4,x ; get address for xpSTR r0,r4 ; store xpADR r4,c ; get address for cIf 语句LDR r0,r4 ; get value of cADR r4,d ; get address for dLDR r1,r4 ; get value of dADD r0,r0,r1 ; c

15、ompute yADR r4,y ; get address for ySTR r0,r4 ; store yB after ; branch around false block; false blockfblock ADR r4,c ; get address for cLDR r0,r4 ; get value of cADR r4,d ; get address for dLDR r1,r4 ; get value for dSUB r0,r0,r1 ; compute c-dADR r4,x ; get address for xSTR r0,r4 ; store value of

16、xafter .例:条件执行p运用判别来控制执行那条指令:p; true block, 条件代码由CMP更新p; no need for “BGE fblock and “B afterpMOVLT r0,#5 ; generate value for xpADRLT r4,x ; get address for xpSTRLT r0,r4 ; store xpADRLT r4,c ; get address for cpLDRLT r0,r4 ; get value of cpADRLT r4,d ; get address for dpLDRLT r1,r4 ; get value of

17、dpADDLT r0,r0,r1 ; compute ypADRLT r4,y ; get address for ypSTRLT r0,r4 ; store y例:条件执行; false blockADRGE r4,c ; get address for cLDRGE r0,r4 ; get value of cADRGE r4,d ; get address for dLDRGE r1,r4 ; get value for dSUBGE r0,r0,r1 ; compute a-bADRGE r4,x ; get address for xSTRGE r0,r4 ; store value

18、 of x条件条件执执行相行相对对于于较较少的条件是最好的。少的条件是最好的。例:用于多分支选择的switch语句 pC: pswitch (test) case 0: break;p case 1: break; p汇编:pADR r2,test ; get address for testpLDR r0,r2 ; load value for testpADR r1,switchtab ; load address for switch tablepLDR r15,r1,r0,LSL #2 ; index switch tablepswitchtab DCD case0p DCD case

19、1p.pLDR:p把r0移2位把偏移量转换成为字节地址p把存储器r1+r0的值装入PC r15中例:FIR 滤波器pC (FIR)滤波器:pfor (i=0, f=0; iN; i+)pf = f + ci*xi; /* xi: 周期性的采样*/p汇编言语p; 循环初始代码pMOV r0,#0 ; use r0 for IpMOV r8,#0 ; use separate index for arrayspADR r2,N ; get address for NpLDR r1,r2 ; get value of NpMOV r2,#0 ; use r2 for fpADR r3,c ; loa

20、d r3 with base of cpADR r5,x ; load r5 with base of x例:FIR 滤波器; 循环代码循环代码loop LDR r4,r3,r8 ; get ciLDR r6,r5,r8 ; get xiMUL r4,r4,r6 ; compute ci*xiADD r2,r2,r4 ; add into running sumADD r8,r8,#4 ; add 1 word offset to array indexADD r0,r0,#1 ; add 1 to iCMP r0,r1 ; exit?BLT loop ; if i N, continueAR

21、M 子程序的链接p分支和链接指令:pBL foop把当前的PC值存入 r14.p从一个子程序前往:pMOV r15,r14嵌套的子程序调用p嵌套/递归pC:pvoid f1(int a) f2(a); p汇编言语:pf1LDR r0,r13 ; load arg into r0 from stackp; r13 is stack pointerp ; call f2()pSTR r13!,r14 ; store f1s return adrspSTR r13!,r0 ; store arg to f2 on stackpBL f2 ; branch and link to f2p ; retu

22、rn from f1()pSUB r13,#4 ; pop f2s arg off stackpLDR r13!,r15 ; restore reg and returnSHARC 编程模型SHARC 汇编言语SHARC 存储器的组织SHARC 数据操作SHARC 控制流程SHARC处置器SHARC编程模型p存放器文件:pR0-R15 (对浮点运算的称号为F0-F15)p一切的这些存放器都是40位长p支持单精度浮点格式、32 位定点格式和提高精度的40 位扩展格式p形状存放器pASTAT:算术形状。记录ALU,移位器和乘法器形状pSTKY: sticky.是形状存放器中某些们的粘性值,需求指令

23、才干去除pMODE 1: mode 1.控制定点运算的饱和算术操作和浮点运算的舍入方式p循环存放器。p数据地址生成存放器。p中断存放器。SHARC 汇编言语p算术符号由分号终了,注释由感慨号开场:pR1=DM(M0,I0), R2=PM(M8,I8); ! commentplabel: R3=R1+R2;数据存储器的存取程序存储器的存取SHARC 数据类型p32位IEEE单精度浮点。p40位IEEE扩展精度浮点。p32位整型。p存储器内部是用32位地址的32位字出息展组织。p一条指令为48位。pALU支持饱和算术运算。(ALUSAT位为MODE1)SHARC 构造p修正的哈佛构造p程序存储存储

24、器可以用来存放一些数据。p存放器文件联接到:p乘法器p移位器pALU乘法器p定点运算可累计到MRmodify register存放器或被写入存放器文件。定点的结果为80位。p浮点的结果总是送到存放器文件中。p形状位:负、下溢、上溢、无效、定点、浮点下溢、浮点无效。ALU/移位器形状标志pALU:p零AZ 、溢出AV、负AN、定点进位AC、输入符号、浮点无效AI、最新运转为浮点运算、比较累加存放器、浮点下溢/上溢、定点溢出、浮点无效等。p移位器p零SZ 、溢出SV 、符号SS标志操作p一切的ALU操作都要设置 ASTAT中的 AZ (zero), AN (negative), AV (overf

25、low), AC (fixed-point carry), AI (floating-point invalid) 位。pSTKY是算术逻辑单元中的某些位的粘性版本。例:数据操作p定点-1 + 1 = 0:pAZ = 1, AU = 0浮点下溢, AN = 0, AV = 0, AC = 1, AI = 0.pSTKY的AOS位 (fixed point underflow)未设置。p定点 -2*3:pMN = 1, MV = 0, MU = 1, MI = 0.p4个STKY位都没有设置:p MOS (mult. fixed-point overflow), MVS (floating-po

26、int overflow), MUS (mult. floating point underflow), MIS (mult. floating-point invalid operation)p 0x7fffffff左移3位: SZ=0,SV=1,SS=0.乘法计算p可进展某些并行的计算:p加减二重计算;p定点乘/累加与加、减、计算平均值;p浮点乘与ALU操作;p乘与加减二重计算。p乘法器的操作数从R0-R7,ALU的操作数从R8-R15.SHARC 存取p存取构造:无直接存储器操作。p两个数据地址生成器(DAGs):p程序存储器p数据存储器p必需设置 DAG 存放器来控制存取操作。DAG1

27、 存放器I0I1I2I3I4I5I6I7M0M1M2M3M4M5M6M7L0L1L2L3L4L5L6L7B0B1B2B3B4B5B6B7每个每个DAG有四种存放器:有四种存放器: Index (I), Modify (M), Base (B) Length (L)数据地址生成器DAGp提供索引, 余数、位反转变址寻址 pMODE1的位决议是主存放器还是备用存放器任务。根本的寻址方式p立刻值:pR0 = DM(0x20000000);p直接装入:pR0 = DM(_a); ! Loads contents of _ap !_a是变量a的地址p直接存储:pDM(_a)= R0; ! Stores

28、R0 at _a具有更新的后修正方式pI 存放器指定基址。pM 存放器:直接保管变址数。pR0 = DM(I3,M3) ! LoadpDM(I2,1) = R1 ! StorepI 存放器被变址数更新p基址加偏移量:pR0 = DM(M1,I0) ! Load from M1+I0p循环缓冲:I 指针和存储。M 为前移地址的增量值。L循环缓冲器的数量。M循环缓冲器的基址程序存储器中的数据p数据可以被存储在程序存储器中,每个周期可读两次:pF0 = DM(M0,I0), F1 = PM(M8,I9);p编译器可以使程序员控制存储到那个存储器。例:C赋值pC:px = (a + b) - c;p汇

29、编:pR0 = DM(_a);! Load apR1 = DM(_b); ! Load bpR3 = R0 + R1;pR2 = DM(_c); ! Load cpR3 = R3-R2;pDM(_x) = R3; ! Store result in x例:C赋值pC:py = a*(b+c);p汇编:pR1 = DM(_b); ! Load bpR2 = DM(_c); ! Load cpR2 = R1 + R2;pR0 = DM(_a); ! Load apR2 = R2*R0;pDM(_y) = R2; ! Store result in y例:C赋值p可用指针来缩短代码的长度:p! Lo

30、ad b, cpR2=DM(I1,M5), R1=PM(I8,M13);pR0 = R2+R1, R12=DM(I0,M5);pR6 = R12*R0(SSI);pDM(I0,M5)=R8; ! Store in y例:C赋值pC:pz = (a b) x = 5; y = c + d; pelse x = c - d;p汇编:p! TestpR0 = DM(_a);pR1 = DM(_b);pCOMP(R1,R0); ! ComparepIF GE JUMP fblock;C中的 if语句! True blocktblock: R0 = 5; ! Get value for xDM(_x)

31、= R0;R0 = DM(_c); R1 = DM(_d);R1 = R0+R1;DM(_y)=R1;JUMP other; ! Skip false block! False blockfblock: R0 = DM(_c);R1 = DM(_d);R1 = R0-R1;DM(_x) = R1;other: ! Code after if特别的if语句的实现pC:pif (ab)p y = c-d;p elsep y = c+d;p用并行机制来提高速度-计算两种情况,然后选一个保管。特别的if语句的实现! Load valuesR1=DM(_a); R8=DM(_b);R2=DM(_c);

32、R4=DM(_d);! Compute both sum and differenceR12 = r2+r4, r0 = r2-r4;! Choose which one to savecomp(r8,r1);if ge r0=r12;dm(_y) = r0 ! Write to yDO UNTIL 循环DO UNTIL 指令提供有效的循环:LCNTR=30, DO label UNTIL LCE;R0=DM(I0,M0), F2=PM(I8,M8);R1=R0-R15;label:F4=F2+F3;循环长度循环中的最后一条指令终止条件例:FIR滤波器pC:pfor (i=0, f=0; iN

33、; i+)pf = f + ci*xi;p! setuppI0=_a; I8=_b; ! a0 (DAG1), b0 (DAG2)pM0=1; M8=1 ! Set up incrementsp! Loop bodypLCNTR=N, DO loopend UNTIL LCE;p! Use postincrement modepR1=DM(I0,M0), R2=PM(I8,M8);pR8=R1*R2;ploopend: R12=R12+R8;优化FIR滤波器代码I4=_a; I12=_b;R4 = R4 xor R4, R1=DM(I4,M6), R2=PM(I12,M14);MR0F = R

34、4, MODIFY(I7,M7);! Start loopLCNTR=20, DO(PC,loop) UNTIL LCE;loop: MR0F=MR0F+R2*R1 (SSI), R1=DM(I4,M6), R2=PM(I12,M14);! Loop cleanupR0=MR0F;SHARC 子程序调用p作用CALL 指令:pCALL foo;p绝对地址寻址,间接寻址,相对PC寻址方式。p运用RTS前往指令。PC堆栈pPC栈: 30区X24条指令。p子程序的前往,中断业务程序,循环保管在PC栈内。例:C函数pC:pvoid f1(int a) f2(a); pAssembler:pf1:R0=DM(I1,-1); ! Load arg into R0pDM(I1,M1)=R0; ! Push f2s argpCALL f2;pMODIFY(I1,-1); ! Pop elementpRTS;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号