第3章thumb2指令系统-金锄头文库-凯时尊龙官网

上传人:m****1 文档编号:582955230 上传时间:2024-08-29 格式:ppt 页数:47 大小:818kb
下载 举报
第3章thumb2指令系统_第1页
第1页 / 共47页
第3章thumb2指令系统_第2页
第2页 / 共47页
第3章thumb2指令系统_第3页
第3页 / 共47页
第3章thumb2指令系统_第4页
第4页 / 共47页
第3章thumb2指令系统_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《第3章thumb2指令系统》由会员分享,可在线阅读,更多相关《第3章thumb2指令系统(47页珍藏版)》请在金锄头文库上搜索。

1、thumb2指令系统(thumb2指令体系架构)精选ppt主要内容主要内容1.概述概述2.thumb-2指令指令集集分类分类3.统一统一的的汇编语言汇编语言4.cortex-m3常用常用的的thumb-2指令集指令集5.小结小结精选ppt1.概述对于确定的微处理器而言,编写紧凑的代对于确定的微处理器而言,编写紧凑的代码以降低消耗显得至关重要。码以降低消耗显得至关重要。通常,存储器的大小是固定的,而产品的功能特性却各异,选择恰当的处理器恰当的处理器并精精心调整代码心调整代码是明智的。精选ppt1.概述(续)对于arm体系架构的来说:微处理器有两种工作状态:arm工作状态工作状态thumb工作状态

2、工作状态thumb指令集是添加到arm的标准risc指令集之上的独立指令集;thumb指令集包括了基本的加法、减法、循环移位以及跳转等大约36条16位指令;thumb指令集作为arm指令集的压缩方案,简洁、有效,应用广泛并得到很好的支持,通过thumb指令替换arm指令,可以将某些代码的规模减小大约20%到30%。精选ppt1.概述(续)对于arm体系架构的来说(续):但是,有限的thumb指令仅对基本的算术和逻辑操作有用:thumb状态状态下,处理器将仅可使用有限数量下,处理器将仅可使用有限数量的寄存器,的寄存器,r8-r12的使用受到限制,的使用受到限制,无法完成诸如处理中断、长跳转、原子

3、存储无法完成诸如处理中断、长跳转、原子存储器器(atomic memory)操作,或协处理器操作等操作,或协处理器操作等等复杂任务,等复杂任务,也无法像也无法像arm模式那样进行条件执行和移位模式那样进行条件执行和移位或循环移位等操作或循环移位等操作。thumb代码和标准arm代码不能混杂使用,必须显式地显式地在两种工作状态间进行切换,这迫使程序员必须将所有的16位代码与32位代码分开并隔离到独立的模块中。精选ppt1.概述(续)对于arm体系架构的来说(续):其次,两种工作状态之间来回切换需要消耗时间,导致代码运行速度降低大约15%,不仅要增加代码,而且还需要几十个前导(preamble)以

4、及后同步指令(postamble)来组织指针并清空cpu的流水线。虽然thumb指令能够实现较高密度的代码,缓存使用效率更高,但实现arm指令代码的功能往往需要较多的thumb指令代码,相比较而言,arm指令使用起来更灵活。精选ppt1.概述(续)thumb-2并不是thumb的升级它是另起炉灶,继承并集成了传统的thumb指令集和arm指令集的各自优点,可以完全代替thumb和原先的arm指令集,是thumb指令集和arm指令集的一个超集。thumb-2指令集体系架构,无需处理器进行工作状态的显示切换,就可运行16位与32位混合代码。与arm体系架构相比,速度提高大约15%到20%。精选pp

5、t1.概述(续)cortex-m3处理器使用的指令集是thumb-2指令集的子集,它它的的(指令)(指令)工作状态只工作状态只有有一个,那就是一个,那就是thumb-2状态状态。cortex-m3处理器的两种工作状态:thumb-2状态状态调试状态调试状态精选ppt2. thumb-2指令指令集集分类分类按照指令的长度分类,thumb-2指令集可分为两种:(1)16-bit指令集;指令集;(2)32-bit指令集。指令集。精选ppt2. thumb-2指令指令集集分类分类(续)(续)按功能和寻址方式分类按功能和寻址方式分类(1)数据传送指令数据传送指令(2)load/store指令指令(3)批

