《數(shù)字信號處理技術(shù)及其應(yīng)用.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)字信號處理技術(shù)及其應(yīng)用.ppt(35頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、書名:數(shù)字信號處理技術(shù)及其應(yīng)用 ISBN:7-111-16016-9 作者:劉麗鈞 出版社:機(jī)械工業(yè)出版社 本書配有電子課件,第5章 匯編語言程序設(shè)計(jì)舉例: 5.1 數(shù)據(jù)塊傳送 例1:將數(shù)組X5=1,2,3,4,5初始化 .data TAL: .word 1,2,3,4,5 .sect “.vectors” B START .bss x,5 .text START: STM #x,AR5 RPT #4 MVPD TAB,*AR5+,例2:編寫一段程序?qū)?shù)據(jù)存儲(chǔ)器中的數(shù)組X20復(fù)制到 數(shù)組Y20中。 .bss x,20 .bs
2、s y,20 STM #x,AR2 STM #y,AR3 RPT #19 MVDD AR2+,AR3+,5.2 加減法和乘法運(yùn)算 例3:編寫完成 Z=X+Y-W的功能 LD x,A;直接尋址 ADD y,A SUB w,A; A=A-w STL A, z 例4:編程實(shí)現(xiàn) y=mx+b 的功能 LD m,T MPY x,A ADD b,A STL A, y,,例5:編寫實(shí)現(xiàn) y=x1a1+x2 a2的功能 LD x1,T MPY a1,B LD x2,T MAC a2,B STL B, y STH B, y+1,例6:找出y=aixi(i=1,2,3,4)中乘機(jī)項(xiàng)aixi的
3、最大值, 并存入累加器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-,5.3 重復(fù)操作 例7:對一個(gè)數(shù)組初始化:X5=0,0,0,0,0 .bss x,5 STM #x,AR1 LD #0,A RPT #4 STL A,*AR1+ 或采用如下方法: .bss x,5 STM #x,AR1 RPTZ A,
4、#4 STL A,*AR1+ 注意:執(zhí)行重復(fù)操作時(shí)不響應(yīng)任何中斷,例8:對數(shù)組X5中的每個(gè)元素加1 .bss x,5 Begin: LD #1,16,B STM #4,BRC STM #X,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+ Next: LD #0,B ,5.4 程序的控制與轉(zhuǎn)移 例9:RC TC CC sub,BNEQ BC new,AGT,AOV 例10:計(jì)算 y= xi(i=15) .bss x,5 .bss y,1 STM #x,AR1 STM #4,AR2
5、 LD #0,A Loop:ADD *AR1+,A BANZ loop,*AR2- STL A,y,例11: STM #5,AR1 STM #10,AR0 Loop: *AR1+ CMPR LT,AR1;若(AR1)(AR0),則TC=1 BC loop,TC;若TC=1,則轉(zhuǎn)LOOP,5.5 堆棧的使用方法 在數(shù)據(jù)RAM空間開辟一個(gè)堆棧區(qū),設(shè)置如下: Size .set100 Stack .usect”STK”,size STM #stack+size,SP ,例12:編寫實(shí)現(xiàn)方程y=mx+b的程序,單操作數(shù)法: LD m,T
6、 MPY x,A ADD b,A STL A, y,雙操作數(shù)法: MPY *AR2,*AR3,A ADD b,A STL A, y,5.6 雙操作數(shù)乘法,例13:編寫完成 y=aixi(i=120),采用單操作數(shù)方法: LD #0,B STM,#a,AR2 STM #x,AR3 STM #19,BRC RPTB done-1 LD *AR2+,T 3T MPY *AR3+,A ADD A,B Done:STH B, y STL B, y+1,,采用雙操作數(shù)的方法: LD #0,B STM,#a,AR2 STM #x,AR3 STM #19,
7、BRC RPTB done-1 2T MPY *AR2+,AR3+,A ADD A,B Done:STH B, y STL B, y+1,例14:進(jìn)一步優(yōu)化例13的程序: STM #x,AR2 STM #a,AR3 RPTZ A,#19 MAC *AR2+,*AR3+,A STH A,y STL A, y+1,例15 計(jì)算Z32=X32+Y32,標(biāo)準(zhǔn)運(yùn)算 LD xhi, 16,A ADDS xho,A ADD yhi,16,A ADDS yho,A STH A,zhi STL A,zho (6個(gè)字,6個(gè)T),長字運(yùn)算 DLD xhi,A DADD yhi ,A DSTA,zhi (3
8、個(gè)字,3個(gè)T),,除DST指令(存儲(chǔ)32位數(shù)要用E總線2次,需2個(gè)機(jī)器周期)外, 都是單周期指令,也是在單個(gè)周期內(nèi)同時(shí)利用C總線和D總線, 得到32位操作數(shù)。,5.7 長字運(yùn)算和并行運(yùn)算,并行運(yùn)算指令有4種:并行加載和乘法指令,并行加載和存 儲(chǔ)指令,并行存儲(chǔ)和乘法指令,并行存儲(chǔ)和加/減法指令。,例16:編寫計(jì)算和的程序段 .bss x,3 .bss d,3 STM #x,AR5 STM #d,AR2 LD #0,ASM ADD *AR5+,16,A ST *AR5+,16,A ||LD *AR2+,B ADD *AR2
9、+,16,B STH B,*AR2,x,y,z,e,d,f,,,AR5,AR2,例編寫計(jì)算Z64=W64+X64-Y64 的程序段 W、X、Y和結(jié)果Z都是64位,它們都由兩個(gè)32位的長字組成。利用長字指令完成位數(shù)的加減法,W3 w2 w1 w0 (W64 ) x3 x2 C x1 x0 (X64 ) y3 y2 C y1 y0 (Y64 ) z3 z2 z1 z0 ( Z64 ),,低32 位相加產(chǎn)生進(jìn)位C 低32位相減產(chǎn)生借位C,程序段: DLD w1,A ; A=w1w2 DADD x1,A ; A=w1w0+x1x0,產(chǎn)生進(jìn)
10、位C DLD w3,B ; B=w3w2 ADDC x2,B ; B=w3w2+x2+C ADD x3,16,B ; B=w3w2+x3x2+C DSUB y1,A ; A=w1w0+x1x0-y1y0,產(chǎn)生借位C DST A,z1 ; z1z0=w1w0+x1x0-y1y0 SUBBy2,B ; B=w3w2+x3x2+C-y2-C SUB y3,16,B ; B=w3w2+x3x2+C-y3y2-C DST B,z3 ;z3z2=w3w2+x3x2+C-y3y2-C,32位乘法運(yùn)算 乘法算式如下: x1 x0 S U y1 y0
11、 S U x0y0 UU y1x0 SU x1y0 SU Y1x1 SS w3 w2 w1 w0 S U U U 其中,S---帶符號數(shù),U---無符號數(shù),,,,,例18 :編寫計(jì)算W64=X32*Y32 的程序段 STM #x0,AR2 STM #y0,AR3 LD *AR2,T ;T=x0 MPYU AR3+,A ;A=uy0*ux0 STL A w0 ;w0=ux0*uy0 LD A,-16,A ;A=A16 MACSU *AR2+,*AR3-,A ;A+=y1*ux0 MACS
12、U *AR3+,*AR2,A ;A+=x1*uy0 STL A,w1 ;w1=A LD A,-16,A ;A=A16 MAC *AR2,*AR3,A ;A+=x1*y1 STL A,w2 ;w2=A的低16位 STL A,w3 ;w3=A的高16位,5.8 小數(shù)運(yùn)算,1. 小數(shù)的表示方法 C54X采用2的補(bǔ)碼小數(shù),其最高位為符號位數(shù)值范圍從 -11,一個(gè)16位2的補(bǔ)碼小數(shù)的每一位權(quán)值為: 一個(gè)十進(jìn)制小數(shù)乘以32768之后,將十進(jìn)制整數(shù)部分轉(zhuǎn)換成十六進(jìn)制數(shù),就得到了這個(gè)十進(jìn)制小數(shù)的2的補(bǔ)碼表示了。 注意:匯編語言程序中,不能直接寫入十
13、進(jìn)制小數(shù)。要定義 一個(gè)系數(shù)0.707,可以寫成:word 32768707/1000 不能寫成327680.707.,-1 1/2 1/4 1/8 2-15,2. 小數(shù)乘法與冗余符號位 出現(xiàn)冗余符號位是兩個(gè)帶符號數(shù)相乘,得到的乘積帶2個(gè)符號位,造成錯(cuò)誤的結(jié)果。 解決冗余符號位的方法:在程序中設(shè)定狀態(tài)寄存器ST1中的FRAT(小數(shù)方式)位為1,在乘法器將結(jié)果送至累加器時(shí)就能自動(dòng)的左移一位,自動(dòng)地消去了兩個(gè)帶符號數(shù)相乘時(shí)產(chǎn)生的冗余符號位。 注意: 小數(shù)乘法編程時(shí),應(yīng)事先設(shè)置FRCT位: SSBX FRCT MPY AR2, *AR3,A STH A, Z,例19 編寫計(jì)算
14、y=ai*xi( i=14) 的程序 其中數(shù)據(jù)均為小數(shù): a1=0.1 a2=0.2 a3=-0.3 a4=0.4 x1=0.8 x2=0.6 a3=-0.4 x4=-0.2 .bss x , 4 .bss a , 4 .bss y , 1 .data Table: .word 1*32768/10 .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4
15、*32768/10 .word -2*32768/10 .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,5.9 除法運(yùn)算,C54X中沒有單周期的16位除法指令,利用一條條減法指令(SUBC),加上重復(fù)指令RPT #15就可實(shí)現(xiàn)兩個(gè)無符號的除法運(yùn)算。 SUBC Smem ,src ;(s
16、rc)-(Smem)<<15ALU輸出端 ;如果ALU輸出端0, 則(ALU輸出 端)<<1+1src ;否則(src)<<1src 除法運(yùn)算有兩種情況:,1. |被除數(shù)||除數(shù)|,商為小數(shù) 例20: 編寫0.4(0.8)的程序段 .bss num , 1 .bss den , 1 .bss quot , 1 .data Table : .word 4*32768/10 ;0.4 .word -8*32768/10 ;-0.8 .text Start : STM #num ,AR1 RPT #1
17、MVPD table ,*AR1 ;傳送2個(gè)數(shù)據(jù)至分子、分母單元 LD den ,16,A ;將分母移到累加器A(3116) MPYA num ;(num)*(A(3216))B, 獲取商的符號(在累加器B中) ABS A ;分母取絕對值,STH A,den ;分母絕對值存放原處 LD num ,16 ,A ;分子A(3216) ABS A ;分子取絕對值 RPT #14 ;15次減法循環(huán),完成除法 SUBC den , A ;如果B0(商是負(fù)數(shù)),則需要變號 XC
18、 1, BLT NEG A STL A,quot ;保存商,注意:SUBC指令僅對無符號數(shù)進(jìn)行操作,因此事先必須對除數(shù)和被除數(shù)取絕對值。利用乘法操作,獲得商的符號,最后通過條件執(zhí)行指令給商加上適當(dāng)?shù)姆枴?2. |被除數(shù)||除數(shù)| ,商為整數(shù) 與例 20,除輸入數(shù)據(jù)外,僅有下列改動(dòng) LD num ,16 ,A 改成 LD num ,A RPT #14 改成 RPT #15,5.10 浮點(diǎn)運(yùn)算,為了擴(kuò)大數(shù)據(jù)的范圍和精度,往往需要采用浮點(diǎn)運(yùn)算。C54X雖然是個(gè)定點(diǎn)DSP器件,但它支持浮點(diǎn)運(yùn)算。 1. 浮點(diǎn)數(shù)的表示方法 浮點(diǎn)數(shù)用 尾數(shù)和指數(shù)組成,定點(diǎn)數(shù)=尾數(shù)2-指數(shù) 浮點(diǎn)
19、數(shù)的尾數(shù)和指數(shù)可正可負(fù),均用補(bǔ)碼表示。指數(shù)范圍-831。 2. 定點(diǎn)數(shù)浮點(diǎn)數(shù) 通過3條指令實(shí)現(xiàn) (假設(shè)定點(diǎn)數(shù)已在累加器A中) 1)EXP A 例22 EXP A 執(zhí)行前 執(zhí)行后 A=FF FFFF FFCB A=FF FFFF FFCB T= 0000 T= 0019(25),例23 EXP B 執(zhí)行前 執(zhí)行后 A=07 8543 2105 A=FF 8543 0000 T= 0007 T= FFFC(-4) 2) ST T, EXPONENT 這條緊接在XEP后的指令是將保存在T寄存器中的指數(shù)存放到數(shù)據(jù)寄
20、存器的指數(shù)單元。 3)NORM A 例24 : NORM A 執(zhí)行前 執(zhí)行后 A=FF FFFF F001 A=FF 8008 0000 T= 0013 T= 0013(19),例25 : NORM B , A 執(zhí)行前 執(zhí)行后 A=FF FFFF F001 A=FF 4214 1414 B=21 0A0A 0A0A B=FF 4214 1414 T= FFF9 T= FFF9(-7) 注意:NORM指令不能緊跟在EXP指令的后面。 3. 浮點(diǎn)數(shù)定點(diǎn)數(shù) 將浮點(diǎn)數(shù)轉(zhuǎn)化為定點(diǎn)數(shù)時(shí),只要按指數(shù)值將其右移(指數(shù)為負(fù)數(shù)時(shí)左移)就行了。 4. 浮點(diǎn)數(shù)乘法舉例 見書P229頁例26,【例5.26】編寫浮點(diǎn)乘法程序,完成x1x20.3(0.8)運(yùn)算程序中保留10個(gè)數(shù)據(jù)存儲(chǔ)單元:,