c54x汇编语言程序设计,第5章-'c54x的汇编语言程序设计a

《第5章-'c54x的汇编语言程序设计a》由会员分享,可在线阅读,更多相关《第5章-'c54x的汇编语言程序设计a(69页珍藏版)》请在皮匠网上搜索。

1、2018年7月6日,DSP原理及应用,1,第5章 TMS320C54x汇编语言程序设计,内容提要 汇编语言程序设计是应用软件设计的基础,主要任务是利用汇编指令和伪指令编写源程序以完成指定的功能。本章将结合例子介绍TMS320C54x汇编语言源程序设计的基本方法。,2018年7月6日,DSP原理及应用,2,第5章 TMS320C54x汇编语言程序设计,5.1 概述 5.2 堆栈的使用方法 5.3 控制程序5.4 算术运算程序5.5 重复操作程序5.6 数据块传送程序5.7 小数运算程序5.8 浮点运算程序,2018年7月6日,DSP原理及应用,3,第5章 TMS320C54x汇编语言程序设计,5。

2、.1 概述,汇编语言程序以.asm为扩展名,可以用任意的编辑器编写源文件。一条语句占源程序的一行,长度可以是源文件编辑器格式允许的长度,但汇编器每行最多读200个字符。,5.1.1 汇编语言源程序格式,2018年7月6日,DSP原理及应用,4,第5章 TMS320C54x汇编语言程序设计,1. 源文件格式,5.1.1 汇编语言源程序格式,助记符指令源语句的每一行通常包含4个部分:标号区、助记符区、操作数区和注释区。,标号: 助记符 操作数 ; 注释,助记符指令语法格式:,【例5.1.1】 助记符指令源语句举例。 NANHUA .set 1 ; 符号NANHUA1Begin: LD #NANHU。

3、A,AR1 ; 将1加载到AR1,标 号,助记符,操作数,注 释,2018年7月6日,DSP原理及应用,5,第5章 TMS320C54x汇编语言程序设计,5.2 堆栈的使用方法,当程序调用中断服务程序或子程序时,需要将程序计数器PC的值和一些重要的寄存器值进行压栈保护,以便程序返回时能从间断处继续执行。C54x提供一个用16位堆栈指针SP寻址的软件堆栈。当向堆栈中压入数据时,堆栈是从高地址向低地址方向填入,堆栈指针SP先减1,然后将数据压入堆栈。当从堆栈中弹出数据时。数据先从堆栈中弹出,然后堆栈指针SP加1。,2018年7月6日,DSP原理及应用,6,第5章 TMS320C54x汇编语言程序设。

4、计,5.2 堆栈的使用方法,1. 堆栈的设置,size .set 120stack .usect “STACK”,sizeSTM # stack + size,SP,在数据RAM空间开辟一个堆栈区。,在RAM中定义一个STACK的保留空间,共120个单元,设置堆栈指针,# stack + sizeSP。,保留区的高地址赋给SP,作为堆栈的栈底,若程序中要使用堆栈,必须先进行设置,如:,设置好堆栈后,就可以使用堆栈了,如:CALL pmad ;(SP)-1SP,(PC)+2TOS,pmadPCRET ;(TOS)PC,(SP)+1SP,2018年7月6日,DSP原理及应用,7,第5章 TMS32。

5、0C54x汇编语言程序设计,5.3 控制程序,C54x具有丰富的程序控制指令,利用这些指令可以执行分支转移、子程序调用、子程序返回,条件执行以及循环等控制操作。,5.3.1 分支操作程序,程序控制中的分支操作包括:分支转移程序子程序调用子程序返回条件操作程序,2018年7月6日,DSP原理及应用,8,第5章 TMS320C54x汇编语言程序设计,5.3.1 分支操作程序,通过传送控制到程序存储器的其他位置,分支转移会中断连续的指令流。分支转移指令可以改写PC值,使程序改变流向。其指令分为无条件分支转移和条件分支转移两类。两者都可以带延时操作和不带延时操作。,1. 分支转移程序,2018年7月6。