6、量)批量load/store指令指令(4)算术四则运算指令算术四则运算指令(5)逻辑操作指令逻辑操作指令(6)移位和循环指令移位和循环指令(7)符号扩展指令符号扩展指令(8)字节调序指令字节调序指令rev, revh,rev16,revsh(9)位域处理指令位域处理指令(10)子程序调用与无条件转移指令子程序调用与无条件转移指令(11)隔离隔离(barrier)指令指令(12)饱和运算指令饱和运算指令(13) ifthen指令指令(15)比较跳转指令等比较跳转指令等精选ppt2. thumb-2指令指令集集分类分类(续)(续)基于thumb-2指令体系架构编写的代码在执行过程中,处理器不存在a

7、rm工作状态和thumb工作状态之间的切换。那么,处理器必须能够自动识别当前指令长度,是16-bit还是32-bit,以正确地执行thumb-2指令代码,它是如何识别呢?精选ppt2. thumb-2指令指令集集分类分类(续)(续)指令长度的确定指令长度的确定pc寄存器指向的半字中,bits决定该半字是16-bit指令,还是属于32-bit指令的一部分。图3-1说明了bits确定指令长度的功能。精选ppt2. thumb-2指令指令集集分类分类(续)(续)不同指令长度的bits编码格式pc寄存器所指向半字的bits的编码格式决定了cpu所处理指令的长度。thumb2指令集空间被划分为16bit

8、和32bit两个子集。其中,x原则上可以为“0”、“1”任意值,但x的取值不能使得0b111xx=0b11100,以及0bxxxxx=0b111xx或者0bxxxxx=0b11100。halfword1 bits功能功能0b1110016-bit无条件分支thumb-2指令,在所有thumb-2体系结构中定义0b111xx(xx00)32-bitthumb-2指令,在thumb-2中定义0bxxxxx(xxxxx111xx)16-bitthumb-2指令精选ppt3.统一的汇编语言arm指令集体系架构下,指令集体系架构下,arm指令与thumb指令分属不同的程序模块,由不同的汇编器对其分别进行

9、汇编。thumb-2指令集体系架构下,指令集体系架构下, 16bit指令与32bit指令可以在同一程序模块出现,并由同一汇编器对其进行汇编。精选ppttoolchain flow with arm7r13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)cpsrr0r1r2r3r4r5r6r7user/systemregister fileassembl

10、erarm c/c compilerthumb c/c compilerc/c filesasmarm7tdmic/c filesasmstate change eg. isr entry/exituseroptimizedcode which operates on the visible register filenb: most compilers automatically provide the assembler code stubs shown here, allowing majority of code in high level c languagearm corte

11、x-m3 toolchain flowuser/systemregister fileunified assemblerthumb(2)c/c compilerc/c filesasm(ual)unifiedassemblerlanguagecode which operates on the visible register fileuser/systemregister filearm cortex-m3no state change:automated by nvicr13 (psp)r14 (lr)spsrr8r9r10r11r12r13(msp)r14 (lr)r15 (pc)c

12、psrr0r1r2r3r4r5r6r7(hand optimized code / previously written 32-bit arm assembler files)the combination of a conditional instruction sequence it (if/then) with the same visible register file set as arm7 enabled the creation of a unified assembler which allows thumb-2 to mimic 32-bit arm instructions

13、4.cortexm3常用的thumb2指令集(1)数据传送指令cortexm3中的数据传送类型包括:两个寄存器间传送数据两个寄存器间传送数据寄存器与特殊功能寄存器间传送数据寄存器与特殊功能寄存器间传送数据把一个立即数加载到寄存器把一个立即数加载到寄存器指令指令功能描述功能描述mov,#将8位立即数传送到目标寄存器mov,将低寄存器值传送给低目标寄存器mov,将高或低寄存器值传送给高或低目标寄存器mvn,将寄存器值取反后传送给目标寄存器movs.w,#将12位立即数传送到寄存器中movs.w,将移位后的寄存器值传送到寄存器中movt.w,#将16位立即数传送到寄存器的高半字31:16中movw.

