资源描述
第三章:第三章:DSP汇编指令汇编指令 C54xC54x寻址方式寻址方式 C54xC54x特殊寻址特殊寻址 方式说明方式说明 C54xC54x指令集指令集 C54xC54x特殊指令特殊指令使用说明使用说明一、一、TMS320C54xTMS320C54x的寻址方式的寻址方式 w立即数寻址:立即数寻址:指令中嵌有一个固定的数指令中嵌有一个固定的数w绝对地址寻址:绝对地址寻址:指令中有一个固定的地址指令中有一个固定的地址w累累加加器器寻寻址址:按按累累加加器器内内的的地地址址去去访访问问程程序序存存储储器器中中的一个单元的一个单元w直直接接寻寻址址:指指令令中中的的7bits是是一一个个数数据据页页内内的的偏偏移移地地址址,而而所所在在的的数数据据页页由由数数据据页页指指针针DP或或SP决决定定。该该偏偏移移加加上上DP和和SP的值决定了在数据存储器中的实际地址。的值决定了在数据存储器中的实际地址。w间接寻址:间接寻址:按照辅助寄存器中的地址访问存储器。按照辅助寄存器中的地址访问存储器。w存存储储器器映映射射寄寄存存器器寻寻址址:修修改改存存储储器器映映射射寄寄存存器器中中的的值,而不影响当前值,而不影响当前DP或或SP的值。的值。w堆栈寻址:堆栈寻址:把数据压入和弹出系统堆栈。把数据压入和弹出系统堆栈。汇编语言常用符号汇编语言常用符号 在立即数寻址中,指令里包括了立即操作数。在一条指令中可对两种立即数编码。一种是短立即数(3、5、8或9bits),另一种是16bits的长立即数。立即数可包含在单字或双字指令中。3-,5-,8-或9-bit值在单字指令中,16-bit值在双字指令中。1.立即数寻址立即数寻址立即数寻址的其他例子:立即数寻址的其他例子:LD#0,ARP ;ARP=0(#k3)LD#3,ASM ;ASM=3(#k5)LD#50,DP ;DP=50(#k9)LD#1234,A ;A=1234(#K)STM#FFFFh,IMR ;IMR=FFFFh(#lk)短立即数短立即数RPT长立即数长立即数RPT2.直接寻址直接寻址 在直接寻址中,指令代码包含了数据存储器地址的低七位。这7-bit dma(数据存储器地址)作为偏移地址与数据页指针(DP)或堆栈指针(SP)相结合共同形成16-bit的数据存储器实际地址。如右图所示。CPL=0:dma与与9-bit的的DP相结合形成数据存储器地址。相结合形成数据存储器地址。以DP为基准的直接寻址DP9-bit9-bit的的DP指向数据存储空间指向数据存储空间的的512个数据页中的一页个数据页中的一页012510511以SP为基准的直接寻址CPL=1:dma加上加上SP基地址形成数据存储器地址。基地址形成数据存储器地址。(st1中)中)3.间接寻址间接寻址 在间接寻址中,在间接寻址中,64K数据空间任意单元都可通过一个数据空间任意单元都可通过一个辅助寄存器中的辅助寄存器中的16-bit地址进行访问。地址进行访问。C54x有有8个个16-bit辅辅助寄存器(助寄存器(AR0-AR7)。两个辅助寄存器算术单元)。两个辅助寄存器算术单元(ARAU0和和ARAU1),根据辅助寄存器的内容进行操作,),根据辅助寄存器的内容进行操作,完成无符号的完成无符号的16-bit算术运算。间接寻址很灵活,不仅能从算术运算。间接寻址很灵活,不仅能从存储器中读或写一个单存储器中读或写一个单16-bit数据操作数,而且能在一条指数据操作数,而且能在一条指令中访问两个数据存储器单元(即从两个独立的存储器单令中访问两个数据存储器单元(即从两个独立的存储器单元读数据,或读一个存储器单元同时写另一个存储器单元,元读数据,或读一个存储器单元同时写另一个存储器单元,或读写两个连续的存储器单元)。或读写两个连续的存储器单元)。单操作数寻址单操作数间接寻址方框图编程举例:编程举例:编程举例:编程举例:间接寻址编程:间接寻址编程:.mmregs.bss x,4,1a.word 1,2,3,4.sect “program”STM#a,AR1STM#x,AR2LD#0,ALD *AR1+,TMAC *AR2+,ALD *AR1+,TMAC *AR2+,ALD *AR1+,TMAC *AR2+,ALD *AR1,TMAC *AR2,A.双操作数寻址方式双数据存储器操作数间接寻址类型双数据存储器操作数间接寻址类型*Arx:ARx是数据存储器地址*ARx-/*ARx+:访问后,ARx中的地址减1/加1*ARx+0%:访问后,AR0以循环寻址的方式加 到ARx中。例如:例如:MPY *AR2,*AR3,AFIRS *AR2,*AR3,coef双数据存储器操作数间接寻址方框图4.绝对地址寻址有个别指令可以使用有个别指令可以使用16bits的绝对地址寻址:的绝对地址寻址:w数据存储器地址(数据存储器地址(dmad)寻址:)寻址:MVDK Smem,dmad MVDM dmad,MMR MVKD dmad,Smem MVMD pmad,Smemw程序存储器地址(程序存储器地址(pmad)寻址:)寻址:FIRS Xmem,Ymem,pmad MACD Smem,pmad,src MACP Smem,pmad,src MVPD pmad,Smemw端口地址端口地址(PA)寻址寻址 PORTR PA,Smem PORTW Smem,PAw*(lk)寻址适用于支持单数据存储器操作数的指令寻址适用于支持单数据存储器操作数的指令 5.累加器寻址 累累加加器器寻寻址址是是用用累累加加器器中中的的数数作作为为一一个个地地址址。这这种种寻寻址址方方式式可可用用来来对对存存放放数数据据的的程程序序存存储储器器寻寻址址。共共有有两两条条指指令令可以采用累加器寻址:可以采用累加器寻址:READA SmemWRITA Smem READA是是把把累累加加器器A所所确确定定的的程程序序存存储储器器单单元元中中的的一一个个字字,传传送送到到单单数数据据存存储储器器(Smem)操操作作数数所所确确定定的的数数据据存存储储器器单单元元中中。WRITA是是把把Smem操操作作数数所所确确定定的的数数据据单单元元中的一个字,传送到累加器中的一个字,传送到累加器A确定的程序存储器单元中去。确定的程序存储器单元中去。只有只有8条指令能使用存储器映射寄存器寻址:条指令能使用存储器映射寄存器寻址:LDM MMR,dstMVDM dmad,MMR MVMD MMR,dmad MVMM MMRx,MMRy POPM MMRPSHM MMRSTLM src,MMRSTM#lk,MMR6.存储器映射寄存器寻址存存储储器器映映像像寄寄存存器器寻寻址址是是用用来来修修改改存存储储器器映映像像寄寄存存器器的的,但但不不影影响响当当前前数数据据页页指指针针DP或或堆堆栈栈指指针针SP的的值值。由由于于DP和和SP不不需需要要改改变变,因因此此写写一一个个寄寄存存器器的的开开销销是是最最小小的的。存存储储器器映映像像寄寄存存器器寻寻址址可可以以在在直接寻址和间接寻址中使用。直接寻址和间接寻址中使用。7.堆栈寻址 系系统统堆堆栈栈用用来来在在中中断断和和子子程程序序期期间间自自动动存存放放程程序序计计数数器器。它它也也能能用用来来存存放放额额外外的的数数据据项项或或传传递递数数据据值值。处处理理器器使使用用一一个个16-bit的的存存储储器器映映射射寄寄存存器器堆堆栈栈指指针针来来对对堆堆栈栈寻寻址址,它它总是指向存放在堆栈中的最后一个元素。总是指向存放在堆栈中的最后一个元素。共有四条使用堆栈寻址方式访问堆栈的指令:共有四条使用堆栈寻址方式访问堆栈的指令:PSHD 把一个数据存储器的值压入堆栈。把一个数据存储器的值压入堆栈。PSHM 把把一一个个存存储储器器映映射射寄寄存存器器的的值值压压入入堆堆栈栈。POPD 把一个数据存储器的值弹出堆栈。把一个数据存储器的值弹出堆栈。POPM 把一个存储器映射寄存器的值弹出堆栈。把一个存储器映射寄存器的值弹出堆栈。3-2 特殊寻址方式说明特殊寻址方式说明 本小节重点介绍两种广泛应用的特殊寻址方式本小节重点介绍两种广泛应用的特殊寻址方式位倒序寻址和循环寻址。位倒序寻址和循环寻址。位倒序寻址位倒序寻址 位倒序寻址提高了执行速度和在位倒序寻址提高了执行速度和在FFT算法的程序中使算法的程序中使用存储器的效率。在这种寻址方式中,用存储器的效率。在这种寻址方式中,AR0存放的整数存放的整数N是是FFT点数的一半。一个辅助寄存器指向一数据存放的物点数的一半。一个辅助寄存器指向一数据存放的物理单元。当使用位倒序寻址把理单元。当使用位倒序寻址把AR0加到辅助寄存器中时,加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是从地址以位倒序的方式产生,即进位是从左向右,而不是从右向左。间接寻址中右向左。间接寻址中*ARn+0B/-0B表示位倒序寻址。表示位倒序寻址。位倒序寻址的执行位倒序寻址的执行 设设FFT长度长度N=16,x(0)x(15)位于地址)位于地址(01100000)(01101111),则),则AR0赋值为赋值为8(00001000),位倒序方式读入数据情况如下,位倒序方式读入数据情况如下(AR2初初始为始为01100000):RPT#15PORTW *AR2+0B,PA 功能:功能:地址地址=AR2 ,AR2=B(AR2+AR0)FFT中混序就是位倒序中混序就是位倒序FFT运算时输出/输入序列中必有其一要混序。存储单元地址FFT变换结果位码倒序位码倒序寻址结果存储单元地址FFT变换结果位码倒序位码倒序寻址结果0000X(0)0000X(0)1000X(1)0001X(8)0001X(8)1000X(1)1001X(9)1001X(9)0010X(4)0100X(2)1010X(5)0101X(10)0011X(12)1100X(3)1011X(13)1101X(11)0100X(2)0010X(4)1100X(3)0011X(12)0101X(10)1010X(5)1101X(11)1011X(13)0110X(6)0110X(6)1110X(7)0111X(14)0111X(14)1110X(7)1111X(15)1111X(15)循环寻址:循环寻址:许多算法,如卷积,相关和许多算法,如卷积,相关和FIR滤波等,都需要在存滤波等,都需要在存储器中实现一个循环缓冲器。在这些算法中,一个循环储器中实现一个循环缓冲器。在这些算法中,一个循环缓冲器就是一个包含了最近的数据的滑动窗口。当新的缓冲器就是一个包含了最近的数据的滑动窗口。当新的数据来到时,缓冲器就会覆盖最早的数据。循环缓冲器数据来到时,缓冲器就会覆盖最早的数据。循环缓冲器实现的关键是循环寻址的实现。实现的关键是循环寻址的实现。C54x间接寻址中提供间接寻址中提供了循环寻址的方式,以了循环寻址的方式,以%表示。表示。循环寻址图示循环寻址图示循环寻址的有效地址计算循环寻址的有效地址计算 定义循环缓冲器大小寄存器(定义循环缓冲器大小寄存器(BK)来确定)来确定了循环了循环 缓冲器的大小缓冲器的大小R,R BK。大小为大小为R的循环缓冲器必须从一个的循环缓冲器必须从一个N-bit边界边界开始(循环缓冲器基地址的最低开始(循环缓冲器基地址的最低N位为位为0)。)。满足条件:满足条件:R(BK)=32-二进制 100000 -N=6R(BK)=31-二进制 011111-N=5循环寻址的有效地址计算循环寻址的有效地址计算循环缓冲器的有效基地址(循环缓冲器的有效基地址(EFB)就是用户选定的辅)就是用户选定的辅助寄存器(助寄存器(ARx)的低)的低N位置位置 0后所得到的值。后所得到的值。循环缓冲器的尾地址(循环缓冲器的尾地址(EOB)是通过用)是通过用BK的低的低N位位代替代替ARx的低的低N位得到。循环缓冲器的位得到。循环缓冲器的INDEX就是就是ARx的低的低N位,位,step就是加到辅助寄存器,或从辅就是加到辅助寄存器,或从辅助寄存器中减去的值。循环寻址的算法如下:助寄存器中减去的值。循环寻址的算法如下:if 0index+stepBK;indexindex+step.else if index+stepBK;indexindex+step-BK.else if index+step0;indexindex+step+BK.TMS320C54x的指令集有近两百条指令,按功能分为如下几类:算术运算指令算术运算指令 逻辑运算指令逻辑运算指令 程序控制指令程序控制指令 装入和存储指令装入和存储指令3-3 TMS320C54x的指令集的指令集 指令中用到的缩写符号及其含义缩写符号含义Smem16位单数据存储器操作数Xmem在双操作数指令及某些单操作数指令中所用的16位双数据存储器操作数,从DB总线上读出Ymem在双操作数指令中所用的16位双数据存储器操作数,从CB总线上读出;在读同时并行写的指令中表示写操作数dmad16位立即数数据存储器地址(065535)pmad16位立即数程序存储器地址(065535)PA16位立即数I/O口地址(065535)src源累加器(A或B)dst目的累加器(A或B)lk16位长立即数一、算术运算指令一、算术运算指令算术运算指令可分为如下几类:算术运算指令可分为如下几类:加法指令加法指令 减法指令减法指令 乘法指令乘法指令 乘加指令乘加指令 乘减指令乘减指令 双数双数/双精度指令双精度指令 特殊操作指令特殊操作指令1、加法指令、加法指令 操作符操 作 数代数表达式注 释ADDSmem,srcsrcsrc+Smem操作数加到累加器ADDSmem,TS,srcsrcsrc+Smem TS操作数移位后加到累加器ADDSmem,16,src,dstdstsrc+Smem 16操作数左移16位后加到累加器ADDSmem,SHIFT,src,dstdstsrc+Smem SHIFT操作数移位后加到累加器ADDXmem,SHFT,srcsrcsrc+Xmem SHFT操作数移位后加到累加器ADDXmem,Ymem,dstdstXmem16+Ymem16两个操作数分别左移16位,然后相加 ADD#lk,SHFT,src,dstdstsrc+#lk SHFT长立即数移位后加到累加器ADD#lk,16,src,dstdstsrc+#lk 16长立即数左移16位后加到累加器ADDsrc,SHIFT,dstdstdst+src SHIFT累加器移位后相加ADDsrc,ASM,dstdstdst+src ASM累加器按ASM移位后相加ADDCSmem,srcsrcsrc+Smem+C操作数带进位加至累加器ADDM#lk,SmemSmemSmem+#lk长立即数加至存储器中 ADDSSmem,srcsrcsrc+uns(Smem)符号位不扩展的加法定点定点DSPDSP中数据表示方法中数据表示方法w当它表示一个整数时,其最低位(当它表示一个整数时,其最低位(D0)表示)表示1,D1位表示位表示2的的1次方,次高位(次方,次高位(D14)表示)表示2的的14方。方。w如果表示一个有符号数时,最高位(如果表示一个有符号数时,最高位(D15)为符)为符号位,号位,0表示正数,表示正数,1表示负数。例如,表示负数。例如,07FFFH表示最大的正数表示最大的正数32767(十进制),而(十进制),而0FFFFH表表示最大的负数示最大的负数-1(负数用(负数用2的补码方式显示)。的补码方式显示)。w当需要表示小数时,小数点的位置始终在最高位当需要表示小数时,小数点的位置始终在最高位后,而最高位(后,而最高位(D15)表示符号位。这样次高位)表示符号位。这样次高位(D14)表示)表示0.5,然后是,然后是0.25,最低位(,最低位(D0)表)表示。所以示。所以04000H表示小数表示小数0.5,02000H表示小数表示小数0.25,而,而0001H表示表示16位定点位定点DSP表示的最小的表示的最小的小数(有符号)小数(有符号)0.000030517578125。实现实现1616位定点加法位定点加法wC54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于立即数的加法。使用使用ADD完成加法完成加法 ld temp1,a;将变量temp1装入寄存器A add temp2,a;将变量temp2与寄存器A相加 ;结果放入A中 stl a,temp3;将结果(低16位)存入变量 ;temp3中。注意,这里完成计算注意,这里完成计算temp3=temp1+temp2,我们没有特意,我们没有特意考虑考虑temp1和和temp2是整数还是小数,在加法和下面的减法是整数还是小数,在加法和下面的减法中整数运算和定点的小数运算都是一样的。中整数运算和定点的小数运算都是一样的。利用利用ADDS实现实现32位数据装入位数据装入 ld#0,dp ;设置数据页指针 ld 60h,16,a;将60H的内容装如A的高16位 adds 61h,a;将61H的内容加到A的低16位 dld 60h,b;直接装入32位到B寄存器ADD中寻址方式中寻址方式wADD Smem,SHIFT,src,dst 例如:w ADD *AR0,1,A,A w ADD 60H,-1,A,A w ADD *AR5,1,A,B wADD Xmem,SHFT,src 例如:w ADD *AR5,1,AwADD Xmem,Ymem,dst 例如:w ADD *AR2,*AR3,A2、减减法法指指令令实现实现16位定点减法位定点减法wC54X中提供了多条用于减法的指令,如中提供了多条用于减法的指令,如SUB,SUBB,SUBC和和SUBS。其中。其中SUBS用于无符号数的减法运算,用于无符号数的减法运算,SUBB用于带用于带进位的减法运算(如进位的减法运算(如32位扩展精度的减法)位扩展精度的减法),而,而SUBC为移位减,为移位减,DSP中的除法就是用中的除法就是用该指令来实现的。该指令来实现的。SUB指令与指令与ADD指令一指令一样,有许多的寻址方式样,有许多的寻址方式.减法指令使用举例减法指令使用举例 stm#60h,ar3;将变量temp1的地址装入ar3寄存器 stm#61h,ar2;将变量temp3的地址装入ar2寄存器 sub*ar2+,*ar3,b;将变量temp3左移16位同时变量 ;temp2也左移16位,然后相减,结 ;果放入寄存器B(高16位)中,同 ;时ar2加1。sthb,63h;将相减的结果(高16位)存入变量63h 利用利用SUBC实现除法实现除法w在C54X中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用SUBC指令,重复16次减法完成除法运算。利用利用SUBC完成完成Temp1/Temp2 ldtemp1,B;将被除数temp1装入B寄存 ;器的低16位rpt#15 ;重复SUBC指令16次subctemp2,B;使用SUBC指令完成除法stlB,temp3;将商(B寄存器的低16位);存入变量temp3sthB,temp4;将余数(B寄存器的高16位);存入变量temp4 注:注:实际上是完成整数除法实际上是完成整数除法3、乘法指令、乘法指令实现实现16定点整数乘法定点整数乘法w 在C54X中提供了大量的乘法运算指令,其结果都是32位,放在A或B寄存器中。乘数在C54X的乘法指令很灵活,可以是T寄存器、立即数、存贮单元和A或B寄存器的高16位。如果是无符号数乘时,请使用MPYU指令。这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘法。整数乘法举例整数乘法举例rsbxFRCT;清FRCT标志,准备整数乘ldtemp1,T;将变量temp1装入T寄存器mpy temp2,a;完成temp2*temp1,结果放 ;入A寄存器(32位)实现小数乘法实现小数乘法w在C54X中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积结果左移移位。两个小数(16位)相乘后结果为32位,如果精度允许的话,可以只存高16位,将低16位丢弃,这样仍可得到16位的结果。小数乘法举例小数乘法举例 ssbx FRCT ;FRCT=1,准备小数乘法 ld temp1,16,a ;将变量temp1装入寄存器A的高16位 mpy a,temp2,b;完成temp2乘寄存器A的高16位,结 ;果在B中,同时将temp2装入T寄存器 sth b,temp3;将乘积结果的高16位存入变量temp3如:0.1(0 x0ccd)x 0.7(0 x599a)=0.06997680664063(0 x08f5)4、乘加和乘减指令、乘加和乘减指令5、双双精精度度/双双数数操操作作指指令令6、特特殊殊指指令令二、逻辑运算指令二、逻辑运算指令逻辑指令包括与、或、异或、移位和测试指令1、与指令(、与指令(AND)2、或、异或指令、或、异或指令3、移位和测试指令、移位和测试指令三、程序控制指令三、程序控制指令程序控制指令包括:程序控制指令包括:分支指令分支指令调用指令调用指令中断指令中断指令返回指令返回指令重复指令重复指令堆栈操作指令堆栈操作指令混合程序控制指令混合程序控制指令1、分支指令、分支指令2、调用与中断指令、调用与中断指令3、返回指令、返回指令4、重复指令和堆栈操作指令、重复指令和堆栈操作指令5、混合程序控制指令、混合程序控制指令四、装入和存储指令四、装入和存储指令装入和存储指令包括:装入和存储指令包括:一般的装入和存储指令一般的装入和存储指令条件存储指令条件存储指令并行装入和存储指令并行装入和存储指令并行装入和乘法指令并行装入和乘法指令并行存储和加件乘指令并行存储和加件乘指令混合装入和存储指令混合装入和存储指令1、一般的装入指令、一般的装入指令2、存贮指令、存贮指令3 并行装入和存储指令并行装入和存储指令4、条件存储指令、条件存储指令5、并行存储和加、减、乘法指令、并行存储和加、减、乘法指令6、并行装入和乘法指令、并行装入和乘法指令7、混合装入和存储指令、混合装入和存储指令注意:同一条指令在不同存储器注意:同一条指令在不同存储器中可能有不同执行时间中可能有不同执行时间w操作数在双寻址空间、单寻址空间和外部w程序代码在双寻址、单寻址和外部空间w操作数和代码在相同存储器块中w数据空间插入了等待周期w程序空间插入了等待周期FIRS指令指令使用方法:使用方法:FIRS *AR2+,*AR3+,COEF3-4 特殊指令使用说明特殊指令使用说明FIRS指令 FIRS指令用于线性相位滤波器的处理。一个如下图指令用于线性相位滤波器的处理。一个如下图的的8阶线性相位滤波器的输出表达式:阶线性相位滤波器的输出表达式:FIR滤波的两指令滤波的两指令MAC、FIRSRPTZ A,#(N-1);重复MAC指令N次,先将A清零MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ;完成滤波计算。注意FIR滤波 ;系数存放在数据存储区 RPTZ B,#(N/2);重复FIRS指令N/2次,先将B清零 FIRS *ar1+,*ar2+,filter_coff+N/2-1 ;完成滤波计算。注意FIR滤波系数 ;存放在程序存贮filter_coff为 ;系数起始地址最小均方运算最小均方运算LMS 在进行自适应滤波等操作中经常会使用在进行自适应滤波等操作中经常会使用LMS算法,算法,C54x提提供的供的LMS指令方便了编程。如下图所示的自适应滤波器设指令方便了编程。如下图所示的自适应滤波器设计中,滤波器系数修正公式为:计中,滤波器系数修正公式为:其中,其中,e(i)=d(i)-y(i)。滤波器输出:滤波器输出:基于基于LMS的自适应滤波编程的自适应滤波编程数据块移动数据块移动MVDD、MVDP、MVPD 在在C54x系列系列DSP,数据与数据存储器、数据与程序数据与数据存储器、数据与程序存储器之间可以方便的进行数据传输,结合单指令存储器之间可以方便的进行数据传输,结合单指令循环可实现数据块移动。如循环可实现数据块移动。如16个系数的移动:个系数的移动:RPT#16-1MVPD TABLE,*AR2+
展开阅读全文