6、日,DSP原理及应用,9,第5章 TMS320C54x汇编语言程序设计,无条件分支转移:无条件执行分支转移;条件分支转移:要在满足用户一个或多个条件时才执行分支转移;远程分支转移:允许分支转移到扩展存储器。,1. 分支转移程序,【例5.3.1】 分支转移举例。STM #1000H,AR0LD #88H,Azhong: SUB *AR0,ABC zhong,AGT,AOV,;将操作数#88H装入AR0;将操作数#1000H装入ACC ;将A中的内容减去AR0中的;内容结果装入A;若累加器A0且溢出,;则转至zhong,否则往下执行,2018年7月6日,DSP原理及应用,10,第5章 TMS320。

7、C54x汇编语言程序设计,5.3.1 分支操作程序,当函数的子程序被调用时,紧跟在调用后的下一条指令的地址保存在堆栈中。这个地址用于返回到调用程序并继续执行调用前的程序。子程序调用操作分成两种形式:无条件调用和条件调用,两者都可以带延时操作和不带延时操作。,2. 子程序调用程序,2018年7月6日,DSP原理及应用,11,第5章 TMS320C54x汇编语言程序设计,2. 子程序调用程序,2018年7月6日,DSP原理及应用,12,第5章 TMS320C54x汇编语言程序设计,2. 子程序调用程序,无条件调用是指无条件执行调用。条件调用和无条件调用操作相同,但是条件调用要在满足一个或多个条件时。

8、才执行调用。远程调用允许对扩展存储器的子程序或函数进行调用。,2018年7月6日,DSP原理及应用,13,第5章 TMS320C54x汇编语言程序设计,2. 子程序调用程序,【例5.3.2】 子程序调用举例。,STM #1000H,AR0LD #2000H,AR1CALL newSTL A,*AR1end: B endnew:MPY *AR0,*AR1,ARET,;将操作数#1000H装入AR0;将操作数#2000H装入AR1;调子程序new;将A的内容存入*AR1;AR0与AR1所指的内容相乘,结果放入A中;子程序返回,2018年7月6日,DSP原理及应用,14,第5章 TMS320C54x。

9、汇编语言程序设计,5.3.1 分支操作程序,C54x的一些指令只有在满足一个或是多个条件后才被执行,如条件分支转移、条件调用和条件返回等指令。 这些指令都用条件来限制分支转移、调用和返回操作。这些条件可用条件算符来表示。,3. 条件,2018年7月6日,DSP原理及应用,15,第5章 TMS320C54x汇编语言程序设计,3. 条件,2018年7月6日,DSP原理及应用,16,第5章 TMS320C54x汇编语言程序设计,3. 条件,在条件操作时也可以要求有多个条件,只有所有条件满足时才被认为是满足条件。这种多个条件的组合就构成了指令的多重条件。,2018年7月6日,DSP原理及应用,17,第。

10、5章 TMS320C54x汇编语言程序设计,【例5.3.3】 条件操作程序。,BC sub,BLEQ ; 条件分支转移 若累加器B0,则转至sub,否则,往下执行CC start,AGEQ,AOV ; 条件调用若累加器A0且溢出,则调用start,否则往下执行RC NTC ; 条件返回 若TC = 0,则返回,否则往下执行,2018年7月6日,DSP原理及应用,18,第5章 TMS320C54x汇编语言程序设计,5.3.1 分支操作程序,4. 比较转移程序,利用比较指令CMPR可实现比较转移操作。,比较操作指令:CMPR 测试条件,辅助寄存器ARx 指令功能:辅助寄存器ARx与AR0进行比较,。

11、若比较结果使所给定的测试条件成立,则TC位置1。实现方法: 通过CMPR的比较结果得TC值; 根据TC值,由条件转移指令实现分支转移。,2018年7月6日,DSP原理及应用,19,第5章 TMS320C54x汇编语言程序设计,例如:比较操作后条件分支转移 STM #1000H,AR1 ; AR1=5STM #1005H,AR0 ; AR0=10loop: *AR1+ ; AR1=AR1+1CMPR LT,AR1 ;若AR1-AR0|除数|,例: 编写16384512的程序,.bss num,1.bss den,1.bss quot,1.datatable .word 16 384 .word 。

