ImageVerifierCode 换一换
格式:PPT , 页数:119 ,大小:1.48MB ,
文档编号:3592306      下载积分:29 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-3592306.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(三亚风情)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(DSP技术及应用第5章课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

DSP技术及应用第5章课件.ppt

1、1第五章第五章 汇编语言编程举例汇编语言编程举例 第一节汇编语言编程的基本方法第一节汇编语言编程的基本方法 第二节第二节 DSPDSP的浮点运算方法的浮点运算方法 第三节第三节 DSPDSP在信号发生器上的应用在信号发生器上的应用 第四节第四节 用用DSPDSP实现实现FIRFIR滤波器滤波器2第一节第一节 汇编语言编程的基本方法汇编语言编程的基本方法 1 1堆栈的使用堆栈的使用 1.压入数据时,堆栈从高地址向低地址增长。压入数据时,堆栈从高地址向低地址增长。2.压栈时指针先减,压栈时指针先减,SP-1,再压入数据;,再压入数据;3.出栈时,先弹出数据后,再出栈时,先弹出数据后,再SP+1。4

2、.如要用堆栈,必须先设置,后使用。如要用堆栈,必须先设置,后使用。要要点点3例例5-1 设计一存储空间为设计一存储空间为100100个单元的堆栈。个单元的堆栈。size size.set 100 .set 100 ;设置堆栈空间的;设置堆栈空间的 ;大小为;大小为100100stack .stack .usectusect “STKSTK”,size,size ;设置堆栈段的首地址;设置堆栈段的首地址 ;和堆栈空间;和堆栈空间 STM#STM#stack+size,SPstack+size,SP ;将栈底地址指针送;将栈底地址指针送 ;SPSP,对其初始化,对其初始化最后用的单元最后用的单元已

3、用栈区已用栈区可用栈区可用栈区数据存储器数据存储器0栈顶栈顶SP栈底栈底65535stack STKsize=100SPSP4例例5-2 编写求解加、减法的程序,计算编写求解加、减法的程序,计算z=z=x+y-wx+y-w。SUM1SUM1:LD LD x,Ax,A ;将;将x x地址的内容送地址的内容送A A ADD ADD y,Ay,A ;将;将y y地址的内容与地址的内容与A A中中x x值相加值相加 SUB SUB w,Aw,A ;将;将A A中的内容与中的内容与w w相减,得相减,得z z STL STL A,zA,z ;将;将A A的的计算值存入的的计算值存入z z地址中地址中例例

4、5-3 写求解直线方程的程序,计算写求解直线方程的程序,计算y=y=mx+bmx+b。SUM2SUM2:LD LD m,Tm,T ;将;将m m地址的内容送地址的内容送T T MPY MPY x,Ax,A ;将;将x x地址的内容与地址的内容与T T中的中的m m相乘,相乘,;结果送;结果送A A ADD ADD b,Ab,A ;将;将A A中的中的mxmx与与b b地址的内容相加,地址的内容相加,;结果送;结果送A A STH STH A,yA,y ;将;将A A的的计算结果存入的的计算结果存入y y地址中地址中 STL A,y+1 STL A,y+1;将;将A A的的计算结果存入的的计算结

5、果存入y+1y+1地址中地址中 2 2 加、减法和乘法运算加、减法和乘法运算 5传送速度比加载和存储指令要快;传送速度比加载和存储指令要快;传送数据不需要通过累加器;传送数据不需要通过累加器;可以寻址程序存储器;可以寻址程序存储器;与与RPTRPT指令相结合指令相结合(重复时,这些指(重复时,这些指令都变成单周期指令),可以实现令都变成单周期指令),可以实现数据块传送。数据块传送。3 3 数据块传送数据块传送 特特点点6(1 1)数据存储器)数据存储器数据存储器数据存储器 这类指令有:这类指令有:MVDK MVDK Smem,dmadSmem,dmad 指令的字数指令的字数/执行周期执行周期

6、2/22/2MVKD MVKD dmad,Smemdmad,Smem;SmemSmem=dmaddmad 2/22/2MVDD MVDD Xmem,YmemXmem,Ymem ;YmemYmem=XmemXmem 1/1 1/1(2 2)程序存储器)程序存储器数据存储器数据存储器 这类指令有:这类指令有:MVPD MVPD pmad,Smempmad,Smem ;SmemSmem=pmadpmad 2/3 2/3MVDP MVDP Smem,pmadSmem,pmad ;pmadpmad=SmemSmem 2/4 2/4pmadpmad为为1616位立即数程序存储器地址;位立即数程序存储器地址