14、w,#将16位立即数传送到寄存器的低半字15:0中,并将高半字31:16清零mrs,将状态传送到寄存器中msr_,传送到状态寄存器中精选ppt4.cortexm3常用的thumb2指令集(续)(1)数据传送指令(续)mrs/msr 用用于于特特权权级级别别条条件件下下访访问问特特殊殊功功能能寄寄存器存器。指令语法如下:mrs,; 加载特殊功能寄存器的值到加载特殊功能寄存器的值到rnmsr,; 存储存储rn 的值到特殊功能寄存器的值到特殊功能寄存器其中,sreg可以是下表中的一个。精选ppt4.cortexm3常用的thumb2指令集(续)(1)数据传送指令(续)mrs/msr 指令中的指令中的

15、sreg寄存器:寄存器:符号符号功能功能ipsr当前服务中断号寄存器epsr执行状态寄存器(读回来的总是0)。它里面含t位,在cm3中t位必须是1。apsr上条指令结果的标志iepsripsr epsriapsripsr apsreapsrepsr apsrpsrxpsr=apsr epsr ipsrmsp主堆栈指针psp进程堆栈指针primask常规异常屏蔽寄存器basepri常规异常的优先级阈值寄存器basepri_max等同basepri,但是施加了写的限制:新的优先级比较比旧的高(更小的数)faultmaskfault屏蔽寄存器(同时还包含了primask的功能,因为faults的优先

16、级更高)control控制寄存器(堆栈选择,特权等级)精选ppt4.cortexm3常用的thumb2指令集(续)(2)load/store指令指令指令功能描述功能描述ldrbrd,rn,#offset从地址rn offset处读取一个字节到rdldrhrd,rn,#offset从地址rn offset处读取一个半字到rdldrrd,rn,#offset从地址rn offset处读取一个字到rdldrdrd1,rd2,rn,#offset从地址rn offset处读取一个双字(64位整数)到rd1(低32位)和rd2(高32位)中。strbrd,rn,#offset把rd中的低字节存储到地址r

17、n offset处strhrd,rn,#offset把rd中的低半字存储到地址rn offset处strrd,rn,#offset把rd中的低字存储到地址rn offset处ldrdrd1,rd2,rn,#offset把rd1(低32位)和rd2(高32位)表达的双字存储到地址rn offset处精选ppt4.cortexm3常用的thumb2指令集(续)(2)load/store指令(续)预索引预索引 (preindexing) :ldr.w r0, r1, #20! ;预索引该指令先先把地址把地址r1 offset 处的值加载到处的值加载到r0,然后,r1 = r1 20;这里的“!”就

18、是指在传送前更新基址寄存器r1的值。即: 步骤步骤 : r1 = r1 20 , 步骤步骤 : r0 r1 精选ppt4.cortexm3常用的thumb2指令集(续)(2)load/store指令指令(续)(续)预索引预索引 (preindexing) :指令指令功能描述功能描述ldr.wrd,rn,#offset!ldrb.wrd,rn,#offset!ldrh.wrd,rn,#offset!字/字节/半字/双字的带预索引加载(不做带符号扩展,没有用到的高位全清0)ldrd.wrd1,rd2,rn,#offset!ldrsb.wrd,rn,#offset!ldrsh.wrd,rn,#of

19、fset!字节/半字的带预索引加载,并且在加载后执行带符号扩展成32位整数str.wrd,rn,#offset!strb.wrd,rn,#offset!strh.wrd,rn,#offset!strd.wrd1,rd2,rn,#offset!字/字节/半字/双字的带预索引存储精选ppt4.cortexm3常用的thumb2指令集(续)(2)load/store指令指令(续(续)后索引后索引 (postindexing):str.wr0,r1,#-12;后索引该指令是把r0的值存储到地址r1处。在存储完毕后,r1=r1 (12)。注意,r1后面是没有后面是没有“!”的的。精选ppt4.corte

