DSP技术及应用5课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《DSP技术及应用5课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 技术 应用 课件
- 资源描述:
-
1、第五章第五章 汇编语言编程举例汇编语言编程举例 第一节汇编语言编程的基本方法第一节汇编语言编程的基本方法 第二节第二节 DSPDSP的浮点运算方法的浮点运算方法 第三节第三节 DSPDSP在信号发生器上的应用在信号发生器上的应用 第四节第四节 用用DSPDSP实现实现FIRFIR滤波器滤波器1第一节第一节 汇编语言编程的基本方法汇编语言编程的基本方法 1 1堆栈的使用堆栈的使用 1.压入数据时,堆栈从高地址向低地压入数据时,堆栈从高地址向低地址增长。址增长。2.压栈时指针先减,压栈时指针先减,SP-1,再压入数,再压入数据;据;3.出栈时,先弹出数据后,再出栈时,先弹出数据后,再SP+1。4.
2、如要用堆栈,必须先设置,后使用。如要用堆栈,必须先设置,后使用。要要点点2例例5-1 设计一存储空间为设计一存储空间为100100个单元的堆栈。个单元的堆栈。size size.set 100 .set 100 ;设置堆栈空间的;设置堆栈空间的 ;大小为;大小为100100stack .usect “STK”,size stack .usect “STK”,size;设置堆栈段的首地;设置堆栈段的首地址址 ;和堆栈空间;和堆栈空间 STM#stack+size,SP STM#stack+size,SP;将栈底地址指针送;将栈底地址指针送 ;SPSP,对其初始化,对其初始化3例例5-2 编写求解
3、加、减法的程序,计算编写求解加、减法的程序,计算z=x+y-wz=x+y-w。SUM1SUM1:LD x,A LD x,A ;将;将x x地址的内容送地址的内容送A A ADD y,AADD y,A ;将;将y y地址的内容与地址的内容与A A中中x x值相加值相加 SUB w,ASUB w,A ;将;将A A中的内容与中的内容与w w 相减,得相减,得z z STL A,z STL A,z ;将;将A A的的计算值存入的的计算值存入z z 地址中地址中例例5-3 写求解直线方程的程序,计算写求解直线方程的程序,计算y=mx+by=mx+b。SUM2SUM2:LD m,T LD m,T ;将;
4、将m m 地址的内容送地址的内容送T T MPY x,AMPY x,A ;将;将x x 地址的内容与地址的内容与T T中的中的m m相乘,相乘,;结果送;结果送A A ADD b,AADD b,A ;将;将A A中的中的mxmx与与b b 地址的内容相加,地址的内容相加,;结果送;结果送A A STL A,y STL A,y ;将;将A A的的计算结果存入的的计算结果存入y y 地址中地址中 2 2 加、减法和乘法运算加、减法和乘法运算 4传送速度比加载和存储指令要快;传送速度比加载和存储指令要快;传送数据不需要通过累加器;传送数据不需要通过累加器;可以寻址程序存储器;可以寻址程序存储器;与与
5、RPTRPT指令相结合(重复时,这些指指令相结合(重复时,这些指令都变成单周期指令),可以实现令都变成单周期指令),可以实现数据块传送。数据块传送。3 3 数据块传送数据块传送 特特点点5(1 1)数据存储器)数据存储器数据存储器数据存储器 这类指令有:这类指令有:MVDK Smem,dmad MVDK Smem,dmad 指令的字数指令的字数/执行周期执行周期 2/22/2M V K D d m a d,S m e mM V K D d m a d,S m e m ;S m e m=d m a d S m e m=d m a d 2/22/2M V D D X m e m,Y m e m M
6、 V D D X m e m,Y m e m ;Y m e m=X m e m Y m e m=X m e m 1/11/1(2 2)程序存储器)程序存储器数据存储器数据存储器 这类指令有:这类指令有:M V P D p m a d,S m e m M V P D p m a d,S m e m ;S m e m=p m a d S m e m=p m a d 2/32/3M V D P S m e m,p m a d M V D P S m e m,p m a d ;p m a d=S m e m p m a d=S m e m 2/42/4pmadpmad为为1616位立即数程序存储器地址
7、;位立即数程序存储器地址;dmaddmad为为1616位立即数数据存储器地址;位立即数数据存储器地址;SmemSmem为数据存储器地址;为数据存储器地址;XmemXmem、YmemYmem为双操作数数据存储器地址,为双操作数数据存储器地址,XmemXmem从从DBDB数据总线上读出。数据总线上读出。YmemYmem从从CBCB数据总线上读出。数据总线上读出。6(3 3)数据存储器)数据存储器MMRMMR 这类指令有:这类指令有:MVDM dmad,MMR MVDM dmad,MMR ;指令的字数;指令的字数/执行周期执行周期 2/22/2MVMD MMR,dmad MVMD MMR,dmad
8、;dmad=MMR 2/2dmad=MMR 2/2MVMM mmrx,mmry MVMM mmrx,mmry ;mmry=mmrx 1/1mmry=mmrx 1/1(4 4)程序存储器()程序存储器(AccAcc)数据存储器数据存储器 包括:包括:READA Smem READA Smem ;Smem=prog(A)1/5Smem=prog(A)1/5WRITA Smem WRITA Smem ;prog(A)=Smem 1/5prog(A)=Smem 1/5 mmrx,mmry mmrx,mmry为为AR0AR0AR7AR7或或SPSP;MMRMMR为任何一个存储器映象寄存器;为任何一个存储
9、器映象寄存器;7例例5-6 将数组将数组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 “.vectors”.sect “.vectors”;定义自定义段,并;定义自定义段,并获获 ;得该段起始地址;得该段起始地址 B STARTB START;无条件转移到标号为;无条件转移到标号为STARTSTART的地址的地址 .bss
10、x,5 .bss x,5 ;为数组;为数组x x分配分配5 5个存储单元个存储单元 .text .text ;定义代码段起始地址;定义代码段起始地址START:STM#x,AR5 START:STM#x,AR5 ;将;将x x的首地址存入的首地址存入AR5AR5 RPT#4 RPT#4 ;设置重复执行;设置重复执行5 5次下条指令次下条指令 MVPD TBL,MVPD TBL,*AR5+AR5+;将;将TBLTBL开始的开始的5 5个值传给个值传给x x(1 1)程序存储器)程序存储器数据存储器数据存储器8例例5-7 将数据存储器中的数组将数据存储器中的数组x10 x10复制到数组复制到数组y
11、10y10。.title “cjy1.asm”.title “cjy1.asm”;为汇编源程序取名;为汇编源程序取名 .mmregs .mmregs ;定义存储器映象寄存器;定义存储器映象寄存器STACK.usect “STACK”,30HSTACK.usect “STACK”,30H;设置堆栈;设置堆栈 .bss x,10 .bss x,10 ;为数组;为数组x x分配分配1010个存储单元个存储单元 .bss y,10 .bss y,10 ;为数组;为数组y y分配分配1010个存储单元个存储单元 .data.datatable:.word 1,2,3,4,5,6,7,8,9,10tabl
12、e:.word 1,2,3,4,5,6,7,8,9,10 .def start .def start ;定义标号;定义标号startstart .text .text(2 2)数据存储器)数据存储器数据存储器数据存储器9start:STM#0,SWWSR start:STM#0,SWWSR ;复位;复位SWWSRSWWSR STM#STACK+30H,SP STM#STACK+30H,SP;初始化堆指针;初始化堆指针 STM#x,AR1 STM#x,AR1;将目的地首地址赋给;将目的地首地址赋给AR1AR1 RPT#19 RPT#19 ;设定重复传送的次数为;设定重复传送的次数为2020次次
13、MVPD table,MVPD table,*AR1+AR1+;程序存储器传送到数;程序存储器传送到数 ;据存储器;据存储器 STM#x,AR2 STM#x,AR2;将;将x x的首地址存入的首地址存入AR2AR2 STM#y,AR3 STM#y,AR3;将;将y y的首地址存入的首地址存入AR3AR3 RPT#19 RPT#19 ;设置重复执行;设置重复执行2020次下条指令次下条指令 MVDD MVDD *AR2+,AR2+,*AR3+AR3+;将地址;将地址x x开始的开始的2020个值个值 ;复制到地址;复制到地址y y开始的开始的2020个单元个单元end:B endend:B en
14、d .end .end10用间接寻址方式获得操作数,且用间接寻址方式获得操作数,且辅助寄存器只用辅助寄存器只用AR2AR2AR5AR5;占用程序空间小;占用程序空间小;运行速度快。运行速度快。4 4双操作数乘法双操作数乘法 特特点点例例5-8 编制求解编制求解 的程序。的程序。利用双操作数指令可以节省机器周期。迭代次数利用双操作数指令可以节省机器周期。迭代次数越多,节省的机器周期数也越多。本例中,在每次越多,节省的机器周期数也越多。本例中,在每次循环中,双操作数指令都比单操作数指令少用一个循环中,双操作数指令都比单操作数指令少用一个周期,节省的总机器周期数周期,节省的总机器周期数=1T=1T*
15、N N(迭代次数)(迭代次数)=NT=NT。201iiixay11 单操作数指令方案单操作数指令方案 双操作数指令方案双操作数指令方案 LD#0,B LD#0,B LD#0,B LD#0,B STM#a,AR2 STM#a,AR2 STM#a,AR2 STM#a,AR2 STM#x,AR3 STM#x,AR3 STM#x,AR3 STM#x,AR3 STM#19,BRC STM#19,BRC STM#19,BRCSTM#19,BRC RPTB done-1 RPTB done-1 RPTB done-1 RPTB done-1 LDLD *AR2+,TAR2+,T;1T 1T MPY MPY
16、*AR2+,AR2+,*AR3+,AAR3+,A;1T1T MPYMPY *AR3+,AAR3+,A;1T1T ADD A,B ADD A,B;1T1T ADD A,B ADD A,B ;1T1Tdone:STH B,y done:STH B,ydone:STH B,y done:STH B,y STL B,y+1 STL B,y+1 STL B,y+1STL B,y+112在单个周期内同时利用在单个周期内同时利用C C总线和总线和D D总线,得到总线,得到3232位操作数。位操作数。5 5长字运算长字运算 特特点点使用长操作数指令时,按指令中给出的地址存取的总使用长操作数指令时,按指令中给出
17、的地址存取的总是高是高1616位操作数。这样,有两种数据排列方法:位操作数。这样,有两种数据排列方法:(1 1)偶地址排列法)偶地址排列法 指令中给出的地址为偶地址,存指令中给出的地址为偶地址,存储器中低地址存放高储器中低地址存放高1616位操作数。位操作数。如:如:DLD DLD *AR3+,AAR3+,A执行前:执行前:A=00 0000 0000 A=00 0000 0000 执行后:执行后:A=00 6CAC BD90A=00 6CAC BD90 AR3=0100 AR3=0102 AR3=0100 AR3=0102 (0100h0100h)=6CAC=6CAC(高字)(高字)(010
18、0h0100h)=6CAC=6CAC (0101h0101h)=BD90=BD90(低字)(低字)(0101h0101h)=BD90=BD9013(2 2)奇地址排列法)奇地址排列法 指令中给出的地址为奇地址,存储器中低指令中给出的地址为奇地址,存储器中低地址存放低地址存放低1616位操作数。位操作数。如:如:DLD DLD *AR3+,AAR3+,A执行前:执行前:A=00 0000 0000 A=00 0000 0000 执行后:执行后:A=00 BD90 6CACA=00 BD90 6CAC AR3=0101 AR3=0103 AR3=0101 AR3=0103 (0100h0100h)
19、=6CAC=6CAC(低字)(低字)(0100h0100h)=6CAC=6CAC (0101h0101h)=BD90=BD90(高字)(高字)(0101h0101h)=BD90=BD90推荐采用偶地址排列法,将高推荐采用偶地址排列法,将高1616位操作数放在偶地址存储单元位操作数放在偶地址存储单元中。如:中。如:程序存储器程序存储器 .long 12345678 h .long 12345678 h ;偶地址:;偶地址:12341234 ;奇地址:;奇地址:56785678 数据存储器数据存储器 .bss xhi,2,1,1 .bss xhi,2,1,1 ;偶地址:;偶地址:xhi xhi ;
20、奇地址:;奇地址:xloxlo 变量名称变量名称 字长字长 页邻接页邻接 偶地址排列法偶地址排列法 14例例5-9 计算计算Z Z3232=X=X3232+Y+Y3232。标准运算标准运算 长字运算长字运算 LD xhi,16,A DLD xhi,ALD xhi,16,A DLD xhi,A ADDS xlo,AADDS xlo,A DADD yhi,ADADD yhi,A ADD yhi,16,AADD yhi,16,A DST A,zhi DST A,zhi ADDS ylo,AADDS ylo,A (3 3个字,个字,3 3个个T T)STH A,Zhi STH A,Zhi STL A,
21、Zlo STL A,Zlo(6 6个字,个字,6 6个个T T)15(1)(1)并行运算指同时利用并行运算指同时利用D D总线和总线和E E总线。总线。其中,其中,D D总线用来执行加载或算术运算,总线用来执行加载或算术运算,E E总总线用来存放先前的结果。线用来存放先前的结果。(2)(2)并行指令都是单字单周期指令。并行指令都是单字单周期指令。(3)(3)并行运算时所存储的是前面的运算结并行运算时所存储的是前面的运算结果,存储之后再进行加载或算术运算。果,存储之后再进行加载或算术运算。(4)(4)并行指令都工作在累加器的高位。并行指令都工作在累加器的高位。(5)(5)大多数并行运算指令都受累
22、加器移位大多数并行运算指令都受累加器移位方式方式ASMASM位影响。位影响。6 6并行运算并行运算 特特点点16表表5-1 5-1 并行指令举例并行指令举例指指 令令指指 令令举举 例例操作说明操作说明并行加载和乘法指令并行加载和乘法指令LDMACRLDMACRLDMASRLDMASRLD Xmem,dstLD Xmem,dstMACR Ymem,dstMACR Ymem,dstdst=Xmem16dst=XmemYmem=src(16-ASM16-ASM)dst=Xmem16dst=XmemYmem=src(16-ASM16-ASM)dst=dst+Tdst=dst+T*XmemXmem并行
23、存储和加并行存储和加/减法减法指令指令STADDSTADDSTSUBSTSUBST src,YmemST src,YmemADD Xmem,dstADD Xmem,dstYmem=srcYmem=src(16-ASM16-ASM)dst=dst+Xmemdst=dst+Xmem17例例5-10 编写计算编写计算z=x+yz=x+y和和f=d+ef=d+e的程序段。的程序段。在此程序段中用到了并行存储在此程序段中用到了并行存储/加载指令,即在同一机器周期加载指令,即在同一机器周期内利用内利用E E总线存储和总线存储和D D总线加载。总线加载。数据存储器分配如图数据存储器分配如图5-45-4所示。
24、所示。.title “cjy3.asm”.title “cjy3.asm”.mmregs .mmregsSTACK .usect“STACK”,10HSTACK .usect“STACK”,10H .bss x,3 .bss x,3 ;为第一组变量;为第一组变量 ;分配;分配3 3个存储单元个存储单元 .bss d,3 .bss d,3 ;为第二组变量;为第二组变量 ;分配;分配3 3个存储单元个存储单元 .def start.def start .data .datatable:.word 0123H,1027H,0,1020H,0345H,0table:.word 0123H,1027H,
25、0,1020H,0345H,018 .text .text start:STM#0,SWWSR start:STM#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 ;将第一组变量的首地址传给;将第一组变量的首地址传给AR5 AR5 STM#d,AR2 STM#d,AR2 ;将第二组变量的首地址传给;将第二组变量的首地址传给AR2AR2 LD#0,ASM LD#0,ASM ;设置;设置ASM=0
展开阅读全文