




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、,1,第三章TMS320C54x匯編語言程序設(shè)計(jì),光電學(xué)院 樂燕芬 le_,2,內(nèi)容提要,匯編語言源程序的概述,堆棧的使用方法,控制程序,算術(shù)運(yùn)算,1,2,3,4,3,3-1 匯編語言源程序概述,.asm為擴(kuò)展名 助記符指令語法格式 標(biāo)號: 助記符 操作數(shù) ; 注釋,4,3-1 匯編語言源程序概述,標(biāo)號 冒號可選;由字母、數(shù)字、下劃線等組成;分大小寫 供本程序或其它程序調(diào)用,標(biāo)號的值是段程序計(jì)數(shù)器SPC的當(dāng)前值(局部的符號地址)。 例如,若使用.word偽指令初始化幾個(gè)字,則標(biāo)號將指到第一個(gè)字。,標(biāo)號也可獨(dú)立成行,5,3-1 匯編語言源程序概述,可作為.global,.ref,.def或.bs
2、s等匯編偽指令的操作數(shù) 如:,.def:在當(dāng)前模塊中定義,并可在別的模塊中使用的符號。 .ref:在當(dāng)前模塊中使用,但在別的模塊中定義的符號。 .global:可以是上面的任何一種情況。,6,3-1 匯編語言源程序概述,操作數(shù) 指令中參與操作的數(shù)值或匯編偽指令定義的內(nèi)容,緊跟在助記符的后面,由一個(gè)或多個(gè)空格分開。 操作數(shù)前綴 “#”:作為立即數(shù) 例如:Label: ADD # 99, B “*” :間接地址,即把操作數(shù)的內(nèi)容作為地址 例如: Label: LD * AR3, B “”:作為直接地址,即操作數(shù)由直接地址碼賦值。 例如: Label: LD x, A,7,3-1 匯編語言源程序概述
3、,匯編語言中的數(shù)據(jù)類型,8,3-1 匯編語言源程序概述,匯編時(shí)間常數(shù) .set 使用.set偽指令給一個(gè)符號賦值,該符號就成為一個(gè)匯編時(shí)間常數(shù),等效于一個(gè)常數(shù)。 將符號常數(shù)賦給寄存器名。此時(shí),該符號變成了寄存器的替代名。,9,3-1 匯編語言源程序概述,局部標(biāo)號 局部標(biāo)號是一種特殊的標(biāo)號,使用的范圍和影響是臨時(shí)性的 定義方式: 用$n來定義。n是09的十進(jìn)制數(shù),10,3-1 匯編語言源程序概述,局部標(biāo)號舉例:,假設(shè)符號ADDRA,ADDRB,ADDRC已經(jīng)在前面作了定義。,11,3-1 匯編語言源程序概述,符號: 由AZ,az,09,_和$組成;第一位不能為數(shù)字;不能含空格; 符號也可被設(shè)置成
4、常數(shù)值。為了提高程序的可讀性,可以用有意義的名稱來代表一些重要的常數(shù)值。 如:,12,3-1 匯編語言源程序概述,匯編源程序中的表達(dá)式,13,3-2 堆棧的使用,當(dāng)程序調(diào)用中斷服務(wù)程序或子程序時(shí),需要將程序計(jì)數(shù)器PC的值和一些重要的寄存器值進(jìn)行壓棧保護(hù),以便程序返回時(shí)能從間斷處繼續(xù)執(zhí)行。 C54x提供一個(gè)用16位堆棧指針SP尋址的軟件堆棧。 當(dāng)向堆棧中壓入數(shù)據(jù)時(shí),堆棧是從高地址向低地址方向填入,堆棧指針SP先減1,然后將數(shù)據(jù)壓入堆棧。 當(dāng)從堆棧中彈出數(shù)據(jù)時(shí)。數(shù)據(jù)先從堆棧中彈出,然后堆棧指針SP加1。,14,3-2 堆棧的使用方法,堆棧的設(shè)置 使用堆棧 如: CALL pmad ;(SP)-1S
5、P,(PC)+2TOS,pmadPC RET ;(TOS)PC,(SP)+1SP,15,3-2 堆棧的使用方法,堆棧大小的確定 先開辟一個(gè)較大的堆棧區(qū),用已知數(shù)填充 如: LD # -9224,B STM # length,AR1 MVMM SP,AR4 loop: STL B,*AR4- BANZ loop,*AR1-,;堆棧區(qū)要充填的數(shù)0DBF8h加載B ;設(shè)置循環(huán)次數(shù) ;設(shè)置數(shù)據(jù)指針AR4,SPAR4 ;循環(huán),填充數(shù)據(jù),運(yùn)行程序,執(zhí)行所有堆棧操作 檢查堆棧中的數(shù)值 用過的堆棧區(qū)就是實(shí)際需要的堆??臻g。,6B14,0013,SP,7AB3,用過的棧區(qū),16,3-3 控制程序,C54x具有豐
6、富的程序控制指令,利用這些指令可以執(zhí)行分支轉(zhuǎn)移、子程序調(diào)用、子程序返回,條件執(zhí)行以及循環(huán)等控制操作 分支操作: 分支轉(zhuǎn)移程序 子程序調(diào)用 子程序返回 條件操作程序 比較轉(zhuǎn)移 循環(huán)操作,17,3-3 控制程序,分支操作分支轉(zhuǎn)移程序 改寫PC值,使程序改變流向 分支轉(zhuǎn)移指令,18,3-3 控制程序,例: STM #88H,AR0 LD #1000H,A Loop1: ADD AR0,A BC Loop1,AGT,AOV,;若累加器A0且溢出則轉(zhuǎn)至 Loop1,否則往下執(zhí)行,例:,19,3-3 控制程序,BC Loop1,AGT,AOV,20,3-3 控制程序,分支操作子程序調(diào)用 當(dāng)子程序被調(diào)用時(shí),
7、緊跟在調(diào)用后的下一條指令的地址保存在堆棧中。該地址用于返回時(shí)能繼續(xù)執(zhí)行調(diào)用前的程序,21,3-3 控制程序,分支操作子程序返回 子程序返回可使程序重新在被中斷的連續(xù)指令處繼續(xù)執(zhí)行。 返回指令通過將彈出堆棧的值(包含將要執(zhí)行的下一條指令的地址),送到程序計(jì)數(shù)器PC來實(shí)現(xiàn)返回功能。,22,3-3 控制程序,例: STM #123H,AR0 LD #456H,AR1 CALL new LD AR1,16,A new: MPY AR0,AR1,A RET,;將操作數(shù)#123H裝入AR0 ;將操作數(shù)#456H裝入AR1 ;調(diào)子程序new ;將AR1的內(nèi)容左移16位后裝入A ;AR0與AR1的內(nèi)容相乘,結(jié)
8、果放入A中 ;子程序返回,例:,23,3-3 控制程序,分支操作比較轉(zhuǎn)移 指令: CMPR CC,ARx 指令功能: 輔助寄存器ARx與AR0進(jìn)行比較,若比較結(jié)果使所給定的測試條件成立,則TC位置1。 實(shí)現(xiàn)方法: 通過CMPR的比較結(jié)果得TC值; 根據(jù)TC值,由條件轉(zhuǎn)移指令實(shí)現(xiàn)分支轉(zhuǎn)移。,24,3-3 控制程序,例如:比較操作后條件分支轉(zhuǎn)移 STM #5,AR1 ; AR1=5 STM #10,AR0 ; AR0=10 loop: *AR1+ ; AR1=AR1+1 CMPR LT,AR1 ;若AR1 AR0,則TC=1,否則為0 BC loop, TC ;若AR1 AR0,則循環(huán) ;若AR1
9、AR0,則順序執(zhí)行,25,3-3 控制程序,循環(huán)操作 指令: BANZ 轉(zhuǎn)移地址,*ARx 指令功能: 當(dāng)輔助寄存器不為0時(shí),則轉(zhuǎn)至轉(zhuǎn)移地址,否則順序執(zhí)行。,26,3-3 控制程序,例:,.bss x,10 ;給x保留10個(gè)空間 .bss y,1 ;給y保留1個(gè)空間 STM #x,AR1 ;設(shè)置數(shù)據(jù)段的首地址 STM #9,AR2 ;設(shè)置循環(huán)計(jì)數(shù)值 LD #0,A ;累加器清0 loop: ADD *AR1+,A ;累加運(yùn)算,并修改地址 BANZ loop,*AR2- ;若計(jì)數(shù)值不為0,則循環(huán),并計(jì)數(shù)值減1 ;若計(jì)數(shù)值為0,則結(jié)束循環(huán) STL A, y ;累加和存入y中,注意: BANZ lo
10、op, *AR2- ;先判斷,再修正AR2=AR2-1,用AR2作為循環(huán)計(jì)數(shù)器,由BANZ實(shí)現(xiàn)程序的循環(huán)控制。,27,3-4 算術(shù)運(yùn)算,加減法和乘法運(yùn)算 在數(shù)字信號處理中,加法和乘法運(yùn)算是最常見的算術(shù)運(yùn)算。 例:計(jì)算 y = a x + b,LD a, T ;取a值,T=a MPY x, B ;完成ax乘積,B=ax ADD b, B ;完成ax+b運(yùn)算,B=ax+b STL B, y ;計(jì)算結(jié)果存入y中,28,;T=x1 ;B=x1a1 ;T=x2 ;乘法累加,B=x1a1+x2a2 ;計(jì)算結(jié)果的低字BL存入y中 ;計(jì)算結(jié)果的高字BH存入y+1中,3-4 算術(shù)運(yùn)算,例:計(jì)算 y = xl a
11、l + x2 a2,LD x1, T MPY a1, B LD x2, T MAC a2, B STL B, y STH B, y+1,29,例:計(jì)算 y =,3-4 算術(shù)運(yùn)算,Test1.asm,30,3-4 算術(shù)運(yùn)算,例: 求4項(xiàng)乘積aixi(i=1,2,3,4,5)中的最大值,并存放累加器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-,;乘法運(yùn)算A=aixi,并修改AR2 ;乘法運(yùn)算B=aixi,并修改AR
12、2 ;求A和B中的最大值 ;若AR30,則循環(huán),并修改AR3,31,35 重復(fù)操作,指令 RPT: 重復(fù)下條指令 RPTZ: 累加器清0,并重復(fù)下條指令 RPTB: 塊重復(fù),.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+,【例】對數(shù)組進(jìn)行初始化,使x8=0,0,0,0,0,0,0,0,32,35 重復(fù)操作,【例】對數(shù)組x8中的每一元素加1。,.bss x, 8 begin: LD #1,16,B STM #7,BRC STM #x,AR4 RPTB nex
13、t-1 ADD *AR4,16,B,A STH A,*AR4+ next: LD #0,B ,;設(shè)置重復(fù)次數(shù),BRC=7,循環(huán)8次 ;設(shè)置循環(huán)結(jié)束地址 ;數(shù)組數(shù)據(jù)左移16位與BH相加 ;存入數(shù)組結(jié)果,并修改地址,注 意 塊結(jié)束地址REA 重復(fù)次數(shù) RPTB指令可以響應(yīng)中斷,33,36 數(shù)據(jù)塊傳送,指令 數(shù)據(jù)存儲器之間 MVDK Smem,dmad MVKD dmad,Smem MVDD Xmem,Ymem,數(shù)據(jù)存儲器與MMR之間,MVDM dmad,MMR MVMD MMR,dmad MVMM MMRx,MMRy,程序存儲器和數(shù)據(jù)存儲器之間,MVPD pmad,Smem MVDP Smem,p
14、mad READA Smem WRITA Smem,從PA口讀/寫數(shù)據(jù),PORTR PA,Smem PORTW Smem,PA,34,36 數(shù)據(jù)塊傳送,35,36 數(shù)據(jù)塊傳送,【例】初始化數(shù)組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+ ,36,37 雙操作數(shù)乘法,課后自習(xí) 雙操作數(shù)乘法的編程方法、特點(diǎn),37,38 小數(shù)運(yùn)算,定標(biāo) 設(shè)定小數(shù)點(diǎn)在16位中的位置。 位置不同,可以表示不同大小和不同精度的小數(shù)。 Q表示法
15、如Q0,Q1,Q15。Q越大,可以表示的數(shù)的范圍越小,但精度越高。 小數(shù)表示方法 基于2的補(bǔ)碼小數(shù)(Q15格式),其位權(quán)值: MSB LSB -1. 2-1 2-2 2-3 2-15 00000010.1010000021+2-1+2-3 = 2.625,38,0.5 4000H 0.25 2000H 0 0000H -0.25 E000H -0.5 C000H -1 8000H,0.532768=4000H 0.2532768=2000H 032768=0000H (0.2532768)補(bǔ)=E000H (0.532768)補(bǔ)=C000H (132768)補(bǔ)=8000H,注意:匯編時(shí),不能直接
16、寫成十進(jìn)制小數(shù) 如:0.907 .word 32 768*907/1000,38 小數(shù)運(yùn)算,2的補(bǔ)碼小數(shù): 正數(shù):乘以32768(215),整數(shù)轉(zhuǎn)換成16進(jìn)制數(shù)(Q15格式) 負(fù)數(shù):其絕對值乘以32768,整數(shù)取反加1 (Q15格式),39,38 小數(shù)運(yùn)算,小數(shù)乘法與冗余符號位 小數(shù)乘法實(shí)例 0.5(-0.375) = -0.1875 假設(shè)字長4位,累加器8位(Q3格式),0 1 0 0 (0.5),1 1 0 1 (-0.375),0 1 0 0,0 0 0 0,0 1 0 0,1 1 0 0 (-0100),1 1 1 0 1 0 0,(-0.1875),40,38 小數(shù)運(yùn)算,乘積: -0
17、.1875 = 1110100 7位二進(jìn)制,擴(kuò)展8位后,乘積:11110100 = -0.09375,出錯(cuò)原因:兩帶符號數(shù)相乘,其結(jié)果帶有2個(gè)符號位。,解決辦法:運(yùn)算結(jié)果左移一位,消去多余符號位??赏ㄟ^對 FRCT位置1,乘法器自動(dòng)將乘積結(jié)果左移一位,自動(dòng)消去冗余 符號位,41,38 小數(shù)運(yùn)算,【例】 編制程序段計(jì)算 a1=0.3 a2=0.2 a3=-0.4 a4=0.1 x1=0.6 x2=0.5 x3=-0.1 x4=-0.2,floatMAC.asm,42,39 FIR濾波器的設(shè)計(jì),FIR濾波器的差分方程: FIR濾波器的傳遞函數(shù): FIR濾波器的結(jié)構(gòu),43,39 FIR濾波器的設(shè)計(jì),
18、FIR濾波器的輸出表達(dá)式 y(n)=b0 x(n)+b1x(n-1)+ +bn-1x(n-N+1) bi為濾波器系數(shù),x(n)為濾波器在n時(shí)刻的輸入,y(n)為n時(shí)刻的輸出。 基本算法: 采用乘法累加運(yùn)算。即不斷輸入樣本x(n),經(jīng)過z-1延時(shí)后,再進(jìn)行乘法-累加,最后輸出濾波結(jié)果y(n)。 z-1算法的實(shí)現(xiàn) 線性緩沖區(qū)法 循環(huán)緩沖區(qū)法,44,39 FIR濾波器的設(shè)計(jì),線性緩沖區(qū)法 在數(shù)據(jù)存儲器中開辟一個(gè)N單元的緩沖區(qū)(滑窗),用來存放最新的N個(gè)輸入樣本; 從最老樣本開始取數(shù),每取一個(gè)數(shù)后,樣本向下移位; 讀完最后一個(gè)樣本后,輸入最新樣本并存入緩沖區(qū)的頂部。,緩沖區(qū): 頂部為低地址單元,存放最
19、新樣本; 底部為高地址單元,存放最老樣本; 指針ARx指向緩沖區(qū)底部。,45,39 FIR濾波器的設(shè)計(jì),求y(n)的過程: 算法,取數(shù)、移位和運(yùn)算:, 以ARx為指針,按x(n-7)x(n)的順序取數(shù),每取一次數(shù)后,數(shù)據(jù)向下移一位,并完成一次乘法累加運(yùn)算;, 當(dāng)經(jīng)過8次取數(shù)、移位和運(yùn)算后,得y(n);, 求得y(n)后,輸入新樣本x(n+1),存入緩沖區(qū)頂部單元;, 修改指針ARx,指向緩沖區(qū)的底部。,46,39 FIR濾波器的設(shè)計(jì),求y(n)的過程: 算法,ARx,x(n-7),ARx,x(n-6),y(n)=y7=b7x(n-7)+0,x(n-6),ARx,x(n-5),y(n)=y6=b
20、6x(n-6)+y7,x(n-5),ARx,x(n-4),y(n)=y5=b5x(n-5)+y6,x(n-4),ARx,x(n-3),y(n)=y4=b4x(n-4)+y5,x(n-3),ARx,x(n-2),y(n)=y3=b3x(n-3)+y4,x(n-2),ARx,x(n-1),y(n)=y2=b2x(n-2)+y3,x(n-1),ARx,x(n),y(n)=y1=b1x(n-1)+y2,x(n),y(n)=b0 x(n)+y1,PORTR,x(n+1),ARx,47,39 FIR濾波器的設(shè)計(jì),求y(n1)的過程: 算法,結(jié)果:, y(n),取數(shù)順序:,x(n-6)x(n+1),x(n-
21、5),x(n-4),x(n-3),x(n-2),x(n-1),x(n),x(n+1),最新樣本:,x(n+2),x(n+2), y(n+1), y(n+6), y(n+7),ARx,48,39 FIR濾波器的設(shè)計(jì),Z-1的運(yùn)算是通過執(zhí)行存儲器延時(shí)指令來實(shí)現(xiàn)的。即將數(shù)據(jù)存儲器中的數(shù)據(jù)向較高地址單元移位來進(jìn)行延時(shí)。,注意:用線性緩沖區(qū)實(shí)現(xiàn)z-1運(yùn)算時(shí),緩沖區(qū)的數(shù)據(jù)需要移動(dòng),這樣 在一個(gè)機(jī)器周期內(nèi)需要一次讀和一次寫操作。因此,線性緩 沖區(qū)只能定位在DARAM中。,49,39 FIR濾波器的設(shè)計(jì),可與其他指令結(jié)合,可在同樣的機(jī)器周期內(nèi)完成這些操作。如: LD + DELAY LTD MAC + DEL
22、AY MACD 例:雙操作數(shù)尋址指令:MACD *AR1-,b,A 功能: A=A+(AR1)(b), AR1-1AR1, (AR1)(AR1+1),50,39 FIR濾波器的設(shè)計(jì),FIR濾波器的實(shí)現(xiàn),設(shè)N=7,F(xiàn)IR濾波器的算法:,y(n)=b0 x(n)+b1x(n-1)+b5x(n-5) +b6x(n-6),使用線性緩沖區(qū)的FIR1.asm,MACD *AR1-,b,A,51,39 FIR濾波器的設(shè)計(jì),Z-1的另外一種實(shí)現(xiàn):循環(huán)緩沖區(qū)法 特點(diǎn): 在數(shù)據(jù)存儲器中開辟一個(gè)N個(gè)單元的緩沖區(qū)(滑窗),用來存放最新的N個(gè)輸入樣本; 從最新樣本開始取數(shù); 讀完最老樣本后,輸入最新樣本來代替最老樣本,而其他數(shù)據(jù)位置不變; 用BK寄存器對緩沖區(qū)進(jìn)行間接尋址,使緩沖區(qū)地址首尾相鄰。,52,39 FIR濾波器的設(shè)計(jì),求y(n)的過程:,ARx,ARx,計(jì)算過程: 以ARx為指針,按順序取數(shù),并修改指針; 每取1次數(shù)后,完成1次乘法累加計(jì)算; 求得y(n)后,輸入新樣本替代最老樣本; 修改指針ARx,指向最新樣
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江蘇省版人力資源外包服務(wù)合同
- 英國初中筆試題目及答案
- 銀行類筆試題目及答案
- 2025臨時(shí)工勞務(wù)合同-【模板】
- 2025船只買賣合同(被抵押船只)
- 醫(yī)藥銷售筆試題目及答案
- 醫(yī)生理論素養(yǎng)面試題庫及答案
- 醫(yī)療事故法律試題及答案
- 公司宿舍用水管理制度
- 公司打印傳真管理制度
- 急性心肌梗死病史簡介及護(hù)理查房
- MOOC 臨床生物化學(xué)檢驗(yàn)技術(shù)-杭州醫(yī)學(xué)院 中國大學(xué)慕課答案
- 燙傷的護(hù)理課件
- 酸嘢商業(yè)計(jì)劃書
- 2023-2024學(xué)年人教版小學(xué)英語四年級下冊期末測試卷含答案
- 《唐詩三百首》讀書分享交流會
- JTS-T 200-2023 設(shè)計(jì)使用年限50年以上港口工程結(jié)構(gòu)設(shè)計(jì)指南
- 展覽費(fèi)用預(yù)算方案
- 輸血科崗位職責(zé)、技術(shù)操作規(guī)程和管理制度
- 疼痛科護(hù)士的非藥物疼痛管理技巧
- 古典歐式風(fēng)格
評論
0/150
提交評論