20、xm3常用的thumb2指令集(续)(2)load/store指令指令(续(续)后索引后索引 (postindexing):指令指令功能描述功能描述ldr.wrd,rn,#offsetldrb.wrd,rn,#offsetldrh.wrd,rn,#offsetldrd.wrd1,rd2,rn,#offset字/字节/半字/双字的带后索引加载(不做带符号扩展,没有用到的高位全清0)ldrsb.wrd,rn,#offsetldrsh.wrd,rn,#offset字节/半字的带后索引加载,并且在加载后执行带符号扩展成32位整数str.wrd,rn,#offsetstrb.wrd,rn,#offset

21、strh.wrd,rn,#offsetstrd.wrd1,rd2,rn,#offset字/字节/半字/双字的带后索引存储精选ppt4.cortexm3常用的thumb2指令集(续)(3)批量数据load/store指令指令指令功能描述功能描述ldmiard!,寄存器列表从rd处读取多个字。每读一个字后rd自增一次,16位宽度stmiard!,寄存器列表存储多个字到rd处。每存一个字后rd自增一次,16位宽度ldmia.wrd!,寄存器列表从rd处读取多个字。每读一个字后rd自增一次,32位宽度ldmdb.wrd!,寄存器列表从rd处读取多个字。每读一个字前rd自减一次,32位宽度stmia.w

22、rd!,寄存器列表存储多个字到rd处。每存一个字后rd自增一次,32位宽度stmdb.wrd!,寄存器列表存储多个字到rd处。每存一个字前rd自减一次,32位宽度精选ppt4.cortexm3常用的thumb2指令集(续)(3)批量数据load/store指令(续)rd后面的“!”表示在每次访问前(before)或访问后(after),要自增(increment)或自减(decrement)基址寄存器rd的值,增/减单位:1个字(4字节)或半字(2字节)。stmdb sp!, r0-r3, lr 等效于等效于 push r0-r3, lrldmia sp!, r0-r3, pc 等效于等效于

23、pop r0-r3, pc例例2: 记记r8=0x8000,则下面两条指令:,则下面两条指令:stmia.w r8!, r0-r3 ;r8值变为0x8010,每存一次增一次,先存储后自增stmdb.w r8, r0-r3 ;r8值的“一个内部复本”先自减后存储,但是r8的值不变精选ppt4.cortexm3常用的thumb2指令集(续)(4)算术四则运算指令指令指令功能描述功能描述addrd,rn,rm;rd=rn rmaddrd,rm;rd =rmaddrd,#imm;rd =imm常规加法imm的范围是im8(16位指令)或im12(32位指令)adcrd,rn,rm;rd=rn rm c

24、adcrd,rm;rd =rm cadcrd,#imm;rd =imm c带进位的加法imm的范围是im8(16位指令)或im12(32位指令)addwrd,#imm12;rd =imm12带12位立即数的常规加法subrd,rn;rd-=rnsubrd,rn,#imm3;rd=rn-imm3subrd,#imm8;rd-=imm8subrd,rn,rm;rd=rm-rm常规减法sbcrd,rm;rd-=rm csbc.wrd,rn,#imm12;rd=rn-imm12-csbc.wrd,rn,rm;rd=rn-rm-c带借位的减法rsb.wrd,rn,#imm12;rd=imm12-rnrs

25、b.wrd,rn,rm;rd=rm-rn反向减法mulrd,rm;rd*=rmmul.wrd,rn,rm;rd=rn*rm常规乘法mlard,rm,rn,ra;rd=ra rm*rnmlsrd,rm,rn,ra;rd=ra-rm*rn乘加与乘减(译者添加)udivrd,rn,rm;rd=rn/rm(无符号除法)sdivrd,rn,rm;rd=rn/rm(带符号除法)硬件支持的除法,余数被丢弃smullrl,rh,rm,rn;rh:rl=rm*rnsmlalrl,rh,rm,rn;rh:rl =rm*rn带符号的64位乘法umullrl,rh,rm,rn;rh:rl=rm*rnsmlalrl,r

26、h,rm,rn;rh:rl =rm*rn无符号的64位乘法精选ppt4.cortexm3常用的thumb2指令集(续)(4)算术四则运算指令算术四则运算指令(续)(续)例例3 3:以加法为例说明16bit、32bit的算术四则运算指令:add r0, r1 ; r0 = r1add r0, #0x12 ; r0 = 12add.w r0, r1, r2 ; r0 = r1 r2虽然助记符都是add,但是二进制机器码是不同的。当使用16位加法时,会自动更新apsr中的标志位。然而,在使用了“.w”显式显式指定了32位指令后,就可以通过“s”后缀后缀控制对apsr的更新:add.w r0, r

27、1, r2 ; 不更新标志位不更新标志位adds.w r0, r1, r2 ; 更新标志更新标志位位精选ppt4.cortexm3常用的thumb2指令集(续)(4)算术四则运算指令算术四则运算指令(续)(续)udivrd,rn,rm;rd=rn/rm(无符号除法)sdivrd,rn,rm;rd=rn/rm(带符号除法)l为了为了捕捉被零除的非法操作捕捉被零除的非法操作,可以在nvic的配置控制寄存器中置位divbzero位。如果出现了被零除的情况,将会引发一个用法fault异常。l如果没有任何措施,rd将在除数为零时被清零。精选ppt4.cortexm3常用的thumb2指令集(续)(5)逻

28、辑操作指令指令指令功能描述功能描述andrd,rn;rd&=rnand.wrd,rn,#imm12;rd=rn&imm12and.wrd,rm,rn;rd=rm&rn按位与orrrd,rn;rd|=rnorr.wrd,rn,#imm12;rd=rn|imm12orr.wrd,rm,rn;rd=rm|rn按位或bicrd,rn;rd&=rnbic.wrd,rn,#imm12;rd=rn&imm12bic.wrd,rm,rn;rd=rm&rn位清零orn.wrd,rn,#imm12;rd=rn|imm12orn.wrd,rm,rn;rd=rm|rn按位或反码eorrd,rn;rd=rneor.wr

29、d,rn,#imm12;rd=rnimm12eor.wrd,rm,rn;rd=rmrn(按位)异或,异或总是按位的精选ppt4.cortexm3常用的thumb2指令集(续)(6)移位和循环指令指令指令功能描述功能描述lslrd,rn,#imm5;rd=rnimm5lslrd,rn;rd=rnlsl.wrd,rm,rn;rd=rmimm5lsrrd,rn;rd=rnlsr.wrd,rm,rn;rd=rmrn逻辑右移asrrd,rn,#imm5;rd=rnimm5asrrd,rn;rd=rnasr.wrd,rm,rn;rd=rmrn算术右移rorrd,rn;rd=rnror.wrd,rm,rn;

30、rd=rmrn循环右移rrx.wrd,rn;rd=(rn1) (c1) (c31);c=tmpbit带进位的右移一格亦可写作rrxsrd。此时,rd也要担当rn的角色译注l如果在移位和循环指令上加上“s”后缀,这些指令会更新进位位c。l如果是16位thumb-2指令,则总是更新c的。精选ppt4.cortexm3常用的thumb2指令集(续)带进位的循环右移精选ppt4.cortexm3常用的thumb2指令集(续)(7)符号扩展指令二进制补码表示法中,最高位是符号位。把把一个一个8 位或位或16 位负数扩展成位负数扩展成32 位位时时:对于负数,必须把所有高位全填1,其数值不变;至于正数或无

31、符号数,则只需简单地把高位清0。指令指令功能描述功能描述sxtbrd,rm;rd=rm的带符号扩展把带符号字节整数扩展到32位sxthrd,rm;rd=rm的带符号扩展把带符号半字整数扩展到32位精选ppt4.cortexm3常用的thumb2指令集(续)(8)字节调序指令指令指令功能描述功能描述rev.wrd,rn在字中调整字节序rev16.wrd,rn在高低半字中调整字节序revsh.w在低半字中调整字节序,并做带符号扩展精选ppt4.cortexm3常用的thumb2指令集(续)(8)字节调序指令(续)指令指令功能描述功能描述rev.wrd,rn在字中调整字节序rev16.wrd,rn在

32、高低半字中调整字节序revsh.w在低半字中调整字节序,并做带符号扩展revh:对低半字调序;revsh:基于revh,并进行符号扩展精选ppt4.cortexm3常用的thumb2指令集(续)(8)字节调序指令(续)例例4:记r0=0x12345678,在执行下列指定后:revr1,r0revhr2,r0rev16r3,r0则r1=0x78563412,r2=0x12347856,r3=0x34127856。revsh在revh的基础上,还把转换后的半字做带符号扩展。例例5:记r0=0x33448899,则revshr1,r0执行后,r1=0xffff9988。精选ppt4.cortexm3

33、常用的thumb2指令集(续)(9)位域处理指令例例6:(1)bfc(位域清零)指令(位域清零)指令ldrr0,=0x1234ffffbfcr0,#4,#10执行完后,r0=0x1234c00f指令指令功能描述功能描述bfc.wrd,#,#位域清零bfi.wrd,rn,#,#将一个寄存器的位域插入另一个寄存器中clz.wrd,rn计算前导0的数目rbit.wrd,rn按位旋转180度sbfx.wrd,rn,#,#拷贝位域,并带符号扩展到32位ubfx.wrd,rn,#,#拷贝位域,并无符号扩展到32位bfc.w rd, #lsb, #widthlsb 为位域的末尾width 指定为段宽度, 在

34、lsb和它的左边(更高有效位)精选ppt4.cortexm3常用的thumb2指令集(续)(9)位域处理指令(续)例例6:(续):(续)(2)bfi(位域位域插入指令插入指令)ldrr0,=0x12345678ldrr1,=0xaabbccddbfi.wr1,r0,#8,#16则执行后,r1=0xaa5678dd( 3) rbit指指 令令 ,记r1=0xb4e10c23(二进制数值为1011,0100,1110,0001,0000,1100,0010,0011),指令rbit.wr0,r1执行后,则r0=0xc430872d(二进制数值为1100,0100,0011,0000,1000,01

35、11,0010,1101)。(4)ubfx/sbfx ldrr0,=0x5678abcdubfx.w r1, r0, #12,#16 ;r0=0x0000678a。类似地,sbfx也抽取任意的位域,但是以带符号的方式进行扩展。ldrr0,=0x5678abcdsbfx.wr1,r0,#8,#4;r0=0xfffffffb指令指令功能描述功能描述bfc.wrd,#,#位域清零bfi.wrd,rn,#,#将一个寄存器的位域插入另一个寄存器中clz.wrd,rn计算前导0的数目rbit.wrd,rn按位旋转180度sbfx.w rd, rn, #,#拷贝位域,并带符号扩展到32位ubfx.w rd,

