C54x的汇编语言程序设计.ppt

上传人:za****8 文档编号:15170027 上传时间:2020-08-04 格式:PPT 页数:69 大小:1.19MB
返回 下载 相关 举报
C54x的汇编语言程序设计.ppt_第1页
第1页 / 共69页
C54x的汇编语言程序设计.ppt_第2页
第2页 / 共69页
C54x的汇编语言程序设计.ppt_第3页
第3页 / 共69页
点击查看更多>>
资源描述
2020年8月4日,DSP原理及应用,1,第5章 TMS320C54x汇编语言程序设计,内容提要 汇编语言程序设计是应用软件设计的基础,主要任务是利用汇编指令和伪指令编写源程序以完成指定的功能。 本章将结合例子介绍TMS320C54x汇编语言源程序设计的基本方法。,2020年8月4日,DSP原理及应用,2,第5章 TMS320C54x汇编语言程序设计,5.1 概述 5.2 堆栈的使用方法 5.3 控制程序 5.4 算术运算程序 5.5 重复操作程序 5.6 数据块传送程序 5.7 小数运算程序 5.8 浮点运算程序,2020年8月4日,DSP原理及应用,3,第5章 TMS320C54x汇编语言程序设计,5.1 概述,汇编语言程序以.asm为扩展名,可以用任意的编辑器编写源文件。一条语句占源程序的一行,长度可以是源文件编辑器格式允许的长度,但汇编器每行最多读200个字符。,5.1.1 汇编语言源程序格式,2020年8月4日,DSP原理及应用,4,第5章 TMS320C54x汇编语言程序设计,1. 源文件格式,5.1.1 汇编语言源程序格式,助记符指令源语句的每一行通常包含4个部分:标号区、助记符区、操作数区和注释区。,标号: 助记符 操作数 ; 注释,助记符指令语法格式:,【例5.1.1】 助记符指令源语句举例。 NANHUA .set 1 ; 符号NANHUA1 Begin: LD #NANHUA,AR1 ; 将1加载到AR1,标 号,助记符,操作数,注 释,2020年8月4日,DSP原理及应用,5,第5章 TMS320C54x汇编语言程序设计,5.2 堆栈的使用方法,当程序调用中断服务程序或子程序时,需要将程序计数器PC的值和一些重要的寄存器值进行压栈保护,以便程序返回时能从间断处继续执行。 C54x提供一个用16位堆栈指针SP寻址的软件堆栈。 当向堆栈中压入数据时,堆栈是从高地址向低地址方向填入,堆栈指针SP先减1,然后将数据压入堆栈。 当从堆栈中弹出数据时。数据先从堆栈中弹出,然后堆栈指针SP加1。,2020年8月4日,DSP原理及应用,6,第5章 TMS320C54x汇编语言程序设计,5.2 堆栈的使用方法,1. 堆栈的设置,size .set 120 stack .usect “STACK”,size STM # stack + size,SP,在数据RAM空间开辟一个堆栈区。,在RAM中定义一个STACK 的保留空间,共120个单元,设置堆栈指针,# stack + sizeSP。,保留区的高地址赋给SP, 作为堆栈的栈底,若程序中要使用堆栈,必须先进行设置,如:,设置好堆栈后,就可以使用堆栈了,如: CALL pmad ;(SP)-1SP,(PC)+2TOS,pmadPC RET ;(TOS)PC,(SP)+1SP,2020年8月4日,DSP原理及应用,7,第5章 TMS320C54x汇编语言程序设计,5.3 控制程序,C54x具有丰富的程序控制指令,利用这些指令可以执行分支转移、子程序调用、子程序返回,条件执行以及循环等控制操作。,5.3.1 分支操作程序,程序控制中的分支操作包括: 分支转移程序 子程序调用 子程序返回 条件操作程序,2020年8月4日,DSP原理及应用,8,第5章 TMS320C54x汇编语言程序设计,5.3.1 分支操作程序,通过传送控制到程序存储器的其他位置,分支转移会中断连续的指令流。 分支转移指令可以改写PC值,使程序改变流向。其指令分为无条件分支转移和条件分支转移两类。两者都可以带延时操作和不带延时操作。,1. 分支转移程序,2020年8月4日,DSP原理及应用,9,第5章 TMS320C54x汇编语言程序设计,无条件分支转移:无条件执行分支转移; 条件分支转移:要在满足用户一个或多个条件时才执行分支转移; 远程分支转移:允许分支转移到扩展存储器。,1. 分支转移程序,【例5.3.1】 分支转移举例。 STM #1000H,AR0 LD #88H,A zhong: SUB *AR0,A BC zhong,AGT,AOV,;将操作数#88H装入AR0 ;将操作数#1000H装入ACC ;将A中的内容减去AR0中的 ;内容结果装入A ;若累加器A0且溢出, ;则转至zhong,否则往下执行,2020年8月4日,DSP原理及应用,10,第5章 TMS320C54x汇编语言程序设计,5.3.1 分支操作程序,当函数的子程序被调用时,紧跟在调用后的下一条指令的地址保存在堆栈中。这个地址用于返回到调用程序并继续执行调用前的程序。 子程序调用操作分成两种形式:无条件调用和条件调用,两者都可以带延时操作和不带延时操作。,2. 子程序调用程序,2020年8月4日,DSP原理及应用,11,第5章 TMS320C54x汇编语言程序设计,2. 子程序调用程序,2020年8月4日,DSP原理及应用,12,第5章 TMS320C54x汇编语言程序设计,2. 子程序调用程序,无条件调用是指无条件执行调用。 条件调用和无条件调用操作相同,但是条件调用要在满足一个或多个条件时才执行调用。 远程调用允许对扩展存储器的子程序或函数进行调用。,2020年8月4日,DSP原理及应用,13,第5章 TMS320C54x汇编语言程序设计,2. 子程序调用程序,【例5.3.2】 子程序调用举例。,STM #1000H,AR0 LD #2000H,AR1 CALL new STL A,*AR1 end: B end new:MPY *AR0,*AR1,A RET,;将操作数#1000H装入AR0 ;将操作数#2000H装入AR1 ;调子程序new ;将A的内容存入*AR1 ;AR0与AR1所指的内容相乘,结果放入A中 ;子程序返回,2020年8月4日,DSP原理及应用,14,第5章 TMS320C54x汇编语言程序设计,5.3.1 分支操作程序,C54x的一些指令只有在满足一个或是多个条件后才被执行,如条件分支转移、条件调用和条件返回等指令。 这些指令都用条件来限制分支转移、调用和返回操作。这些条件可用条件算符来表示。,3. 条件,2020年8月4日,DSP原理及应用,15,第5章 TMS320C54x汇编语言程序设计,3. 条件,2020年8月4日,DSP原理及应用,16,第5章 TMS320C54x汇编语言程序设计,3. 条件,在条件操作时也可以要求有多个条件,只有所有条件满足时才被认为是满足条件。这种多个条件的组合就构成了指令的多重条件。,2020年8月4日,DSP原理及应用,17,第5章 TMS320C54x汇编语言程序设计,【例5.3.3】 条件操作程序。,BC sub,BLEQ ; 条件分支转移 若累加器B0,则转至sub, 否则,往下执行 CC start,AGEQ,AOV ; 条件调用 若累加器A0且溢出, 则调用start,否则往下执行 RC NTC ; 条件返回 若TC = 0,则返回,否则往下执行,2020年8月4日,DSP原理及应用,18,第5章 TMS320C54x汇编语言程序设计,5.3.1 分支操作程序,4. 比较转移程序,利用比较指令CMPR可实现比较转移操作。,比较操作指令: CMPR 测试条件,辅助寄存器ARx 指令功能:辅助寄存器ARx与AR0进行比较, 若比较结果使所给定的测试条件成立,则TC位置1。 实现方法: 通过CMPR的比较结果得TC值; 根据TC值,由条件转移指令实现分支转移。,2020年8月4日,DSP原理及应用,19,第5章 TMS320C54x汇编语言程序设计,例如:比较操作后条件分支转移 STM #1000H,AR1 ; AR1=5 STM #1005H,AR0 ; AR0=10 loop: *AR1+ ; AR1=AR1+1 CMPR LT,AR1 ;若AR1-AR00,则TC=1,否则为0 BC loop, TC ;若AR1-AR00,则循环 若AR1=AR0,则顺序执行,2020年8月4日,DSP原理及应用,20,第5章 TMS320C54x汇编语言程序设计,5.3 控制程序,5.3.2 循环操作程序,在程序设计时,经常需要重复执行某一段程序。利用BANZ(当辅助寄存器不为0时转移)指令可实现循环计数和操作。,循环操作指令: BANZ 转移地址,辅助寄存器 指令功能:当辅助寄存器不为0时,则转至转移地址,否则顺序执行。,2020年8月4日,DSP原理及应用,21,第5章 TMS320C54x汇编语言程序设计,5.3.2 循环操作程序,【例5.3.4】,.bss x,10 ;给x保留10个空间 .bss y,1 ;给y保留1个空间 STM #x,AR1 ;设置数据段的首地址 STM #9,AR2 ;设置循环计数值 LD #0,A ;累加器清0 loop: ADD *AR1+,A ;累加运算,并修改地址 BANZ loop,*AR2- ;若计数值不为0,则循环,并计数值减1 若计数值为0,则结束循环 STL A, y ;累加和存入y中,用AR2作为循环计数器,由BANZ实现程序的循环控制。,注意: BANZ loop, *AR2- ;先判断,再修正AR2=AR2-1,2020年8月4日,DSP原理及应用,22,第5章 TMS320C54x汇编语言程序设计,5.4 算术运算程序,基本算术运算包括: 加减法和乘法运算 除法运算 长字和并行运算,2020年8月4日,DSP原理及应用,23,第5章 TMS320C54x汇编语言程序设计,5.4 算术运算程序,5.4.1 加、减法和乘法运算,在数字信号处理中,加法和乘法运算是最常见的算术运算。,【例5.4.1】 计算y = a x + b,程序: LD a, T ;取a值,T=a MPY x, B ;完成ax乘积,B=ax ADD b, B ;完成ax+b运算,B=ax+b STL B, y ;计算结果存入y中,2020年8月4日,DSP原理及应用,24,第5章 TMS320C54x汇编语言程序设计,5.4.1 加、减法和乘法运算,【例5.4.2】 计算y = xl al + x2 a2,程序: LD x1, T MPY a1, B LD x2, T MAC a2, B STL B, y STH B, y+1,;T=x1 ;B=x1a1 ;T=x2 ;乘法累加,B=x1a1+x2a2 ;计算结果的低字BL存入y中 ;计算结果的高字BH存入y+1中,2020年8月4日,DSP原理及应用,25,第5章 TMS320C54x汇编语言程序设计,5.4.1 加、减法和乘法运算,【例5.4.3】计算 y =,程序: * * example.asm * * .title “example.asm” .mmregs stack .usect “STACK”,10h .bss a,4 .bss x,4 .bss y,1 .def start .data,;为堆栈指定空间 ;为变量分配9个字的空间,2020年8月4日,DSP原理及应用,26,第5章 TMS320C54x汇编语言程序设计,5.4.1 加、减法和乘法运算,【例5.4.3】计算 y =,程序:,table: .word 1,2,3,4 .word 8,6,4,2 .text start: STM #0,SWWSR STM #STACK+10h,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ CALL SUM end: B end,; 变量初始化 ; 插入0个等待状态 ; 设置堆栈指针 ; AR1指向a ; 移动8个数据 ; 从程序存储器到数据存储器 ; 调用SUM子程序,2020年8月4日,DSP原理及应用,27,第5章 TMS320C54x汇编语言程序设计,5.4.1 加、减法和乘法运算,【例5.4.3】计算 y =,程序:,SUM: STM #a, AR3 STM #x, AR4 RPTZ A, #3 MAC *AR3+,*AR4+,A STL A, y RET .end,;子程序执行,2020年8月4日,DSP原理及应用,28,第5章 TMS320C54x汇编语言程序设计,5.4.1 加、减法和乘法运算,【例5.4.4】求4项乘积aixi(i=1,2,3,4)中的最大值,并存放累加器A中。,程序: STM #a, AR1 STM #x, AR2 STM #2, AR3 LD *AR1+,T MPY *AR2+,A loop1: LD *AR1+,T MPY *AR2+,B MAX A BANZ loop1,*AR3-,;ai首地址a给AR1 ;xi首地址x给AR2 ;设置计数器AR3=2 ;取系数T=ai,并修改AR1 ;乘法运算A=aixi,并修改AR2 ;取系数T=ai,并修改AR1 ;乘法运算B=aixi,并修改AR2 ;求A和B中的最大值 ;若AR30,则循环,并修改AR3 若AR3=0,则不循环,2020年8月4日,DSP原理及应用,29,第5章 TMS320C54x汇编语言程序设计,5.4 算术运算程序,5.4.2 除法运算,在C54x中没有除法器硬件,也没有专门的除法指令。但是,利用条件减法指令(SUBC)和重复指令(RPT)可实现两个无符号数的除法运算。,条件减法指令: SUBC Smem, src 功能:(src)-(Smem)15ALU输出端 若ALU输出0,则(ALU输出)1+1src 否则(src)1src,重复指令: RPT #K 功能:RC=#K,重复执行下条指令K+1次。,2020年8月4日,DSP原理及应用,30,第5章 TMS320C54x汇编语言程序设计,5.4.2 除法运算,|被除数|除数|,例: 编写16384512的程序,.bss num,1 .bss den,1 .bss quot,1 .data table .word 16 384 .word 512 .text start: STM #num,AR1 RPT #1 MVPD table,*AR1+,;16 384 ;512 ;传送2个数据至分子、分母单元,2020年8月4日,DSP原理及应用,31,第5章 TMS320C54x汇编语言程序设计,5.4.2 除法运算,|被除数|除数|,例: 编写16384512的程序,LD den,16,A MPYA num ABS A STH A,den LD num,A ABS A RPT #15 SUBC den,A XC 1,BLT NEG A STL A,quot,;将分母移到累加器A(3116) ;(num)*A(3216)B,获取商的符号 ;分母取绝对值 ;分母绝对值存回原处 ;分子AL ;分子取绝对值 ;16次减法重复操作,完成除法 ;如果B0(商是负数),则需要变号 ;保存商,2020年8月4日,DSP原理及应用,32,第5章 TMS320C54x汇编语言程序设计,5.4.2 除法运算,|被除数|除数|,例: 编写16384512的程序,运行结果:,注意:SUBC指令仅对无符号数进行操作,因此先对被除数和除数取绝对值,然后利用乘法操作获取商的符号,最后通过条件操作指令给商加上适当的符号。,2020年8月4日,DSP原理及应用,33,第5章 TMS320C54x汇编语言程序设计,5.4 算术运算程序,5.4.3 长字运算和并行运算,长字指令: DLD Lmem,dst DST src,Lmem DADD Lmem,src,dst DSUB Lmem,src,dst DRSUB Lmem,src,dst,1.长字运算,;dst=Lmem 单周期 ;Lmem=src 双周期 ;dst=src+Lmem 单周期 ;dst=src-Lmem 单周期 ;dst=Lmem-src 单周期,C54x可以利用32位长操作数进行长字运算。,2020年8月4日,DSP原理及应用,34,第5章 TMS320C54x汇编语言程序设计,1.长字运算,(1) 偶地址排列,如: DLD *AR3+,A,执行前:A,AR3,高字,低字,执行后:A,AR3,6CAC,0101,BD90,0102,指令中给出的地址为偶地址,则存储器低地址存放高16位操作数。,2020年8月4日,DSP原理及应用,35,第5章 TMS320C54x汇编语言程序设计,1.长字运算,(1) 偶地址排列,【例5.4.5】 偶地址排列法举例。,.bss a,2 .bss y,2 .data table: .word 06CACH,0BD90H .text STM #a,AR1 RPT #1 MVPD table,*AR1+ STM #a,AR3 DLD *AR3+,A,执行前: A = 00 0000 0000h AR3 = 0100h (0100h)= 6CACh(高字) (0101h)= BD90h(低字),执行后: A = 00 6CAC BD90h AR3 = 0102h (0100h)= 6CACh (0101h)= BD90h,2020年8月4日,DSP原理及应用,36,第5章 TMS320C54x汇编语言程序设计,1.长字运算,(2) 奇地址排列,如: DLD *AR3+,A,执行前:A,AR3,低字,高字,执行后:A,BD90,6CAC,AR3,0102,0103,指令中给出的地址为奇地址,则存储器低地址存放低16位操作数。,2020年8月4日,DSP原理及应用,37,第5章 TMS320C54x汇编语言程序设计,5.4.3 长字运算和并行运算,2.并行运算,并行运算就是同时利用D总线和E总线,通过并行指令来实现数据的加载和算术运算。,D总线用来执行加载或算术运算。 E总线用来存放先前的结果。,并行指令:,并行加载和乘法指令,并行加载和存储指令,并行存储和乘法指令,并行存储和加/减指令,2020年8月4日,DSP原理及应用,38,第5章 TMS320C54x汇编语言程序设计,2.并行运算,LD|MACR LD|MASR 例如: LD Xmem,dst1|MACR Ymem,dst2 功能:dst1=Xmem16; dst2=dst2+T*Ymem。,并行加载和乘法指令:,2020年8月4日,DSP原理及应用,39,第5章 TMS320C54x汇编语言程序设计,2.并行运算,ST|LD 例如: ST src,Ymem |LD Xmem,dst 功能:Ymem=src(16-ASM); dst=Xmem16。,并行加载和存储指令:,2020年8月4日,DSP原理及应用,40,第5章 TMS320C54x汇编语言程序设计,2.并行运算,ST|MPY ST|MACR ST|MASR 例如: ST src,Ymem |MACR Xmem,dst 功能:Ymem=src(16-ASM); dst=dst+T*Xmem。,并行存储和乘法指令:,2020年8月4日,DSP原理及应用,41,第5章 TMS320C54x汇编语言程序设计,2.并行运算,ST|ADD ST|SUB 例如: ST src,Ymem |ADD Xmem,dst 功能:Ymem=src(16-ASM); dst=dst+Xmem。,并行存储和加/减指令:,2020年8月4日,DSP原理及应用,42,第5章 TMS320C54x汇编语言程序设计,2.并行运算,注 意 并行指令均为单字单周期指令; 并行指令先存储,后加载或算术运算; 并行指令的操作均在累加器的高位中 进行,并且大多数指令受ASM位的影响。,2020年8月4日,DSP原理及应用,43,第5章 TMS320C54x汇编语言程序设计,2.并行运算,【例5.4.8】编写计算z=x+y和f=e+d的程序, bss x,3 bss d,3 STM #x,AR5 STM #d,AR2 LD #0,ASM LD *AR5+,16,A ADD *AR5+,16,A ST A,*AR5 |LD *AR2+,B ADD *AR2+,16,B STH 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,2020年8月4日,DSP原理及应用,44,第5章 TMS320C54x汇编语言程序设计,5.5 重复操作程序,C54x的重复操作是使CPU重复执行一条指令或一段指令。可以分为单指令重复和块程序重复。,实现重复操作的指令: RPT 重复下条指令; RPTZ 累加器清0,并重复下条指令; RPTB 块重复指令。,使用RPT、RPTZ能重复下一条指令;而RPTB用于重复代码块若干次。利用重复指令可实现比BANZ指令更快的循环程序。,2020年8月4日,DSP原理及应用,45,第5章 TMS320C54x汇编语言程序设计,5.5.1 单指令重复操作,【例5.5.1】对数组进行初始化,使x8=0,0,0,0,0,0,0,0。,.bss x, 8 STM #x, AR1 LD #0, A RPT #7 STL A,*AR1+,.bss x, 8 STM #x, AR1,RPTZ A, #7 STL A, *AR1+,注意:, 对x8中的8个元素置0,重复次数为7,即执行1次STL A,AR1+指令后,再重复执行7次;, RPTZ指令设定重复次数后,再对累加器清零。,2020年8月4日,DSP原理及应用,46,第5章 TMS320C54x汇编语言程序设计,5.5 重复操作程序,5.5.2 块程序重复操作,对于整个程序块需要重复操作时,可采用程序块重复操作。,通常RPTB的操作数为程序块的结束地址,而重复次数可用STM指令对BRC进行设定。,2020年8月4日,DSP原理及应用,47,第5章 TMS320C54x汇编语言程序设计,5.5.2 块程序重复操作,【例5.5.2】对数组x8中的每一元素加1。,.bss x, 8 begin: LD #1,16,B STM #7,BRC STM #x,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+ next: LD #0,B ,;设置数组空间 ;立即数1送入BH ;设置重复次数,BRC=7,循环8次 ;数组首地址x送入AR4 ;设置循环结束地址 ;数组数据左移16位与BH相加 ;存入数组结果,并修改地址 ;B清0,注 意 块结束地址REA通常取程序块最后一条指令的下一条指令地址-1; 重复次数为7次 RPTB指令可以响应中断。,2020年8月4日,DSP原理及应用,48,第5章 TMS320C54x汇编语言程序设计,【例5.5.2】三重循环嵌套程序。,STM #L-1,AR7 ;2T 1st: 外部 STM #M-1,BRC ;2T RPTB 2nd-1 ;4T 中间 中间 RPT #N-1 ;1T 内部 中间 中间 2nd: 外部 外部 BANZ 1st,*AR7- ;4T,内层,中层,外层,2020年8月4日,DSP原理及应用,49,第5章 TMS320C54x汇编语言程序设计,5.6 数据块传送程序,1. 数据传送指令,用于数据传送指令可分为四类:,(1) 数据存储器之间的数据传送,MVDK Smem,dmad MVKD dmad,Smem MVDD Xmem,Ymem,2字 2周期 2字 2周期 1字 1周期,2020年8月4日,DSP原理及应用,50,第5章 TMS320C54x汇编语言程序设计,1. 数据传送指令,(2) 数据存储器与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周期,2020年8月4日,DSP原理及应用,51,第5章 TMS320C54x汇编语言程序设计,1. 数据传送指令,(4) 从PA口读/写数据,PORTR PA,Smem PORTW Smem,PA,2字 2周期 2字 2周期,数据传送指令的特点,传送速度比加载和存储指令要快; 数据传送不通过累加器; 可寻址程序存储器; 与RPT结合,可实现数据块传送。,2020年8月4日,DSP原理及应用,52,第5章 TMS320C54x汇编语言程序设计,2. 程序存储器至数据存储器的数据传送,重复执行MVPD指令,可以实现程序存储器至数据存储器的数据传送,在系统初始化过程中十分有用。,【例5.6.1】数组x8=0,1,2,3,4,5,6,7初始化。,. bss x,8 . data TBL: . word 0,1,2,3,4,5,6,7 . text START:STM #x,AR5 RPT #7 MVPD TBL,*AR5+ ,2020年8月4日,DSP原理及应用,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+,2020年8月4日,DSP原理及应用,54,第5章 TMS320C54x汇编语言程序设计,5.7 小数运算程序,在定点DSP芯片中,采用定点数进行数值运算时,若操作数采用整型数,则DSP芯片给定的字长(一般16位)决定了整型数的最大范围。,1.通常,定点DSP采用小数乘法。其原因:, 乘法器为16位,对于大于16位的数据难以实现乘法递推,且乘积占用存储资源大; 小数乘法时,既可以存储32位乘积,也可以存储高16位乘积,可用较少的资源保存结果; 小数乘法便于乘法递推。,2020年8月4日,DSP原理及应用,55,第5章 TMS320C54x汇编语言程序设计,2. 小数的表示方法,如: 1 7FFFH 0.5 4000H 0.25 2000H 0 0000H -0.25 E000H -0.5 C000H -1 8000H,132 768=7FFFH 0.532 768=4000H 0.2532 768=2000H 032 768=0000H (0.2532 768)补=E000H (0.532 768)补=C000H (132 768)补=8000H,注意:汇编时,不能直接写成十进制小数。,如:0.907 .word 32 768*907/1000,2020年8月4日,DSP原理及应用,56,第5章 TMS320C54x汇编语言程序设计,3. 小数乘法与冗余符号位,在小数乘法编程时,应事先设置FRCT位, 如: SSBX FRCT MPY *AR2,*AR3,A STH A,Z 完成了Q15*Q15=Q15的小数乘法。,2020年8月4日,DSP原理及应用,57,第5章 TMS320C54x汇编语言程序设计,【例5.7.1】 编制计算 的程序,a1=0.3 a2=0.2 a3=-0.4 a4=0.1 x1=0.6 x2=0.5 x3=-0.1 x4=-0.2,.bss a,4 .bss x,4 .bss y,1 .data table: .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,2020年8月4日,DSP原理及应用,58,第5章 TMS320C54x汇编语言程序设计,【例5.7.1】 编制计算 的程序,a1=0.3 a2=0.2 a3=-0.4 a4=0.1 x1=0.6 x2=0.5 x3=-0.1 x4=-0.2,a,x,y,.text start: SSBX FRCT STM #x,AR1 RPT #7 MVPD table,*AR1+,STM #x,AR2 STM #a,AR3 RPTZ A,#3 MAC *AR2+,*AR3+,A STH A,y,done: B done,2020年8月4日,DSP原理及应用,59,第5章 TMS320C54x汇编语言程序设计,5.8 浮点运算程序,在数字信号处理过程中,定点运算是将数据的整数和小数部分分开,小数点在一个固定位置,其优点是硬件实现比较容易,但动态范围受到限制。 为了扩大数据的范围和精度,需要采用浮点运算。虽然C54x是个定点DSP器件,但它支持浮点运算。,2020年8月4日,DSP原理及应用,60,第5章 TMS320C54x汇编语言程序设计,5.8 浮点运算程序,1. 浮点数的表示方法,浮点数是由尾数和指数两部分组成,它与定点数的关系: 定点数 = 尾数2-指数,如:定点数:0 x2000 = 0.25 = 0.52-1,尾数= 0.5 = 0 x4000,指数=1。,尾数:可正可负,用补码表示。 指数:可正可负,用补码表示,其范围:-831。,2020年8月4日,DSP原理及应用,61,第5章 TMS320C54x汇编语言程序设计,5.8 浮点运算程序,2. 定点数转换成浮点数,C54x通过三条指令可将定点数转换成浮点数。, EXP A 提取指数指令,功能:若A=0,则T=0; 若A0,则T=(A的多余符号位数-8)。 即提取指数,A的内容不变,指数=多余符号位数-8。,例如:执行EXP A前,A=FF FFFF FFCB T=0000,A=FF FFFF FFCB= 1111111111001011,33,多余符号位数:33 指数:33-8=25 T=0019,执行后, A=FF FFFF FFCB T=0019 (25),又如:执行EXP B前,B=07 8543 2105 T=0007 B = 0000 0111 1000,多余符号位数:4 指数:4-8=-4 T=FFFC 执行后,B=07 8543 2105 T=FFFC (-4),2020年8月4日,DSP原理及应用,62,第5章 TMS320C54x汇编语言程序设计,2. 定点数转换成浮点数, ST T,EXPONENT,紧随EXP指令之后。,功能:将保存在T中的指数存放在数据存储器EXP单元中。, NORM A,根据T对累加器进行格式化处理指令。,功能:根据T的内容,对累加器A进行移位。 T0,A左移T位;T0,A右移T位。 即ATSA。,2020年8月4日,DSP原理及应用,63,第5章 TMS320C54x汇编语言程序设计,2. 定点数转换成浮点数,例如:NORM A,执行前: A=FF FFFF F001 T=0013 (19) A=1111111111111000000000001,28,左移19位,11111111 1000 0000 0000 1000,执行后: A=FF 8008 0000 T=0013 (19),又如: NORM B,A,执行前: A=FF FFFF F001 B=21 0A0A 0A0A T=FFF9(-7) B右移7位送入A A=00 4214 1414 执行后: A=00 4214 1414 B=21 0A0A 0A0A T=FFF9(-7),2020年8月4日,DSP原理及应用,64,第5章 TMS320C54x汇编语言程序设计,5.8 浮点运算程序,3.浮点数转换成定点数,定点数浮点数: 根据定点数,求其尾数和指数,然后将尾数按指数T进行移位。,当T0,A左移T位;当T0,A右移T位。,浮点数定点数: 根据指数T,将尾数进行移位。,当T0,A右移T位;当T0,A左移T位。,2020年8月4日,DSP原理及应用,65,第5章 TMS320C54x汇编语言程序设计,5.8 浮点运算程序,4.浮点乘法运算实例,实现浮点乘法运算时,首先将定点数规格化成浮点数;然后完成浮点乘法运算;最后将浮点数转换成定点数。,【例5.8.1】编写浮点乘法程序,完成a1a2=0.4(-0.9),程序中保留10个数据存储单元: a1(被乘数) a2(乘数) b1(被乘数的指数) c1(被乘数的尾数) b2(乘数的指数) c2(乘数的尾数) ep(乘积的指数) mp(乘积的尾数) prod(乘积) temp(暂存单元),2020年8月4日,DSP原理及应用,66,第5章 TMS320C54x汇编语言程序设计,4.浮点乘法运算实例,程序清单:,.title “float.asm” .def start STACK:.usect “STACK”,100 .bss a1,1 .bss a2,1 .bss b1,1 .bss c1,1 .bss b2,1 .bss c2,1 .bss ep,1 .bss mp,1 .bss prod,1 .bss temp,1,.title “float.asm” .def start STACK:.usect “STACK”,100,.bss a1,1,a1,.bss a2,1,a2,.bss b1,1,b1,.bss c1,1,c1,.bss b2,1,b2,.bss c2,1,c2,.bss ep,1,ep,.bss mp,1,mp,.bss prod,1,prod,.bss temp,1,temp,2020年8月4日,DSP原理及应用,67,第5章 TMS320C54x汇编语言程序设计,table: .word 4*32768/10,table,.word -9*32768/10,.text start:STM #SATACK+100,SP MVPD table,a1 MVPD table+1,a2 LD a1,16,A EXP A ST T,b1 NORM A STH A,c1 LD a2,16,A EXP A ST T,b2 NORM A STH A,c2 CALL MULT done: B done,;设堆栈指针,;将a1和a2送入RAM,;将a1送入AH,;求a1的指数,;将a1的指数送b1,;求a1的尾数,即A左移1位,;将a1的尾数送c1,;将a2送入AH,;求a2的指数,;将a2的指数送b2,;求a2的尾数,;将a2的尾数送c2,;调浮点乘法子程序,2020年8月4日,DSP原理及应用,68,第5章 TMS320C54x汇编语言程序设计,MULT: SSBX FRCT SSBX SXM LD b1,A ADD b2,A STL A,ep LD c1,T MPY c2,A EXP A ST T,temp NORM A STH A,mp LD temp,A ADD ep,A STL A,ep,;取b1送入A,;b1+b2送入A,;乘积指数送ep,;取a1的尾数,;求尾数的乘积,即:乘积尾数=c1c2,;求尾数乘积的指数,;指数存入temp,;求乘积的尾数,;存乘积的尾数,;取尾数乘积的指数,;(ep)+(temp)A,;保存乘积指数,2020年8月4日,DSP原理及应用,69,第5章 TMS320C54x汇编语言程序设计,NEG A STL A,temp LD temp,T LD mp,16,A NORM A STH A,prod RET .END,;乘积指数反号,;暂存A,;取乘积指数,;将(mp)AH,;将A按T移位,得定点数,;保存定点乘积,;子程序返回,运行结果:,乘积尾数:0 xA3D7,乘积指数:0 x0001,乘积定点数:0 xD1EC,十进制数:-0.359999,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!