7、;dmaddmad为为1616位立即数数据存储器地址;位立即数数据存储器地址;SmemSmem为数据存储器地址;为数据存储器地址;XmemXmem、YmemYmem为双操作数数据存储器地址,为双操作数数据存储器地址,XmemXmem从从DBDB数数据总线上读出。据总线上读出。YmemYmem从从CBCB数据总线上读出。数据总线上读出。7(3 3)数据存储器)数据存储器MMRMMR 这类指令有:这类指令有:MVDM MVDM dmad,MMRdmad,MMR ;指令的字数;指令的字数/执行周期执行周期 2/22/2MVMD MVMD MMR,dmadMMR,dmad ;dmaddmad=MMR

8、2/2=MMR 2/2MVMM MVMM mmrx,mmrymmrx,mmry ;mmrymmry=mmrxmmrx 1/1 1/1(4 4)程序存储器()程序存储器(AccAcc)数据存储器数据存储器 包括:包括:READA READA SmemSmem ;SmemSmem=prog(Aprog(A)1/5)1/5WRITA WRITA SmemSmem ;prog(Aprog(A)=)=SmemSmem 1/5 1/5 mmrx,mmrymmrx,mmry为为AR0AR0AR7AR7或或SPSP;MMRMMR为任何一个存储器映象寄存器;为任何一个存储器映象寄存器;8例例5-6 将数组将数组

9、x5 x5 初始化为初始化为1,2,3,4,51,2,3,4,5。.data .data ;定义初始化数据段起始地址;定义初始化数据段起始地址TBL:.word 1,2,3,4,5 TBL:.word 1,2,3,4,5;为标号地址;为标号地址TBLTBL ;开始的;开始的5 5个单元赋初值个单元赋初值 .sect .sect “.vectors.vectors”;定义自定义段,并获;定义自定义段,并获 ;得该段起始地址;得该段起始地址 B START B START ;无条件转移到标号为;无条件转移到标号为STARTSTART的地址的地址 .bssbss x,5 x,5 ;为数组;为数组x

10、x分配分配5 5个存储单元个存储单元 .text .text ;定义代码段起始地址;定义代码段起始地址START:STM#x,AR5 START:STM#x,AR5 ;将;将x x的首地址存入的首地址存入AR5AR5 RPT#4RPT#4 ;设置重复执行;设置重复执行5 5次下条指令次下条指令 MVPD TBL,MVPD TBL,*AR5+AR5+;将;将TBLTBL开始的开始的5 5个值传给个值传给x x(1 1)程序存储器)程序存储器数据存储器数据存储器应应用用举举例例9例例5-7 将数据存储器中的数组将数据存储器中的数组x10 x10复制到数组复制到数组y10y10。.title .ti

11、tle “cjy1.asmcjy1.asm”;为汇编源程序取名;为汇编源程序取名 .mmregsmmregs ;定义存储器映象寄存器;定义存储器映象寄存器STACK.STACK.usectusect “STACKSTACK”,30H,30H;设置堆栈;设置堆栈 .bssbss x,10 x,10 ;为数组;为数组x x分配分配1010个存储单元个存储单元 .bssbss y,10 y,10 ;为数组;为数组y y分配分配1010个存储单元个存储单元 .data.datatable:.wordtable:.word 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,1

12、0 .def start .def start ;定义标号;定义标号startstart .text .text10start:STMstart:STM#0,SWWSR#0,SWWSR ;复位;复位SWWSRSWWSR STM STM#STACK+30H,SP#STACK+30H,SP;初始化堆指针;初始化堆指针 STM#x,AR1 STM#x,AR1 ;将目的地首地址赋给;将目的地首地址赋给AR1AR1 RPT#9RPT#9 ;设定重复传送的次数为;设定重复传送的次数为1010次次 MVPD table,MVPD table,*AR1+AR1+;程序存储器传送到数;程序存储器传送到数 ;据存