36、 rn, #,#拷贝位域,并无符号扩展到32位精选ppt4.cortexm3常用的thumb2指令集(续)(10)子程序调用与无条件转移指令b,bl,blx,bxmov、ldr指令实现程序转移主要指令格式有:blabel;转移到label处对应的地址bxreg;转移到由寄存器reg给出的地址bllabel;转移到label处对应的地址,并且把转移前的下条指令地址保存到lrblxreg;转移到由寄存器reg给出的地址,并且把转移前的下条指令地址保存到lr。movpc,r0;转移地址由r0给出ldrpc,r0;转移地址存储在r0所指向的存储器中pop,pc;把返回地址以弹出堆栈的风格送给pc,从而

37、实现转移ldmiasp!,pc;pop的另一种等效写法精选ppt4.cortexm3常用的thumb2指令集(续)(11)程序状态寄存器标志位的更新指令16位算术逻辑指令32位带s后缀的算术逻辑指令比较指令(如,cmp/cmn)和测试指令(如tst/teq)直接写psr/apsr(msr指令)上述指令可以更改状态寄存器精选ppt4.cortexm3常用的thumb2指令集(续)(12)隔离(barrier)指令针对结构比较复杂的存储器系统流水线作业和写缓冲,cortex-m3引进了隔离指令,以避免系统可能发生紊乱现象(racecondition)。指令指令功能描述功能描述dmb数据存储器隔离。