12、512 .textstart: STM #num,AR1 RPT #1MVPD table,*AR1+,;16 384;512;传送2个数据至分子、分母单元,2018年7月6日,DSP原理及应用,31,第5章 TMS320C54x汇编语言程序设计,5.4.2 除法运算,|被除数|除数|,例: 编写16384512的程序,LD den,16,AMPYA numABS ASTH A,denLD num,AABS ARPT #15SUBC den,A XC 1,BLT NEG A STL A,quot,;将分母移到累加器A(3116) ;(num)*A(3216)B,获取商的符号 ;分母取绝对值 ;。

13、分母绝对值存回原处 ;分子AL ;分子取绝对值;16次减法重复操作,完成除法 ;如果B|除数|,例: 编写16384512的程序,运行结果:,注意:SUBC指令仅对无符号数进行操作,因此先对被除数和除数取绝对值,然后利用乘法操作获取商的符号,最后通过条件操作指令给商加上适当的符号。,2018年7月6日,DSP原理及应用,33,第5章 TMS320C54x汇编语言程序设计,5.4 算术运算程序,5.4.3 长字运算和并行运算,长字指令:DLD Lmem,dstDST src,LmemDADD Lmem,src,dstDSUB Lmem,src,dstDRSUB Lmem,src,dst,1.长字。

14、运算,;dst=Lmem 单周期;Lmem=src 双周期;dst=src+Lmem 单周期;dst=src-Lmem 单周期;dst=Lmem-src 单周期,C54x可以利用32位长操作数进行长字运算。,2018年7月6日,DSP原理及应用,34,第5章 TMS320C54x汇编语言程序设计,1.长字运算,(1) 偶地址排列,如: DLD *AR3+,A,执行前:A,AR3,高字,低字,执行后:A,AR3,6CAC,0101,BD90,0102,指令中给出的地址为偶地址,则存储器低地址存放高16位操作数。,2018年7月6日,DSP原理及应用,35,第5章 TMS320C54x汇编语言程序。

15、设计,1.长字运算,(1) 偶地址排列,【例5.4.5】 偶地址排列法举例。,.bss a,2.bss y,2.datatable: .word 06CACH,0BD90H.textSTM #a,AR1RPT #1MVPD table,*AR1+STM #a,AR3DLD *AR3+,A,执行前: A = 00 0000 0000hAR3 = 0100h(0100h)= 6CACh(高字)(0101h)= BD90h(低字),执行后: A = 00 6CAC BD90h AR3 = 0102h (0100h)= 6CACh (0101h)= BD90h,2018年7月6日,DSP原理及应用,3。

16、6,第5章 TMS320C54x汇编语言程序设计,1.长字运算,(2) 奇地址排列,如: DLD *AR3+,A,执行前:A,AR3,低字,高字,执行后:A,BD90,6CAC,AR3,0102,0103,指令中给出的地址为奇地址,则存储器低地址存放低16位操作数。,2018年7月6日,DSP原理及应用,37,第5章 TMS320C54x汇编语言程序设计,5.4.3 长字运算和并行运算,2.并行运算,并行运算就是同时利用D总线和E总线,通过并行指令来实现数据的加载和算术运算。,D总线用来执行加载或算术运算。E总线用来存放先前的结果。,并行指令:,并行加载和乘法指令,并行加载和存储指令,并行存储。

17、和乘法指令,并行存储和加/减指令,2018年7月6日,DSP原理及应用,38,第5章 TMS320C54x汇编语言程序设计,2.并行运算,LD|MACRLD|MASR例如:LD Xmem,dst1|MACR Ymem,dst2功能:dst1=Xmem(16-ASM);dst=Xmem(16-ASM);dst=dst+T*Xmem。,并行存储和乘法指令:,2018年7月6日,DSP原理及应用,41,第5章 TMS320C54x汇编语言程序设计,2.并行运算,ST|ADDST|SUB例如:ST src,Ymem |ADD Xmem,dst功能:Ymem=src(16-ASM);dst=dst+Xm。