13、储器;据存储器 STM#x,AR2 STM#x,AR2 ;将;将x x的首地址存入的首地址存入AR2AR2 STM#y,AR3 STM#y,AR3 ;将;将y y的首地址存入的首地址存入AR3AR3 RPT#9RPT#9 ;设置重复执行;设置重复执行1010次下条指令次下条指令 MVDD MVDD *AR2+,AR2+,*AR3+AR3+;将地址;将地址x x开始的开始的1010个值个值 ;复制到地址;复制到地址y y开始的开始的1010个单元个单元end:B endend:B end .end .end11用间接寻址方式获得操作数,且用间接寻址方式获得操作数,且辅助寄存器只用辅助寄存器只用A

14、R2AR2AR5AR5;占用程序空间小;占用程序空间小;运行速度快。运行速度快。4 4双操作数乘法双操作数乘法 特特点点例例5-8 编制求解编制求解 的程序。的程序。利用双操作数指令可以节省机器周期。迭代次数越利用双操作数指令可以节省机器周期。迭代次数越多,节省的机器周期数也越多。本例中,在每次循环多,节省的机器周期数也越多。本例中,在每次循环中,双操作数指令都比单操作数指令少用一个周期,中,双操作数指令都比单操作数指令少用一个周期,节省的总机器周期数节省的总机器周期数=1T=1T*N N(迭代次数)(迭代次数)=NT=NT。201iiixay12 单操作数指令方案单操作数指令方案 LD#0,

15、BLD#0,B STM#a,AR2 STM#a,AR2 STM#x,AR3 STM#x,AR3 STM#19,BRC STM#19,BRC RPTB done-1RPTB done-1 LDLD *AR2+,TAR2+,T;1T1T MPYMPY *AR3+,AAR3+,A;1T1T ADD A,B ADD A,B ;1T1Tdonedone:STHSTH B,yB,y STL B,y+1 STL B,y+1 双操作数指令方案双操作数指令方案 LD#0,B LD#0,B STM#a,AR2 STM#a,AR2 STM#x,AR3 STM#x,AR3 STM#19,BRCSTM#19,BRC R

16、PTB done-1RPTB done-1 MPY MPY *AR2+,AR2+,*AR3+,AAR3+,A;1T1T ADD A,B ADD A,B ;1T1Tdonedone:STHSTH B,yB,y STL B,y+1 STL B,y+113在单个周期内同时利用在单个周期内同时利用C C总线和总线和D D总线,得到总线,得到3232位操作数。位操作数。5 5长字运算长字运算 特特点点使用长操作数指令时,按指令中给出的地址存取的总使用长操作数指令时,按指令中给出的地址存取的总是高是高1616位操作数。这样,有两种数据排列方法:位操作数。这样,有两种数据排列方法:(1 1)偶地址排列法)偶

17、地址排列法 指令中给出的地址为偶地址,存指令中给出的地址为偶地址,存储器中低地址存放高储器中低地址存放高1616位操作数。位操作数。如:如:DLD DLD *AR3+,AAR3+,A执行前:执行前:A=00 0000 A=00 0000 00000000 执行后:执行后:A=00 A=00 6CAC6CAC BD90BD90 AR3=0100 AR3=0100 AR3=0102AR3=0102 (0100h0100h)=6CAC6CAC(高字)(高字)(0100h0100h)=6CAC=6CAC (0101h0101h)=BD90BD90(低字)(低字)(0101h0101h)=BD90=BD

18、90总是高总是高16位操作数位操作数14(2 2)奇地址排列法)奇地址排列法 指令中给出的地址为奇地址,存储器中低指令中给出的地址为奇地址,存储器中低地址存放低地址存放低1616位操作数。位操作数。如:如:DLD DLD *AR3-,AAR3-,A执行前:执行前:A=00 0000 A=00 0000 00000000 执行后:执行后:A=00 A=00 BD90BD90 6CAC6CAC AR3=0103 AR3=0103 AR3=0101 AR3=0101 (0102h0102h)=6CAC6CAC(低字)(低字)(0100h0100h)=6CAC=6CAC (0103h0103h)=BD