38、dmb指令保证:仅当所有在它前面的存储器访问都执行完毕后,才提交(commit)在它后面的存储器访问动作。dsb数据同步隔离。比dmb严格:仅当所有在它前面的存储器访问都执行完毕后,才执行它在后面的指令。isb指令同步隔离。最严格:它会清洗流水线,以保证所有它前面的指令都执行完毕之后,才执行它后面的指令。精选ppt4.cortexm3常用的thumb2指令集(续)(13)饱和运算指令cortex-m3中的饱和运算指令分为两种:一种是带符号饱带符号饱和运算和运算;另一种是无符号饱和运算无符号饱和运算。饱和运算多用于信号处理。当信号被放大后,有可能使它的幅值超出允许输出的范围。如果简单地清除msb

39、,则常常会严重破坏信号的波形,而饱和运算则只是使信号产生削顶失真。饱饱和和运运算算的的结结果果可可以以用用于于更更新新应应用用程程序序状状态态寄寄存存器器apsr中中q 标志。标志。q 标志在写入后可以通过写标志在写入后可以通过写apsr清清0。rn 存存储储“放放大大后后的的信信号号(32 位位带带符符号号整整数数)” ;rd 存存储储饱饱和和运运算算的的结结果果;#imm5 用用于于指指定定饱饱和和边边界界该由多少位的带符号整数来表达允许的范围,取值范围是1-32。指令名指令名功能描述功能描述ssat.wrd,#imm5,rn,shift以带符号数的边界进行饱和运算(交流)usat.wrd