18、em。,并行存储和加/减指令:,2018年7月6日,DSP原理及应用,42,第5章 TMS320C54x汇编语言程序设计,2.并行运算,注 意并行指令均为单字单周期指令;并行指令先存储,后加载或算术运算;并行指令的操作均在累加器的高位中进行,并且大多数指令受ASM位的影响。,2018年7月6日,DSP原理及应用,43,第5章 TMS320C54x汇编语言程序设计,2.并行运算,【例5.4.8】编写计算z=x+y和f=e+d的程序, bss x,3 bss d,3 STM #x,AR5STM #d,AR2LD #0,ASMLD *AR5+,16,AADD *AR5+,16,AST A,*AR5|。

19、LD *AR2+,BADD *AR2+,16,BSTH B,AR2, bss x,3, bss d,3,STM #x,AR5,LD #0,ASM,LD *AR5+,16,A,ADD *AR5+,16,A,ST A,*AR5,|LD *AR2+,B,ADD *AR2+,16,B,STH B,*AR2,STM #d,AR2,2018年7月6日,DSP原理及应用,44,第5章 TMS320C54x汇编语言程序设计,5.5 重复操作程序,C54x的重复操作是使CPU重复执行一条指令或一段指令。可以分为单指令重复和块程序重复。,实现重复操作的指令:RPT 重复下条指令; RPTZ 累加器清0,并重复下条。

20、指令;RPTB 块重复指令。,使用RPT、RPTZ能重复下一条指令;而RPTB用于重复代码块若干次。利用重复指令可实现比BANZ指令更快的循环程序。,2018年7月6日,DSP原理及应用,45,第5章 TMS320C54x汇编语言程序设计,5.5.1 单指令重复操作,【例5.5.1】对数组进行初始化,使x8=0,0,0,0,0,0,0,0。,.bss x, 8 STM #x, AR1LD #0, ARPT #7STL A,*AR1+,.bss x, 8 STM #x, AR1,RPTZ A, #7 STL A, *AR1+,注意:, 对x8中的8个元素置0,重复次数为7,即执行1次STL A,。

21、AR1+指令后,再重复执行7次;, RPTZ指令设定重复次数后,再对累加器清零。,2018年7月6日,DSP原理及应用,46,第5章 TMS320C54x汇编语言程序设计,5.5 重复操作程序,5.5.2 块程序重复操作,对于整个程序块需要重复操作时,可采用程序块重复操作。,通常RPTB的操作数为程序块的结束地址,而重复次数可用STM指令对BRC进行设定。,2018年7月6日,DSP原理及应用,47,第5章 TMS320C54x汇编语言程序设计,5.5.2 块程序重复操作,【例5.5.2】对数组x8中的每一元素加1。,.bss x, 8begin: LD #1,16,BSTM #7,BRCST。

22、M #x,AR4RPTB next-1ADD *AR4,16,B,ASTH A,*AR4+next: LD #0,B,;设置数组空间;立即数1送入BH;设置重复次数,BRC=7,循环8次;数组首地址x送入AR4;设置循环结束地址;数组数据左移16位与BH相加;存入数组结果,并修改地址;B清0,注 意 块结束地址REA通常取程序块最后一条指令的下一条指令地址-1; 重复次数为7次 RPTB指令可以响应中断。,2018年7月6日,DSP原理及应用,48,第5章 TMS320C54x汇编语言程序设计,【例5.5.2】三重循环嵌套程序。,STM #L-1,AR7 ;2T1st: 外部STM #M-1,。

23、BRC ;2TRPTB 2nd-1 ;4T中间中间RPT #N-1 ;1T内部中间中间2nd: 外部外部BANZ 1st,*AR7- ;4T,内层,中层,外层,2018年7月6日,DSP原理及应用,49,第5章 TMS320C54x汇编语言程序设计,5.6 数据块传送程序,1. 数据传送指令,用于数据传送指令可分为四类:,(1) 数据存储器之间的数据传送,MVDK Smem,dmadMVKD dmad,SmemMVDD Xmem,Ymem,2字 2周期2字 2周期1字 1周期,2018年7月6日,DSP原理及应用,50,第5章 TMS320C54x汇编语言程序设计,1. 数据传送指令,(2) 。