19、90BD90(高字)(高字)(0101h0101h)=BD90=BD90推荐采用偶地址排列法,将高推荐采用偶地址排列法,将高1616位操作数放在偶地址存储单元位操作数放在偶地址存储单元中。如:中。如:程序存储器程序存储器 .long 12345678 h .long 12345678 h ;偶地址:;偶地址:12341234 ;奇地址:;奇地址:56785678 数据存储器数据存储器 .bssbss xhixhi,2,1,1 ,2,1,1 ;偶地址:;偶地址:xhixhi ;奇地址:;奇地址:xloxlo 变量名称变量名称 字长字长 页邻接页邻接 偶地址排列法偶地址排列法 总是高总是高16位操

20、作数位操作数15 标准运算标准运算 LD xhi,16,ALD xhi,16,A ADDS ADDS xlo,Axlo,A ADD yhi,16,AADD yhi,16,A ADDS ADDS ylo,Aylo,A STH STH A,ZhiA,Zhi STL STL A,ZloA,Zlo(6 6个字,个字,6 6个个T T)长字运算长字运算DLD DLD xhi,Axhi,ADADD DADD yhi,Ayhi,ADST DST A,zhiA,zhi(3 3个字,个字,3 3个个T T)例例5-9 5-9 计算计算Z32=X32+Y32Z32=X32+Y32。16(1)(1)并行运算指同时利

21、用并行运算指同时利用D D总线和总线和E E总线。总线。其中,其中,D D总线用来执行加载或算术运算,总线用来执行加载或算术运算,E E总总线用来存放先前的结果。线用来存放先前的结果。(2)2)并行指令都是单字单周期指令。并行指令都是单字单周期指令。(3)(3)并行运算时所存储的是前面的运算结并行运算时所存储的是前面的运算结果,果,存储之后再进行加载或算术运算。存储之后再进行加载或算术运算。(4)(4)并行指令都工作在累加器的高位。并行指令都工作在累加器的高位。(5)(5)大多数并行运算指令都受累加器移位大多数并行运算指令都受累加器移位方式方式ASMASM位影响。位影响。6 6并行运算并行运算

22、 特特点点17表表5-1 5-1 并行指令举例并行指令举例指指 令令指指 令令举举 例例操作说明操作说明并行加载和乘并行加载和乘法指令法指令LDMACRLDMASRLD Xmem,dstMACR Ymem,dstdst=Xmem(16-ASM)dst=Xmem(16-ASM)dst=dst+T*Xmem并行存储和加并行存储和加/减法指令减法指令STADDSTSUBST src,YmemADD Xmem,dstYmem=src(16-ASM)dst=dst+Xmem18例例5-10 编写计算编写计算z=z=x+yx+y和和f=f=d+ed+e的程序段。的程序段。在此程序段中用到了并行存储在此程序

23、段中用到了并行存储/加载指令,即在同一机器周期加载指令,即在同一机器周期内利用内利用E E总线存储和总线存储和D D总线加载。总线加载。数据存储器分配如图数据存储器分配如图5-45-4所示。所示。.title .title “cjy3.asmcjy3.asm”.mmregsmmregsSTACK .STACK .usectusect “STACKSTACK”,10H,10H .bssbss x,3 x,3 ;为第一组变量;为第一组变量 ;分配;分配3 3个存储单元个存储单元 .bssbss d,3 d,3 ;为第二组变量;为第二组变量 ;分配;分配3 3个存储单元个存储单元 .def star

24、t.def start .data .datatable:.word 0123H,1027H,0,1020H,0345H,0table:.word 0123H,1027H,0,1020H,0345H,0dyfezx数据存储器数据存储器AR5 AR2 19 .text .text start:STMstart:STM#0,SWWSR#0,SWWSR STM#STACK+10H,SP STM#STACK+10H,SP STM#x,AR1 STM#x,AR1 RPT#5 RPT#5 MVPD table,MVPD table,*AR1+AR1+STM#x,AR5 STM#x,AR5 ;将第一组变量的

25、首地址传给;将第一组变量的首地址传给AR5 AR5 STM#d,AR2 STM#d,AR2 ;将第二组变量的首地址传给;将第二组变量的首地址传给AR2AR2 LD#0,ASM LD#0,ASM ;设置;设置ASM=0 ASM=0 LD LD *AR5+,16,A AR5+,16,A;将;将x x的值左移的值左移1616位放入位放入A A的高端字的高端字 ADD ADD *AR5+,16,A AR5+,16,A;将;将y y值左移值左移1616位与位与A A的高端字的高端字x x相加相加 ST A,ST A,*AR5AR5 ;将;将A A中的和值右移中的和值右移1616位存入位存入z z中中 L

