版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、三、TMS320C54X DSP 汇编语言程序设计C54x寻址方式及特殊寻址方式说明C54x指令集软件开发过程汇编语言程序设计1、立即数寻址: 指令中嵌有一个固定的数2、绝对地址寻址: 指令中有一个固定的地址3、累加器寻址: 以累加器中的数据为地址去访问程序存储器中的一个单元4、直接寻址: 指令中的7bits是一个数据页内的偏移地址,而所在的数据页由数据页指针DP或SP决定。该偏移加上DP和SP的值决定了在数据存储器中的实际地址。5、间接寻址: 按照辅助寄存器中的地址访问存储器。6、存储器映射寄存器寻址: 修改存储器映射寄存器中的值,而不受当前DP或SP值的影响。7、堆栈寻址: 把数据压入和弹
2、出系统堆栈。3.1 TMS320C54x 寻址方式 在立即数寻址中,指令里包括了立即操作数。在一条指令中可对两种立即数编码。一种是短立即数(3、5、8或9bits),另一种是16bits的长立即数。立即数可包含在单字或双字指令中。3-,5-,8-或9-bit值在单字指令中,16-bit值在双字指令中。1 . 立即数寻址立即数寻址的其他例子: LD #0,ARP ;ARP=2(#k3) LD #3,ASM ;ASM=3(#k5) LD #50,DP ;DP=50(#k9) LD #1234,A ;A=1234(#k) STM #0FFFFh,IMR ;IMR=FFFFh(#lk)短立即数RPT长
3、立即数RPT2. 直接寻址 在直接寻址中,指令代码包含了数据存储器地址的低七位。这7-bit dma作为偏移地址与数据页指针(DP)或堆栈指针(SP)相结合共同形成16-bit的数据存储器实际地址。如右图所示。CPL=0:dma与9-bit的DP相结合形成数据存储器地址。以DP为基准的直接寻址DP9-bit9-bit的DP指向数据存储空间的512个数据页中的一页012510511编程举例:直接寻址编程:.mmregs.bss x, 4, 1a0.word 012ha1.word 3211ha2.word 0fe11ha3.word 0ff03h.sect “program”RSBX CPL L
4、D #0, ALD #X, DPLD a0, TMAC x,ALD a1,TMAC x+1,ALD a2,TMAC x+2,A.以SP为基准的直接寻址CPL=1:dma加上SP基地址形成数据存储器地址。(st1中) 以SP为基址的直接寻址: SSBX CPL; STM #STACK+10H,SP; AND 1, A LD 2, A ADD 5, B 3. 间接寻址 在间接寻址中,64K数据空间任意单元都可通过一个辅助寄存器中的16-bit地址进行访问。C54x有8个16-bit辅助寄存器(AR0-AR7)。两个辅助寄存器算术单元(ARAU0和ARAU1),根据辅助寄存器的内容进行操作,完成无符
5、号的16-bit算术运算。间接寻址很灵活,不仅能从存储器中读或写一个单16-bit数据操作数,而且能在一条指令中访问两个数据存储器单元(即从两个独立的存储器单元读数据,或读一个存储器单元同时写另一个存储器单元,或读写两个连续的存储器单元)。单操作数寻址单操作数间接寻址方框图 单操作数间接寻址类型:*ARx: ARx包含了数据存储器地址*ARx(lk): ARx和16-bit的长偏移(lk) 的和用来 作为数据存储器地址。ARx本身不 被修改*ARx-/ *ARx+ : 访问后, ARx中地址减1/加1*ARx-0/ *ARx+0 : 访问后,从ARx中减去/加上AR0*ARx-0B/ *ARx
6、+0B :访问后,从ARx中以位倒序进位的 方式减去/加上AR0*ARx-%/ *ARx+% : 访问后,ARx中的地址以循环寻址 的方式减1/加1*ARx-0%/ *ARx+0% :访问后,从ARx中以循环寻址的方 式减去/加上AR0*+ARx: 寻址前,ARx中地址加1(仅写操作)*+ARx(lk): 在寻址之前,把一个带符号的16-bit的长偏移 (lk)加到ARx中,然后用新的ARx的值作为 数据存储器的地址*+ARx(lk)%:在寻址之前,把一个带符号的16-bit的长偏移 以循环寻址的方式加到ARx中,然后再用新 的ARx的值作为数据存储器的地址编程举例:间接寻址编程:.mmreg
7、s.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双数据
8、存储器操作数间接寻址方框图4. 绝对地址寻址有部分指令可以使用16bits的绝对地址寻址: 数据存储器地址(dmad)寻址: MVDK Smem, dmad MVDM dmad, MMR MVKD dmad, Smem MVMD pmad, Smem程序存储器地址(pmad)寻址: FIRS Xmem, Ymem, pmad MACD Smem, pmad, src MACP Smem, pmad, src MVPD pmad, Smem端口地址(PA)寻址 PORTR PA, Smem PORTW Smem, PA*(lk)寻址适用于支持单数据存储器操作数的指令 5. 累加器寻址 累加器寻址
9、是用累加器中的数作为一个地址。这种寻址方式可用来对存放数据的程序存储器寻址。共有两条指令可以采用累加器寻址:READA Smem (无READB)WRITA Smem ( 无WRITB ) READA是把累加器A所确定的程序存储器单元中的一个字,传送到单数据存储器(Smem)单元中。WRITA是把Smem操作数所确定的数据单元中的一个字,传送到累加器A确定的程序存储器单元中去。只有8条指令能使用存储器映射寄存器寻址:LDM MMR, dstMVDM dmad, MMR MVMD MMR, dmad MVMM MMRx, MMRy POPM MMRPSHM MMRSTLM src, MMRSTM
10、 #lk, MMR6. 存储器映射寄存器寻址 存储器映射寄存器寻址用来修改存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值。存储器映射寄存器寻址既可以在直接寻址中使用,又可以在间接寻址中使用。 7. 堆栈寻址 系统堆栈用来在中断和子程序期间自动存放程序计数器。它也能用来存放额外的数据项或传递数据值。处理器使用一个16-bit的存储器映射寄存器堆栈指针来对堆栈寻址,它总是指向存放在堆栈中的最后一个元素。 共有四条使用堆栈寻址方式访问堆栈的指令:PSHD 把一个数据存储器的值压入堆栈。PSHM 把一个存储器映射寄存器的值压入堆栈。POPD 把一个数据存储器的值弹出堆栈。POPM
11、 把一个存储器映射寄存器的值弹出堆栈。 特殊寻址方式说明 位倒序寻址、循环寻址 位倒序寻址间接寻址:*ARn+0B/-0B,表示位倒序寻址。ARn指向存放数据的存储单元。 AR0存放的整数N是FFT点数的一半。位倒序寻址:把AR0加到ARn中时,地址以位倒序的方式产生,即进位是从左向右,即高位向低位进位。位倒序寻址提高了执行速度和在FFT算法的程序中使用存储器的效率。8点的FFT蝶型结运算00000100001001100001010100110111倒序00000001001000110100010101100111整序8081828384858687存储器FFT中混序就是位倒序FFT运算时
12、输出/输入序列中必有其一要混序。位倒序寻址的执行 设FFT长度N=16,则AR0赋值为8,位倒序方式读入数据情况如下:循环寻址: 许多算法,如卷积,相关和FIR滤波等,都需要在存储器中实现一个循环缓冲器。在这些算法中,一个循环缓冲器就是一个包含了最近的数据的滑动窗口。当新的数据来到时,缓冲器就会覆盖最早的数据。循环缓冲器实现的关键是循环寻址的实现。C54x间接寻址中提供了循环寻址的方式,以%表示。循环寻址图示000001010011100101110111循环寻址的有效基地址计算 定义循环缓冲器大小寄存器(BK)来确定了循环缓冲器的大小。大小为R的循环缓冲器必须从一个N-bit边界开始。循环缓
13、冲器的有效基地址(EFB)就是用户选定的辅助寄存器(ARx)的低N位置 0后所得到的值。 满足条件: 循环缓冲器的尾地址(EOB)是通过用BK的低N位代替ARx的低N位得到。循环缓冲器的INDEX就是ARx的低N位,step就是加到辅助寄存器,或从辅助寄存器中减去的值。循环寻址的算法如下:if 0 index+step BK: index = index + stepelse if index + step BK: index = index + step - BKelse if index + step 二进制 100000 N=6R(BK)=31 二进制 011111 N=5应用举例: 计
14、算16阶的FIR滤波器输出256个点.sect “fir-prog”STM #255, BRC ; Repeat 256 timesRPTBD fir_filter_loop-1STM #16, BK ; FIR circular buffer sizeLD *AR7+, A ; load the input valueSTL A, *AR4+% ; replace oldest sample with; newest sampleRPTZ A, #16MAC *AR4+0%, *AR3+0%, A ; filteringSTH A, *AR5+ ; replace the oldest bu
15、ffer valuefir_filter_loop TMS320C54x的指令集有近两百条指令,按功能分为如下几类: 算术运算指令逻辑运算指令程序控制指令装入和存储指令 3.2 TMS320C54x的指令集 一、算术运算指令算术运算指令可分为如下几类: 加法指令 减法指令 乘法指令 乘加指令 乘减指令 双数/双精度指令 特殊操作指令1、加法指令定点DSP中数据表示方法当它表示一个整数时,其最低位(D0)表示1,D1位表示2的1次方,次高位(D14)表示2的14方。如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1表示负数。例如,07FFFH表示最大的正数32767(十进制),而0
16、FFFFH表示最大的负数-1(负数用2的补码方式显示)。当需要表示小数时,小数点的位置始终在最高位后,而最高位(D15)表示符号位。这样次高位(D14)表示0.5,然后是0.25,最低位(D0)表示。所以04000H表示小数0.5,01000H表示小数0.25,而0001H表示16位定点DSP表示的最小的小数(有符号)0.000030517578125。实现16位定点加法C54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于立即数的加法。使用ADD完成加法 ld te
17、mp1,a;将变量temp1装入寄存器A add temp2,a;将变量temp2与寄存器A相加 ;结果放入A中 stla,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中寻址方式ADD
18、Smem ,SHIFT,src ,dst 例如: ADD *AR0,1,A,A ADD 60H,-1,A,A ADD *AR5,1,A,B ADD Xmem, SHFT, src 例如: ADD *AR5,1,AADD Xmem,Ymem, dst 例如: ADD *AR2,*AR3,A2、减法指令实现16位定点减法C54X中提供了多条用于减法的指令,如SUB,SUBB,SUBC和SUBS。其中SUBS用于无符号数的减法运算,SUBB用于带进位的减法运算(如32位扩展精度的减法),而SUBC为移位减,DSP中的除法就是用该指令来实现的。SUB指令与ADD指令一样,有许多的寻址方式,其详细使用说
19、明请参考TMS320C54X使用教程减法指令使用举例 stm#60h,ar3;将变量temp2的地址装入ar3寄存器 stm#61h,ar2;将变量temp3的地址装入ar2寄存器 sub*ar2+, *ar3,b;temp3 、temp2左移16位,然后相减, ;结果放入寄存器BH,同时ar2加1。 sthb,63h;将相减的结果(高16位)存入变量63h 利用SUBC实现除法在C54X中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用SUBC指令,重复16次减法完成除
20、法运算。利用SUBC完成整数除法Temp1/Temp2ldtemp1,b;将被除数temp1装入B寄存 ;器的低16位rpt#15 ;重复SUBC指令16次subctemp2,b;使用SUBC指令完成除法stlB,temp3;将商(B寄存器的低16位) ;存入变量temp3sthB,temp4;将余数(B寄存器的高16位) ;存入变量temp4 注: 实际上是完成整数除法实现小数除法在C54X中实现16位的小数除法与前面的整数除法基本一致,也是使用SUBC指令来完成。需要注意:第一,小数除法的结果一定是小数(小于1),所以被除数一定小于除数。在执行SUBC指令前,应将被除数装入A或B寄存器的高
21、16位,而不是低16位。其结果的格式与整数除法一样。第二,应考虑符号位对结果小数点的影响。所以应对商右移一位,得到正确的有符号数。3、乘法指令实现16定点整数乘法 在C54X中提供了大量的乘法运算指令,其结果都是32位,放在A或B寄存器中。乘数在C54X的乘法指令很灵活,可以是T寄存器、立即数、存贮单元和A或B寄存器的高16位。如果是无符号数乘时,请使用MPYU指令。这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘法。整数乘法举例rsbxFRCT;清FRCT标志,准备整数乘ldtemp1,T;将变量temp1装入T寄存器mpytemp2,a;完成temp2*temp1,结果放
22、;入A寄存器(32位)实现小数乘法在C54X中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积结果左移移位。两个小数(16位)相乘后结果为32位,如果精度允许的话,可以只存高16位,将低16位丢弃,这样仍可得到16位的结果。小数乘法举例 ssbx FRCT ;FRCT=1,准备小数乘法 ld temp1,16,a ;将变量temp1装入寄存器A的高16位 mpya temp2 ;完成temp2乘寄存器A的高16位,结 ;果在B中,同时将temp
23、2装入T寄存器 sth b,temp3 ;将乘积结果的高16位存入变量temp3如:0.1(0 x0ccd) x 0.7(0 x599a) = 0.06997680664063(0 x08f5)注:可以使用MPYR完成四舍五入。 比较如下结果 mpyr temp1,b ; T * temp1 - b4、乘加和乘减指令5双精度/双数操作指令6、特殊指令二、逻辑运算指令逻辑指令包括与、或、异或、移位和测试指令1、与指令(AND)2、或、异或指令3、移位和测试指令三、程序控制指令程序控制指令包括:分支指令调用指令中断指令返回指令重复指令堆栈操作指令混合程序控制指令1、分支指令2、调用与中断指令3、返
24、回指令4、重复指令和堆栈操作指令5、混合程序控制指令四、装入和存储指令装入和存储指令包括:一般的装入和存储指令条件存储指令并行装入和存储指令并行装入和乘法指令并行存储和加/乘指令混合装入和存储指令1、一般的装入指令2、存储指令3 并行装入和存储指令4、条件存储指令5、并行存储和加、减、乘法指令6、并行装入和乘法指令7、混合装入和存储指令注意:同一条指令在不同存储器中可能有不同执行时间操作数在双寻址空间、单寻址空间和外部程序代码在双寻址、单寻址和外部空间操作数和代码在相同存储器块中数据空间插入了等待周期程序空间插入了等待周期FIRS指令使用方法:FIRS *AR2+, *AR3+, COEF 特
25、殊指令使用说明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-1) ; 重复FIRS指令N/2次,先将B清零 FIRS *ar2+0%, *ar3+0%,filter_coff+N/2 ;完成滤波计算。注意FIR滤波系数 ;存放在程序存贮filter_coff为 ;系数起始地址Viterbi译码指令
26、DADST、DSADT、CMPS在信道均衡和解码中经常会使用到Viterbi算法,C54x为此提供了专门的硬件和指令。根据输入信号确定分支似然概率增加量D1/D2,放在T寄存器中,TRN存储可能信号译码输出。相关指令应用最小均方运算LMS 在进行自适应滤波等操作中经常会使用LMS算法,C54x提供的LMS指令方便了编程。如下图所示的自适应滤波器设计中,滤波器系数修正公式为:其中,e(i) = d(i) - y(i)。滤波器输出:基于LMS的自适应滤波编程数据归一化相关指令EXP、NORM 归一化一个数是先求其指数,然后把它调整到最大精度格式。实现方法如下:数据块移动MVDD、MVDP、MVPD
27、 在C54x系列DSP,数据与数据存储器、数据与程序存储器之间可以方便的进行数据传输,结合单指令循环可实现数据块移动。如16个系数的移动:指令效率的提高 C54x中有一些指令功能差不多,但编写出的程序效率不同,应灵活使用,如:MPYR Smem, dst;T*(Smen)dstMACR Smem, dst;(Smen)*T+src( MPYR +ADD); srcMACD Smen,pmen,src;pmend PAR (MAC+DELY+LD);(Smem)*(pmed); +(src) src;(Smem)T;(Smem) Smem+13.3 C54x DSP程序开发过程3.4 C54x
28、DSP汇编语言程序设计3.4.1 程序的控制与转移C54X具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环控制以及子程序操作。分支转移指令子程序调用子程序返回B nextBACC srcBC next,condCALL subCALL srcCC sub,condRETRC cond(1)条件算符条件算符分成两组;每组又分为两类或三类:选用条件算符时应注意以下几点:第一组:组内两类条件可以与/或,但不能在组内同一类中选择两个条件算符与/或。当选择两个条件时,累加器必须是同一个。例如:可以同时选择AGT和AOV,但不能AGT和BOV。第二组:可以组内3类算符中个选一个条件算符与/
29、或,但不能在组内同一类中选择2个条件算符与/或。如:可以TC、C、BIO,不可NTC、TC组与组之间的条件只能“或”。如:条件返回:RC TC;若TC=1,则返回。条件调用:CC sub ,BNEQ;B=1调。条件“与”:BC new,AGT,AOV;A0且溢出转若要“或”,则:BC new,AGTBC new,AOV计算五项累加.bssx,5.bssy,1STM#x,AR1STM#4,AR2;AR2循环计数器LD#0,ALoop:ADD*AR1+,ABANZ loop,*AR2-STLA,y(2)循环操作BANZ;当辅助寄存器不为0时转移;如:(3)比较操作CMPR经常用到数据之间的比较,利
30、用CMPR:3.4.2 堆栈的使用C54X提供了一个用16位堆栈指针SP寻址的软件堆栈。当向堆栈中压入数据时,堆栈从高地址向低地址增长。堆栈指针是减在前,加在后,即先SP-1,再压入数据,先弹出数据,后SP+1。1、若程序中要用到堆栈,必须先进行设置:size .set 100stack .usect “STACK”,sizeSTM #stack+size , SP2、设置堆栈后,就可以使用堆栈了:CALL pmad ;(sp)-1-sp, (pc)+2-TOS ;pmad-pcRET;(TOS)-PC, (SP)+1-SP3.4.3 加、减法与乘法运算计算: z=x+y-w.title“ex
31、ample.asm”.mmregsSTACK:.usect “STACK”, 10H.bss x , 1;add =0060H.bssy, 1.bssw, 1.bssz , 1.def _c_int00.dataTable:.word10 , 26 , 23.text_c_int00:STM #0,SWWSRSTM #STACK+10H,SPSTM#X,AR1RPT#2MVPDtable,*AR1+CALLSUMend:BendSUM: LDX,AADDY,ASUB W,ASTLA,ZRET.end例:在4项乘积aixi中找出最大值。.title“example.asm”.mmregsSTAC
32、K:.usect “STACK”, 10H.bss a , 4;add =0060H.bssx, 4.bssy, 1.def _c_int00.dataTable:.word1 , 5 , 3, 4.word 8 , 6 , 7, 2.text_c_int00 :STM #0,SWWSRSTM #STACK+10H,SPSTM#a,AR1RPT#7MVPDtable,*AR1+CALLMAXend:BendMAX:STM#a, AR1STM#x, AR2STM#2, AR3LD*AR1+, TMPY*AR2+ , ALoop:LD*AR1+ , TMPY*AR2+, BMAX A;A=max(
33、A,B)BANZloop, *AR3-RET.end舍入直接寻址重复操作指令:PRT(重复下条指令);RPTZ(累加器清零并重复下条指令);RPTB(块重复指令)。(1) 重复执行单条指令由于只需取指一次,比循环效率高。特别是对那些乘法累加和数据传送的多周期指令(如:MAC、MVDK、MVDP、MVPD等指令),在执行一次后就变成了单周期指令,大大提高了运行速度。3.4.3 重复操作重复计数器例:对一个数组进行初始化:X5=0,0,0,0,0.bssx,5STM#x,AR1LD#0,ARPT#4STLA,*AR1+或: .bssx,5STM#X,AR1RPTZA,#4STLA,*AR1+注意:
34、在执行重复操作期间,CPU是不响应中断的(RS除外); 当响应HOLD信号时,若HM=0,CPU继续执行重复操作;若HM=1,则暂停重复操作。(2) 块程序重复操作 RPTB指令的特点:其本身是一条2字4周期指令; 重复次数:用STM指令将所规定的重复次数加载到块重复计数器(BRC)中。 循环块开始地址(RSA):是RPTB指令的下一行; 循环块结束地址(REA):由RPTB指令的操作数规定。 例、对数组x5中的每个元素加1。.bssx,5Start:LD#1,16,BSTM#4,BRC;重复计数器 STM #x,AR4RPTBnext-1ADD*AR4,16,B,ASTHA,*AR4+nex
35、t:LD#0,B.注意:1、循环的结束地址;2、RPTB指令是可以响应中断的,与RPT,RPTZ不同。ST1中的块循环有效标志(3) 循环的嵌套 执行RPT指令时用到RPTC寄存器(重复计数器);执行RPTB指令时用到BRC,RSA和REA寄存器。由于两者使用了不同的寄存器,因此二者可以嵌套。当然,只要保存好有关寄存器,RPTB和RPTB也可嵌套,但效率不高。Lst:STM#L-1, AR7;2T外部;开销为4L+2TSTM#M-1, BRC;2TRPTBabc-1;4T中间;开销为6T中间RPT#N-1;1T开销为1T内部中间中间Abc:外部外部BANZ lst , *AR7-; 4T3.4
36、.5 数据块传送数据存储器数据存储器:MVDKsmem, dmadMVKDdmad, smemMVDDxmem, ymem程序存储器数据存储器:MVPDpmad, smemMVDPsmem, pmad数据存储器MMR:MVDMdmad, MMRMVMDMMR, dmadMVMMmmr, mmr程序存储器数据存储器:READAsmemWRITAsmem这些指令的特点:传送速度比加载和存储指令要快;传送数据不需要通过累加器;可以寻址程序存储器;与RPT指令相结合,可以实现数据块传送。一、程序存储器数据存储器例、数组X5=1,2,3,4,5初始化。.title “example.asm”.mmreg
37、sSTACK .usect “.STACK”,10H.bssx, 5.dataTable.word 1,2,3,4,5.def start.textStart:STM#x, AR1RPT#4MVPDtable,*AR1+end:B end.end二、数据存储器数据存储器例、将数据存储器中的数组x20复制到数组y20。.title“example.asm”.mmregsSTACK.usect“STACK”,30H.bssx,20.bssy,20.dataTable.word1,2,3,4,5,6,7,8,9,10,11,12,13,14.word 15,16,17,18,19,20.defsta
38、rt.textStart:STM#X,AR1RPT19MVPDtable,*AR1+STM#X,AR2STM#Y,AR3RPT19MVDD*AR2+,*AR3+end:B end.endvectors.objshiyan1.obj-o shiyan1.out-m shiyan1.map-e startMEMORY PAGE0: EPROM: org=0E000H, len=0100h VECS: org=0FF80H, len=0004H PAGE1: SPRAM: org=0060h, len = 0010H DARAM:org=0080H, len=0100HSECTIONS: .text
39、 : EPROM PAGE0.data :EPROM PAGE0.bss :SPRAM PAGE1STACK:DARAM PAGE1.vectors:VECS PAGE03.4.6 双操作数乘法 TMS320C54X片内的多总线结构,允许在一个机器周期内通过两个16位数据总线寻址两个数据和系数。例、求y=mx+b(利用单操作数和双操作数两种方法)。LDm, T MPY *AR2,*AR3,AMPYx, A ADDb, AADDb, A STLA, ySTLA, y用双操作数指令编程的特点:用间接寻址方式获得操作数,且辅助寄存器为AR2AR5;占用的程序空间小;运行速度快。注:双操作数指令有四种
40、MPYXmem , Ymem ,dst;dst=Xmem*YmemMACXmem, Ymem ,src,dstMASXmem, Ymem, src,dstMACPSmem, pmad ,src,dst Smem数据存储器数据; Xmem , Ymem双操作数数据存储器数据; pmad为16位立即数程序存储器地址。对Xmem , Ymem,只能用以下辅助存储器及寻址方式:辅助寄存器:AR2 寻址方式:*ARn AR3 *ARn+ AR4 *ARn- AR5 *ARn+0%求:.mmregs STACK:.usect“STACK”, 30H.bssa, 20.bss x, 20.bss y, 2.
41、defstart.dataTable:.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16.word 1,17 ,18,19,20,1,2,3,4,5,6,7,8,9,10.word 11,12,13,14,15,16,17,18,19,20.textStart:STM #0, SWWSRSTM #STACK+10H,SPSTM #a,AR1RPT #39MVPD table,*AR1+LD#0, BSTM#a , AR2STM#x , AR3STM#19,BRCRPTBdone-1MPY*AR2+ , *AR3+ , AADDA, Bdone:STH B ,
42、 ySTLB , y+1End:Bend .end优化:.title“example.asm”.mmregs STACK:.usect“STACK”, 30H.bssa, 20.bss x, 20.bss y, 2.defstart.dataTable:.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16.word 1,17 ,18,19,20,1,2,3,4,5,6,7,8,9,10.word 11,12,13,14,15,16,17,18,19,20.textStart:STM #0, SWWSRSTM #STACK+30H,SPSTM #a,AR1RPT
43、 #39MVPD table,*AR1+CALL SUMend:B endSUM:STM #a,AR3STM #x,AR4RPTZ A,#19MAC *AR3+,*AR4+,ASTH B , ySTLB , y+1.end3.4.7 长字运算DLDLmem, dstDSTsrc , LmemDADDLmem, src,dstDSUBLmem, src,dstDRSUBLmem, src,dst 除了DST指令外,都是单字单周期指令,也就是在单周期内同时利用C和D总线,得到32位操作数。C160:双精度运算;C161:双16位运算偶地址排列法高16位在前(偶地址),低16位在后(寄地址)Tabl
44、e:.word 06CACH,0BD90H,3668HSTM#80H, AR1RPT#2MVPDtable, *AR1+STM#80H, AR3DLD *AR3+, A;程序运行完A=00 6CAC BD90H6cach(H)Bd90h(L)3668h奇地址排列法:类似小端接高16位在后(奇地址),低16位在前(偶地址)STM#81H, AR3DLD *AR3+, A;程序运行完,A=00 BD90 6CAC H6cach(L)Bd90h(H)3668h80h81h82h注意:一个系统内部,仅使用一种地址排列方法;特殊情况下,可以同时利用两种方法,解决特殊的数据寻址问题;奇偶地址法的确定: 由
45、指令中地址的奇偶性决定。3.4.8 并行运算D总线执行加载或算术运算;E总线存放先前的结果。并行指令有四种: 并行加载和乘法指令, 并行加载和存储指令, 并行存储和乘法指令, 并行存储和加/减指令。所有并行指令都是单字单周期指令,并行运算时存储的是前面的结果,这些指令都工作在累加器的高位,且大多数并行运算都受ASM(累加器移位方式位)影响。 LD:自动左移16位; ST:自动移位(ASM16)位,ASM0较合适双操作数:AR2AR51.并行装载和存储指令序号指 令功 能说 明1ST src,Ymem| LD Xmem,dstYmem = src(ASM-16)|dst = Xmem 16累加器
46、移位存储并行移位加载累加器2ST src,Ymem| LD Xmem,TYmem = src(ASM-16)|T= Xmem 累加器移位存储并行加载T寄存器 并行装载和存储指令共2条。 2.并行存储和加/减法指令 并行存储和加/减法指令只有2条。 序号指 令功 能说 明1ST src,Ymem| ADD Xmem,dstYmem = src(ASM-16)|dst = dst_+ Xmem 16累加器移位存储并行移位加法运算2ST src,Ymem| SUB Xmem,dstYmem = src(ASM-16)|dst = (Xmem 16)-dst_累加器移位存储并行移位减法运算3.并行装载
47、和乘法指令 并行装载和乘法指令共4条。 序号指 令功 能说 明1LD Xmem,dst| MAC Ymem,dst_dst = Xmem 16|dst_ = dst_ +T*Ymem操作数移位加载累加器并行乘法累加运算2LD Xmem,dst| MACR Ymem, dst_dst = Xmem 16|dst_ = rnd(dst_ +T*Ymem)操作数移位加载累加器并行带舍入乘法累加运算3LD Xmem,dst| MAS Ymem,dst_dst = Xmem 16|dst_ = dst_ -T*Ymem操作数移位加载累加器并行乘法减法运算4LD Xmem,dst| MASR Ymem,
48、dst_dst = Xmem 16|dst_ = rnd(dst_ -T*Ymem)操作数移位加载累加器并行带舍入乘法减法运算4.并行存储和乘法指令 并行存储和乘法指令共5条。 序号指 令功 能说 明1ST src,Ymem| MAC Xmem,dstYmem = src (ASM - 16)|dst = dst +T*Xmem累加器移位存储并行乘法累加运算2ST src,Ymem| MACR Xmem, dstYmem = src (ASM - 16)|dst = rnd(dst +T*Xmem)累加器移位存储并行乘法累加运算3ST src,Ymem| MAS Xmem,dstYmem =
49、src (ASM - 16)|dst = dst -T*Xmem累加器移位存储并行乘法减法运算4ST src,Ymem| MASR Xmem, dstYmem = src (ASM - 16)|dst = rnd(dst -T*Xmem)累加器移位存储并行乘法减法运算5ST src,Ymem| MAY Xmem,dstYmem = src z|LD*AR2+,B;e BHADD*AR2+,16,BSTHB,*AR2;BH f3.4.8 定点运算一、数的定标 DSP芯片的数以2的补码形式表示: 1位符号位,15位数字。在定点DSP中,都是采用定点数进行数值运算,其操作数一般采用整型数来表示。而许
50、多算法的仿真往往是使用浮点数进行的。对于定点DSP编程来说,数的定标是一个关键性的问题对于16位的DSP而言,由程序员来确定一个数的小数点将处于16位中的哪一位。可以用Q,S法来表示,不同的表示方法带来的数的范围和精度是不同的Q,S表示法及数的范围定标需注意的问题运算时,保证两个操作数的定标值一样;变量的Q值的确定,直接影响到系统的性能指标。若Q值定高了,提高了系统的精度,但可能会带来中间结果的溢出。若Q值定低了就能保证不溢出,但是损失了精度。关键就在于用理论分析或统计的方法估计出每一中间变量的可能动态范围MAX,然后以2MAX的数据范围来定标。 浮点数与定点数转换:对Q15格式:0.9999
51、695 7FFFH0.5 4000H (16384)0 0000H-0.5 C000H; 绝对值乘以32768,取 反再加1-1 8000H 在汇编语言程序中,不能直接写入十进制小数。0.1可写成: .word 1*32768/10 二、处理方法1、为了最大限度保持数的精度,2、溢出及处理 FRACT0 FRACT1 1、小数乘小数 Q15*Q15 Q3030 Q3131(AH/32768)2、小数乘整数 Q15*Q0 Q1515 Q1616 (AH)3、整数乘整数 Q0*Q0 Q0 Q11 三、定点乘法FRACT1:小数乘法方式, 乘法结果自动左移一位乘法结果选取FRACT1 小数小数:结果为AH/32768 小数整数:结果为AHFRACT0 整数整数:结果为A例:计算a=0.1 0.2 -0.3 0.4, x=0.8 0.6 0.4 0.2.bss a,4.bss x,4.bss y,1.datatable: .word 1*32768/10.word
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学前班班主任学期教育情况汇报总结
- 合拍大赛活动策划方案(3篇)
- 人工漂流施工方案(3篇)
- 折扣日活动策划方案(3篇)
- 文安公路施工方案(3篇)
- 景区文化营销方案(3篇)
- 水疗的应急预案(3篇)
- 浦江葡萄营销方案(3篇)
- 电力隧道应急预案(3篇)
- 社区道路施工方案(3篇)
- 2026河南平顶山发展投资控股集团校园招聘备考题库(名师系列)附答案详解
- 2026校招:陕西外经贸集团试题及答案
- 探寻长牡蛎糖原品质性状:遗传密码与分子奥秘解析
- 2026年广东省肇庆市辅警考试试卷带答案
- 2026年南京交通职业技术学院单招职业适应性测试题库及答案详解(夺冠系列)
- 2026年六安职业技术学院单招职业适应性测试题库带答案详解(a卷)
- 钢结构现场焊接作业的防火技术方案
- 2025年广西机场管理集团有限责任公司第一批次招聘106人笔试参考题库附带答案详解
- 工业项目投资估算及财务评价附表(有计算公式)
- 浅谈玻璃幕墙工程的造价管理要点
- (整理版)学案36数列求和
评论
0/150
提交评论