24、数据存储器与MMR之间的数据传送,MVDM dmad,MMR MVMD MMR,dmad MVMM MMRx,MMRy,2字 2周期2字 2周期1字 2周期,(3) 程序存储器和数据存储器之间的数据传送,MVPD pmad,Smem MVDP Smem,pmad READA Smem WRITA Smem,2字 3周期2字 4周期1字 5周期1字 5周期,2018年7月6日,DSP原理及应用,51,第5章 TMS320C54x汇编语言程序设计,1. 数据传送指令,(4) 从PA口读/写数据,PORTR PA,Smem PORTW Smem,PA,2字 2周期2字 2周期,数据传送指令的特点,传。

25、送速度比加载和存储指令要快; 数据传送不通过累加器;可寻址程序存储器; 与RPT结合,可实现数据块传送。,2018年7月6日,DSP原理及应用,52,第5章 TMS320C54x汇编语言程序设计,2. 程序存储器至数据存储器的数据传送,重复执行MVPD指令,可以实现程序存储器至数据存储器的数据传送,在系统初始化过程中十分有用。,【例5.6.1】数组x8=0,1,2,3,4,5,6,7初始化。,. bss x,8 . dataTBL: . word 0,1,2,3,4,5,6,7 . textSTART:STM #x,AR5RPT #7MVPD TBL,*AR5+,2018年7月6日,DSP原理。

26、及应用,53,第5章 TMS320C54x汇编语言程序设计,3. 数据存储器之间的数据传送,在数字信号处理时,经常需要将数据存储器中的一批数据传送到数据存储器的另一个地址空间。,【例5.6.2】进行N点FFT运算时,为节约存储空间要用到原位计算,将数组X16赋到数组Y16,计算一个蝶形后,所得输出数据可以立即存入原输入数据所占用的存储单元。,.bss x,16 .bss y,16 STM #x,AR2 STM #y,AR3 RPT #15 MVDD AR2+,*AR3+,2018年7月6日,DSP原理及应用,54,第5章 TMS320C54x汇编语言程序设计,5.7 小数运算程序,在定点DSP。

27、芯片中,采用定点数进行数值运算时,若操作数采用整型数,则DSP芯片给定的字长(一般16位)决定了整型数的最大范围。,1.通常,定点DSP采用小数乘法。其原因:, 乘法器为16位,对于大于16位的数据难以实现乘法递推,且乘积占用存储资源大; 小数乘法时,既可以存储32位乘积,也可以存储高16位乘积,可用较少的资源保存结果; 小数乘法便于乘法递推。,2018年7月6日,DSP原理及应用,55,第5章 TMS320C54x汇编语言程序设计,2. 小数的表示方法,如: 1 7FFFH0.5 4000H0.25 2000H0 0000H-0.25 E000H-0.5 C000H-1 8000H,132 。

28、768=7FFFH0.532 768=4000H0.2532 768=2000H032 768=0000H(0.2532 768)补=E000H(0.532 768)补=C000H(132 768)补=8000H,注意:汇编时,不能直接写成十进制小数。,如:0.907 .word 32 768*907/1000,2018年7月6日,DSP原理及应用,56,第5章 TMS320C54x汇编语言程序设计,3. 小数乘法与冗余符号位,在小数乘法编程时,应事先设置FRCT位,如:SSBX FRCTMPY *AR2,*AR3,ASTH A,Z完成了Q15*Q15=Q15的小数乘法。,2018年7月6日,。

29、DSP原理及应用,57,第5章 TMS320C54x汇编语言程序设计,【例5.7.1】 编制计算 的程序,a1=0.3 a2=0.2 a3=-0.4 a4=0.1x1=0.6 x2=0.5 x3=-0.1 x4=-0.2,.bss a,4.bss x,4.bss y,1.datatable: .word 3*32768/10.word 2*32768/10.word -4*32768/10.word 1*32768/10.word 6*32768/10.word 5*32768/10.word -1*32768/10.word -2*32768/10,a,x,y,2018年7月6日,DSP原理及应用,58,第5章 TMS320C54x汇编语言程序设计,。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值