26、D LD *AR2+,BAR2+,B ;将;将d d的值左移的值左移1616位放入位放入B B的高端字的高端字 ADD ADD *AR2+,16,B AR2+,16,B;将;将e e值左移值左移1616位与位与B B的高端字的高端字d d相加相加 STH B,STH B,*AR2 AR2 ;将;将B B的高端字中的和值存入的高端字中的和值存入f f中中end:B endend:B end .end .end20 7 76464位加法和减法运算位加法和减法运算 例例5-11 编写计算编写计算Z Z6464=W=W6464+X+X6464-Y-Y6464的程序段。的程序段。这里的这里的W W、X

27、X、Y Y和结果和结果Z Z都是都是6464位数,它们都由两个位数,它们都由两个3232位的位的长字组成。利用长字指令可以完成长字组成。利用长字指令可以完成6464位数的加位数的加/减法。减法。w w3 3 w w2 2 w w1 1 w w0 0 (W W6464)+x x3 3 x x2 2 C C x x1 1 x x0 0 (X X6464)低低3232位相加产生进位位相加产生进位C C-y y3 3 y y2 2 C C y y1 1 y y0 0 (Y Y6464)低低3232位相减产生借位位相减产生借位C C_ z z3 3 z z2 2 z z1 1 z z0 0 (Z Z64

28、64)累加器累加器A A累加器累加器B B21DLD w1,A DLD w1,A ;A=wA=w1 1w w0 0DADD x1,ADADD x1,A ;A=wA=w1 1w w0 0+x+x1 1x x0 0,产生进位产生进位C CDLD w3,B DLD w3,B ;B=wB=w3 3w w2 2ADDC x2,B ADDC x2,B ;B=wB=w3 3w w2 2+x+x2 2+C+CADD x3,16,BADD x3,16,B ;B=wB=w3 3w w2 2+x+x3 3x x2 2+C+CDSUB y1,ADSUB y1,A ;A=wA=w1 1w w0 0+x+x1 1x x0

29、 0-y-y1 1y y0 0,产生借位产生借位C CDST A,z1 DST A,z1 ;z z1 1z z0 0=w=w1 1w w0 0+x+x1 1x x0 0-y-y1 1y y0 0SUBB y2,BSUBB y2,B ;B=wB=w3 3w w2 2+x+x3 3x x2 2+C-y+C-y2 2-C-CSUB y3,16,BSUB y3,16,B ;B=wB=w3 3w w2 2+x+x3 3x x2 2+C-y+C-y3 3y y2 2-C-CDST B,z3 DST B,z3 ;z z3 3z z2 2=w=w3 3w w2 2+x+x3 3x x2 2+C-y+C-y3

30、3y y2 2-C-C由于没有长字带进(借)位加由于没有长字带进(借)位加/减法指令,所以上述程序减法指令,所以上述程序中只能用中只能用1616位带进(借)位指令位带进(借)位指令ADDCADDC和和SUBBSUBB。低低32位加位加高高32位加位加低低32位减位减高高32位减位减22 8.32 8.32位乘法运算位乘法运算 x1 x0 S U x1 x0 S U y1 y0 S U y1 y0 S U_ _ _ x0 x0*y0 U y0 U*U U y1 y1*x0 S x0 S*U U x1 x1*y0 S y0 S*U Uy1 y1*x1 S x1 S*S S_ _ _w3 w2 w1

31、 w0 S U U Uw3 w2 w1 w0 S U U U例例5-12 编写计算编写计算W W6464=X=X3232*Y Y3232的程序段。的程序段。3232位乘法算式如下:位乘法算式如下:图图5-55-5y1x1w1w0y0 x0数据存储器数据存储器AR2 AR3 w2w323 其中,其中,S S为带符号数,为带符号数,U U为无符号数。数据存储器分配如图为无符号数。数据存储器分配如图5-5-5 5所示。在所示。在3232位乘法运算中,实际上包括了三种乘法运算:位乘法运算中,实际上包括了三种乘法运算:U U*U U、S S*U U和和S S*S S。一般的乘法运算指令都是两个带符号数相