40、,#imm5,rn,shift以无符号数的边界进行饱和运算(带纹波的直流)精选ppt饱和运算例无符号数饱和运算 带符号饱和运算 精选ppt4.cortexm3常用的thumb2指令集(续)(14)ifthen(it)指令ifthen(it)指令围起一个块,里面最多有4条指令,它里面的指令可以条件执行。it已经带了一个“t”,因此还可以最多再带3个“t”或者“e”。并且对t和e的顺序没有要求。其中t对应条件成立时执行的语句,e对应条件不成立时执行的语句。在ifthen块中的指令必须加上条件后缀,且t对应的指令必须使用和it指令中相同的条件,e对应的指令必须使用和it指令中相反的条件。it的使用形

41、式总结如下:it ;围起1条指令的ifthen块it ;围起2条指令的ifthen块it ;围起3条指令的ifthen块it ;围起4条指令的ifthen块其中,的取值可以是“t”或者“e”。而为条件。精选ppt4.cortexm3常用的thumb2指令集(续)(14)ifthen(it)指令(续)例例7:it指令优化c代码的例子如下面伪代码所示:if(r0=r1)r3=r4 r5;r3=r3/2;elser3=r6 r7;r3=r3/2;可以写作:cmpr0,r1;比较r0和r1itteeeq;如果r0=r1,then-then-else-elseaddeqr3,r4,r5;相等时加法asreqr3,r3,#1;相等时算术右移addner3,r6,r7;不等时加法asrner3,r3,#1;不等时算术右移精选ppt5.小结cortexm3支持的thumb2指令精选ppt5.小结cortexm3支持的thumb2指令(续)精选ppt

展开阅读全文
相关搜索

最新文档


当前位置:凯时尊龙官网 > 办公文档 > 工作计划

 |金锄头文库凯时尊龙官网的版权所有
经营许可证:蜀icp备13022795号 | 川公网安备 51140202000112号

网站地图