32、乘,即。一般的乘法运算指令都是两个带符号数相乘,即S S*S S。所以,在编程时,要用到以下三条乘法指令:所以,在编程时,要用到以下三条乘法指令:MACSU MACSU Xmem,Ymem,srcXmem,Ymem,src ;无符号数与带符号数相乘并;无符号数与带符号数相乘并 ;累加;累加srcsrc=U=U(XmemXmem)*S S(YmemYmem)+srcsrc MPYU MPYU Smem,dstSmem,dst ;无符号数相乘;无符号数相乘 ;dstdst=U=U()()*U U(SmemSmem)MAC MAC Xmem,Ymem,srcXmem,Ymem,src ;两个符号数数

33、相乘并累加;两个符号数数相乘并累加 ;srcsrc=S=S(XmemXmem)*S S(YmemYmem)+srcsrc3232位乘法的程序段如下:位乘法的程序段如下:24STM#x0,AR2 STM#x0,AR2 ;将;将x x的首地址放入的首地址放入AR2AR2 STM#y0,AR3 STM#y0,AR3 ;将;将y y的首地址存入的首地址存入AR3AR3LD LD *AR2,T AR2,T ;T=x0T=x0MPYU MPYU *AR3+,AAR3+,A ;A=ux0A=ux0*uy0uy0STL A,w0 STL A,w0 ;w0=ux0w0=ux0*uy0uy0LD A,-16,A

34、LD A,-16,A ;A=A16A=A16MACSU MACSU *AR2+,AR2+,*AR3-,AAR3-,A ;A+=y1A+=y1*ux0ux0MACSU MACSU *AR3+,AR3+,*AR2,AAR2,A ;A+=x1A+=x1*uy0uy0STL A,w1 STL A,w1 ;w1=Aw1=ALD A,-16,A LD A,-16,A ;A=A16A=A16MAC MAC *AR2,AR2,*AR3,AAR3,A ;A+=x1A+=x1*y1y1STL A,w2 STL A,w2 ;w2=Aw2=A的低的低1616位位STH A,W3 STH A,W3 ;w3=Aw3=A的

35、高的高1616位位 x1 x0 y1 y0 x1*y0 y1*x1 x1 x0 y1 y0 x0*y0 y1*x0w0w1w2w325 9 9小数运算小数运算 整数运算的问题整数运算的问题(1 1)两个)两个1616位整数相乘,乘积总是位整数相乘,乘积总是“向左增向左增长长”。这意味着多次相乘后,乘积将会很快超出定这意味着多次相乘后,乘积将会很快超出定点器件的数据范围。点器件的数据范围。(2 2)保存)保存3232位乘积到存储器,要位乘积到存储器,要开销开销2 2个机器个机器周期以及周期以及2 2个字的存储器单元。个字的存储器单元。(3 3)由于乘法器都是)由于乘法器都是1616位相乘,因此位

36、相乘,因此很难在后很难在后续的递推运算中,将续的递推运算中,将3232位乘积作为乘法器的输入。位乘积作为乘法器的输入。小数运算的优点小数运算的优点(1 1)乘积总是)乘积总是“向右增长向右增长”。这就味着超出定这就味着超出定点器件数据范围的将是不太感兴趣的部分。点器件数据范围的将是不太感兴趣的部分。(2 2)既可以存储)既可以存储3232位乘积,也可以存储高位乘积,也可以存储高1616位位乘积,这就乘积,这就允许用较少的资源保存结果。允许用较少的资源保存结果。(3 3)可以用于递推运算。)可以用于递推运算。小数小数运算运算与整与整数运数运算的算的比较比较26C54xC54x采用采用2 2的补码

37、表示小数,其最高位为符号位,数值范围的补码表示小数,其最高位为符号位,数值范围从从-1-11 1。一个。一个1616位位2 2的补码小数(的补码小数(Q15Q15格式)的每一位的权值格式)的每一位的权值为:为:MSBMSB(最高位)(最高位)LSB LSB(最低位)(最低位)-1.-1.1/2 1/4 1/8 1/2 1/4 1/8 2 2-15-15一个十进制小数乘以一个十进制小数乘以3276832768之后再将其十进制整数部分转换之后再将其十进制整数部分转换成十六进制数,就能得到这个十进制小数的成十六进制数,就能得到这个十进制小数的2 2的补码表示。的补码表示。1 1 7FFFh7FFFh

38、0.50.5正数:乘以正数:乘以32768 32768 4000h4000h0 0 0000h0000h-0.5-0.5 负数:其绝对值部分乘以负数:其绝对值部分乘以3276832768,再取反加,再取反加1 C000h1 C000h-1 8000h-1 8000h(1 1)小数的表示方法)小数的表示方法27在汇编语言中,是不能直接写入十进制在汇编语言中,是不能直接写入十进制小数的,可写为整数运算式。小数的,可写为整数运算式。如果要定义一个系数如果要定义一个系数0.7070.707,可以写成:,可以写成:.word 32768.word 32768*707/1000707/1000不能写成不能

39、写成3276832768*0.7070.707。注意注意Q Q格式表示法格式表示法 在在Q Q格式中,格式中,Q Q之后的数字(如之后的数字(如Q15Q15格式中的格式中的1515)决)决定小数点右边有多少位二进制位,故定小数点右边有多少位二进制位,故Q15Q15表示在小数表示在小数点后有点后有1515位小数。位小数。当用一个当用一个1616位的字来表示位的字来表示Q15Q15格式时,在格式时,在MSBMSB(最(最高位)的右边有一个小数点,而高位)的右边有一个小数点,而MSBMSB表示符号位。表示符号位。所所以以Q15Q15的表示数字可表示范围从的表示数字可表示范围从+1+1(以(以+0.9

40、99997+0.999997表示表示)到)到-1-1的值。的值。28通过合适的通过合适的Q Q格式,可以把数值根据所需的精确度做适格式,可以把数值根据所需的精确度做适当的转换,以便定点数的当的转换,以便定点数的DSPDSP也可以处理高精度的浮点也可以处理高精度的浮点数。下面以数。下面以Q15Q15为例,说明转换的过程。为例,说明转换的过程。1 1)先确定准备转换的十进制数值先确定准备转换的十进制数值N N,是在,是在Q15Q15格式的格式的数值范围之间,即数值范围之间,即-1.000000N+0.999997-1.000000N+0.999997。2 2)数值)数值N N乘以乘以2 21515

41、,即,即N=NN=N2 21515=N=N32768327683 3)把步骤)把步骤2 2)的结果加)的结果加2 21616,即,即N=N+2N=N+21616=N+65536=N+65536。4 4)步骤)步骤3 3)的结果转换成十六进制,并把第)的结果转换成十六进制,并把第1717位舍弃位舍弃掉,得到的结果就是掉,得到的结果就是N N的的Q15Q15转换值。转换值。29下面通过把下面通过把-0.2345-0.2345及及+0.2345+0.2345转换成转换成Q15Q15格式来说格式来说明转换方法。明转换方法。-0.2345-0.2345的转换为:的转换为:-0.2345-0.234532

42、768=-7684.1-768432768=-7684.1-7684-7684+65536=57852-7684+65536=578525785257852转换成十六进制数值为转换成十六进制数值为0E1FCh0E1FCh,所以结果为,所以结果为E1FChE1FCh。+0.2345+0.2345的转换为:的转换为:0.23450.234532768=7684.1768432768=7684.176847684+65536=733207684+65536=733207332073320转换成十六进制数值为转换成十六进制数值为11E04h11E04h,并把第,并把第1717位位舍弃掉,结果为舍弃掉,

43、结果为1E04h1E04h。30以字长为以字长为4 4位和位和8 8位累加器为例,先看一个小数乘法的例子。位累加器为例,先看一个小数乘法的例子。0 1 0 00 1 0 0(0.50.5223 30.5=0.5=(4 4)1010=(01000100)2 2)1 1 0 1 1 1 0 1(-0.375-0.375223 3(-0.375-0.375)=(-3-3)1010 0 1 0 00 1 0 0 =(11011101)补补)0 0 0 00 0 0 0 0 1 0 0 0 1 0 0 1 1 1 0 0 1 0 0 (-0100-0100)?1 1 1 11 1 0 1 0 00 1

44、0 0 (-0.1875-0.1875=-12/2=-12/26 6-12=-12=(11101001110100)补补)(2 2)小数乘法与冗余符号位)小数乘法与冗余符号位00010110001011+1+100011000001100保留保留符号符号3+3=63+3=6 0.50.5 0.3750.375 0.187531上述乘积是上述乘积是7 7位,当将其送到位,当将其送到8 8位累加器时,为保位累加器时,为保持乘积的符号,必须进行符号位扩展,这样,累加持乘积的符号,必须进行符号位扩展,这样,累加器中的值为器中的值为1111010011110100(-0.09375=-12/2-0.09

45、375=-12/27 7),出现了),出现了冗余符号位。原因是:冗余符号位。原因是:S x x x S x x x (Q3Q3)S y y y S y y y (Q3Q3)S S S z z S z z z z z zz z z z (Q6Q6格式)格式)即两个带符号数相乘,得到的乘积带有即两个带符号数相乘,得到的乘积带有2 2个符号位个符号位,造成错误的结果。,造成错误的结果。同样,同样,对于两个十六位数相乘,乘积只有对于两个十六位数相乘,乘积只有3030位,位,在最高的两位也是符号位,同样会造成错误的结果在最高的两位也是符号位,同样会造成错误的结果。不等于不等于-0.1875添加添加32解

46、决冗余符号的办法是:在程序中设定状态寄存器解决冗余符号的办法是:在程序中设定状态寄存器ST1ST1中的中的FRCTFRCT(小数方式)位(小数方式)位1 1,在乘法器将结果传送,在乘法器将结果传送至累加器时就能自动地左移至累加器时就能自动地左移1 1位,位,累加器中的结果为:累加器中的结果为:zzzzzz0zzzzzz0(Q7Q7格式),即格式),即1110100011101000(-0.1875=-0.1875=-24/224/27 7-24=-24=(1110100011101000)补补),自动地消去了两个带),自动地消去了两个带符号数相乘时产生的冗余符号位。所以在小数乘法编符号数相乘时

47、产生的冗余符号位。所以在小数乘法编程时,应当事先设置程时,应当事先设置FRCTFRCT位:位:SSBX FRCTSSBX FRCT MPY MPY *AR2,AR2,*AR3,AAR3,ASTH A,ZSTH A,Z这样,这样,C54xC54x就完成了就完成了Q15Q15*Q15Q15=Q15Q15的小数乘法。的小数乘法。33例例5-13 编制计算编制计算 的程序段,其中数据均为的程序段,其中数据均为小数:小数:a a1 1=0.1,a=0.1,a2 2=0.2,a=0.2,a3 3=-0.3,a=-0.3,a4 4=0.4,x=0.4,x1 1=0.8,=0.8,x x2 2=0.6,x=0

48、.6,x3 3=-0.4,x=-0.4,x4 4=-0.2=-0.2。.title .title “cjy4.asmcjy4.asm”.mmregsmmregsSTACK.STACK.usectusect “STACKSTACK”,10H,10H .bssbss a,4 a,4 ;为;为a a分配分配4 4个存储单元个存储单元 .bssbss x,4 x,4 ;为;为x x分配分配4 4个存储单元个存储单元 .bssbss y,1 y,1 ;为结果;为结果y y分配分配1 1个存储单元个存储单元 .def start.def start .data .data ;定义数据代码段;定义数据代码段

49、41iiixay34table:.word 1table:.word 1*32768/10 32768/10;在;在tabletable开始的开始的8 8个个 .word 2.word 2*32768/10 32768/10;地址放数据;地址放数据 .word -3.word -3*32768/1032768/10 .word 4.word 4*32768/1032768/10 .word 8.word 8*32768/1032768/10 .word 6.word 6*32768/1032768/10 .word -4.word -4*32768/1032768/10 .word -2.wo

50、rd -2*32768/1032768/1035 .text .text ;定义可执行程序代码段;定义可执行程序代码段start:SSBXstart:SSBX FRCT FRCT ;设置;设置FRCTFRCT位,表示进行小数乘位,表示进行小数乘 STM#x,AR1 STM#x,AR1 ;将;将x x的首地址传给的首地址传给AR1AR1 RPT#7 RPT#7 ;重复;重复8 8次下条指令次下条指令 MVPD table,MVPD table,*AR1+AR1+;将程序空间;将程序空间8 8个数传给数据存储器个数传给数据存储器 STM#x,AR2 STM#x,AR2 ;将数据存储器第一个数;将数

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|