版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章匯編語(yǔ)言程序設(shè)計(jì)6.1程序的控制與轉(zhuǎn)移TMS320C54x具有豐富的程序控制與轉(zhuǎn)移指令,利用這些指令可以執(zhí)行分支轉(zhuǎn)移、循環(huán)控制及子程序操作?;镜某绦蚩刂浦噶钊绫?-1所示。表6-1基本的程序控制指令分支轉(zhuǎn)移指令執(zhí)行周期子程序調(diào)用指令執(zhí)行周期子程序返回指令執(zhí)行周期Bnext4BACCsrc6BCnext,cond5/3CALLsub4CALAsrc6CCsub,cond5/3RET5RCcond5/31.條件算符條件分支轉(zhuǎn)移指令或條件調(diào)用、條件返回指令都用條件來(lái)限制分支的轉(zhuǎn)移、調(diào)用和返回操作。條件算符分成兩組,每組組內(nèi)還有分類(lèi)。第1組:EQNEQLEQGEQLTGTOVNOV第2組:TCNTCCNCBIONBIO選用條件算符時(shí)應(yīng)當(dāng)注意以下3點(diǎn):?第1組:組內(nèi)兩類(lèi)條件可以進(jìn)行與/或運(yùn)算,但不能在組內(nèi)同一類(lèi)中選擇兩個(gè)條件算符與/或。當(dāng)選擇兩個(gè)條件時(shí),累加器必須是同一個(gè)。例如,可以同時(shí)選擇AGT和AOV,但不能同時(shí)選擇AGT和BOV。?第2組:可從組內(nèi)3類(lèi)算符中各選一個(gè)條件算符與/或,但不能在組內(nèi)同一類(lèi)中選兩個(gè)條件算符與/或。例如,可以同時(shí)測(cè)試TC、C和BIO,但不能同時(shí)測(cè)試NTC和TC。?組與組之間的條件只能進(jìn)行或運(yùn)算。2.循環(huán)操作BANZ在程序設(shè)計(jì)時(shí),經(jīng)常需要重復(fù)執(zhí)行某段程序,利用BANZ(當(dāng)輔助寄存器不為0時(shí)轉(zhuǎn)移)指令執(zhí)行循環(huán)計(jì)數(shù)和操作是十分方便的。SUM:STM #x,AR3 STM #4,AR2loop: ADD *AR3+,A ;程序存儲(chǔ)器 BANZ loop,*AR2- STL A,@y6.2堆棧的使用方法TMS320C54x提供一個(gè)用16位堆棧指針(SP)尋址的軟件堆棧。當(dāng)向堆棧中壓入數(shù)據(jù)時(shí),堆棧從高地址向低地址增長(zhǎng)。堆棧指針是減在前、加在后,即先SP1再壓入數(shù)據(jù),先彈出數(shù)據(jù)后SP+1。如果程序中要用到堆棧,則必須先進(jìn)行設(shè)置,方法如下:size .set 100stack .usect "STK",size STM #stack+size,SP上述語(yǔ)句在數(shù)據(jù)RAM空間開(kāi)辟一個(gè)堆棧區(qū)。前兩句在數(shù)據(jù)RAM中自定義一個(gè)名為STK的保留空間,共100個(gè)單元。第3句將這個(gè)保留空間的高地址(#stack+size)賦給SP,作為棧底,參見(jiàn)圖6-1。至于自定義未初始化段STK究竟定位在數(shù)據(jù)RAM中的什么位置,應(yīng)當(dāng)在鏈接器命令文件中規(guī)定。數(shù)據(jù)存儲(chǔ)器0
STK堆棧的設(shè)置size.set100stack.usect"STK",sizeSTM#stack+size,SP堆棧的用法壓入操作:SP先減1后,再將數(shù)據(jù)壓入堆棧中彈出操作:數(shù)據(jù)彈出后,再將SP加1…stack可用棧區(qū)SP→最后用的單元已用棧區(qū)65535…圖6-1堆棧設(shè)置堆棧之后,就可以使用堆棧了,例如:CALLpmad ;(SP)-1→SP,(PC)+2→TOS ;pmad→PCRET ;(TOS)→PC,(SP)+l→SP堆棧區(qū)應(yīng)開(kāi)辟多大?這需要按照以下步驟來(lái)確定:①先開(kāi)辟一個(gè)大堆棧區(qū),且用已知數(shù)填充。②運(yùn)行程序,執(zhí)行所有的操作。③暫停,檢查堆棧中的數(shù)值如下圖。④用過(guò)的堆棧區(qū)才是實(shí)際需要的堆棧空間。2.乘法【例6-5】計(jì)算y=mx+b。
SU: LD @m,T MPY @x,A ADD @b,A STL A,@y RET .end計(jì)算結(jié)果:數(shù)據(jù)寄存器地址存儲(chǔ)內(nèi)容十進(jìn)制數(shù)m 0060H 0003H3x 0061H 000FH15b 0062H 0014H20y 0063H 0041H656.4重復(fù)操作1.重復(fù)執(zhí)行單條指令
重復(fù)指令RPT或RPTZ允許重復(fù)執(zhí)行緊隨其后的那一條指令。如果要重復(fù)執(zhí)行n次,則重復(fù)指令中應(yīng)規(guī)定計(jì)數(shù)值為n1。由于重復(fù)的指令只需要取指一次,與利用BANZ指令進(jìn)行循環(huán)相比,效率要高得多。
【例6-9】對(duì)數(shù)組x[5]={0,0,0,0,0}進(jìn)行初始化。.bss x,5或者STM #x,AR1LD #0H,ARPT #4STL A,*AR1+或者.bss x,5STM #x,AR1RPTZ #4STL A,*AR1+2.塊程序重復(fù)操作
塊程序重復(fù)操作RPTB將重復(fù)操作的范圍擴(kuò)大到任意長(zhǎng)度的循環(huán)回路。由于塊程序重復(fù)指令RPTB的操作數(shù)是循環(huán)回路的結(jié)束地址,而且,其下條指令就是重復(fù)操作的內(nèi)容,因此必須先用STM指令將所規(guī)定的迭代次數(shù)加載到塊重復(fù)計(jì)數(shù)器(BRC)中。RPTB指令的特點(diǎn)是:對(duì)任意長(zhǎng)度的程序段的循環(huán)開(kāi)銷(xiāo)為0,其本身是一條2字4周期指令;循環(huán)開(kāi)始地址(RSA)是RPTB指令的下一行,結(jié)束地址(REA)由RPTB指令的操作數(shù)規(guī)定?!纠?-10】對(duì)數(shù)組x[5]中的每個(gè)元素加1。 .bss x,5start: LD #1,16,B STM #4,BRC STM #x,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+next: LD #0,B6.5數(shù)據(jù)塊傳送
這些指令的特點(diǎn)如下:(1)傳送速度比加載和存儲(chǔ)指令的速度要快;(2)傳送數(shù)據(jù)不需要通過(guò)累加;(3)可以尋址程序存儲(chǔ)器;(4)與RPT指令相結(jié)合,可以實(shí)現(xiàn)數(shù)據(jù)塊傳送。數(shù)據(jù)存儲(chǔ)器←→數(shù)據(jù)存儲(chǔ)器#W/C數(shù)據(jù)存儲(chǔ)器←→MMR#W/CMVDKSmem,dmadMVKDdmad,SmemMVDDXmem,Ymem2/22/21/1MVDMdmad,MMRMVMDMMR,dmadMVMMmmr,mmr2/22/21/1程序存儲(chǔ)器←→數(shù)據(jù)存儲(chǔ)器#W/C程序存儲(chǔ)器(Acc)←→數(shù)據(jù)存儲(chǔ)器#W/CMVPDPmad,SmemMVDPSmem,Pmad2/32/4READASmemWRITASmem1/51/51.程序存儲(chǔ)器→數(shù)據(jù)存儲(chǔ)器
【例6-11】初始化數(shù)組x[5]={1,2,3,4,5}。 .title "zh9.asm" .mmregsSTACK .usect "STACK",10H .bss x,5 .datatable: .word 1,2,3,4,5 .def start .textstart: STM #x,AR1 RPT #4 MVPD table,*AR1+
end: B end .end2.?dāng)?shù)據(jù)存儲(chǔ)器→數(shù)據(jù)存儲(chǔ)器
【例6-12】編寫(xiě)一段程序,將數(shù)據(jù)存儲(chǔ)器中數(shù)組x[20]中的數(shù)據(jù)復(fù)制到數(shù)組y[20]中。 .title "zh10.asm" .mmregsSTACK .usect "STACK",30H
.bss x,20 .bss y,20 .datatable: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 .def start .textstart: STM #x,AR1 RPT #19 MVPD table,*AR1+ ;從程序存儲(chǔ)器傳送到數(shù)據(jù)存儲(chǔ)器中 STM #x,AR2 STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+
;從數(shù)據(jù)存儲(chǔ)器傳送到數(shù)據(jù)存儲(chǔ)器中end: B end .end20個(gè)數(shù)據(jù)從0060H~0073H傳送到0074H~0087H,結(jié)果如圖所示:
如果求y=mx+b,則單操作數(shù)和雙操作數(shù)實(shí)現(xiàn)方法比較如表6-4所示:表6-4單/雙操作數(shù)編程比較
用雙操作數(shù)指令編程的特點(diǎn)為:(1)用間接尋址方式獲得操作數(shù),且輔助寄存器只能用AR2~AR5;(2)占用的程序空間??;(3)運(yùn)行的速度快。單操作數(shù)方法雙操作數(shù)方法LD@m,TMPY@x,AADD@b,ASTLA,@yMPY*AR2,*AR3,AADD@b,ASTLA,@y雙操作數(shù)MAC型的指令有4種,如表6-5所示:表6-5MAC型雙操作數(shù)指令
對(duì)于Xmem和Ymem,只能用以下輔助寄存器及尋址方式:
輔助寄存器 AR2尋址方式 *ARn AR3 *ARn+ AR4 *ARn AR5 *ARn+0%指令功能MPYXmem,Ymem,dstMACXmem,Ymem,src[,dst]MASXmem,Ymem,src[,dst]MACPSmem,Pmad,src[,dst]dst=Xmem*Ymemdst=src+Xmem*Ymemdst=src-Xmem*Ymemdst=src+Smem*Pmad6.7長(zhǎng)字運(yùn)算和并行運(yùn)算
1.長(zhǎng)字指令
DLD Lmem,dst ;dst=LmemDST src,Lmem ;Lmem=srcDADD Lmem,src[,dst] ;dst=src+LmemDSUB Lmem,src[,dst] ;dst=src-LmemDRSUB Lmem,src[,dst] ;dst=Lmem-src(1)偶地址排列法
(2)奇地址排列法
數(shù)據(jù)存儲(chǔ)器偶地址:xhi奇地址:xlo程序存儲(chǔ)器偶地址:1234奇地址:5678
.long12345678h變量名稱(chēng)字長(zhǎng)頁(yè)鄰接偶地址排列法
.bssxhi,2,1,1圖6-8奇偶地址排列規(guī)定2.并行運(yùn)算
并行運(yùn)算指令舉例
指令舉例操作說(shuō)明LD||MAC[R]LD||MAS[R]LDXmem,dst||MAC[R]Ymem[,dst2]dst=Xmem<<16dst2=dst2+T*YmemST||LDSTsrc,Ymem||LDXmem,dstYmem=src>>(16-ASM)dst=Xmem<<16ST||MPYST||MAC[R]ST||MAS[R]STsrc,Ymem||MAC[R]Xmem,dstYmem=src>>(16-ASM)dst=dst+T*XmemST||ADDST||SUBSTsrc,Ymem||ADDXmem,dstYmem=src>>(16-ASM)dst=dst+Xmem【例6-16】用并行運(yùn)算指令編寫(xiě)計(jì)算z=x+y和f=e+d的程序。
.mmregsSTACK .usect "STACK",10H .bss x,3 .bss d,3 .def start .datatable: .word 0123H,1027H,0,1020H,0345H,0 .textstart: STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #5 MVPD table,*AR1+ 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,*AR2end: B end .end3.64位加法和減法運(yùn)算
64位數(shù)的加法和減法算式如下:
w3w2w1w0(W64)+x3x2Cx1x0(X64)低32位相加產(chǎn)生進(jìn)位C
-y3y2C'y1y0(Y64)低32位相減產(chǎn)生借位C'
z3z2z1z0(Z64)〖例6-17〗編寫(xiě)計(jì)算Z64=W64+X64-Y64的程序。W、X、Y和結(jié)果Z都是64位數(shù),它們都由兩個(gè)32位的長(zhǎng)字組成。利用長(zhǎng)字指令可以完成64位數(shù)的加/減法。4.32位乘法運(yùn)算
32位乘法算式如下:
x1x0SU×y1y0SUx0×y0U×Uy1×x0S×Ux1×y0S×Uy1×x1S×Sw3w2w1w0SUUU其中,S——帶符號(hào)數(shù),U——無(wú)符號(hào)數(shù)。由上算式可見(jiàn),在32位乘法運(yùn)算中,實(shí)際上包括三種乘法運(yùn)算:U×U,S×U及S×S。一般的乘法運(yùn)算指令都是兩個(gè)帶符號(hào)數(shù)相乘,即S×S。所以,在編程時(shí),還要用到以下兩條乘法指令:MACSUXmem,Ymem,src;無(wú)符號(hào)數(shù)與帶符號(hào)數(shù)相乘并累加;src=U(Xmem)×S(Ymem)+srcMPYUSmem,dst;無(wú)符號(hào)數(shù)相乘;dst=U(T)×U(Smem)〖例6-18〗編寫(xiě)計(jì)算W64=X32×Y32的程序。32位乘法實(shí)現(xiàn)的64位乘積的程序如下:STM#x,AR2STM#y,AR3LD*AR2,T;T=x0MPYU*AR3+,A;A=ux0×uy0STLA,@w0;w0=ux0×uy0LDA,-16,A;A=A>>16MACSU*AR2+,*AR3-,A;A+=y1×ux0MACSU*AR3+,*AR2,A;A+=x1×uy0STLA,@w1;w1=ALDA,-16,A;A=A>>16MAC*AR3,*AR2,A;A+=x1×y1STLA,@w2;w2=A的低16位STHA,@w3;w3=A的高16位解決冗余符號(hào)位的辦法:在程序中設(shè)定狀態(tài)寄存器ST1中的FRCT(小數(shù)方式)位為1,在乘法器將結(jié)果傳送至累加器時(shí)就能自動(dòng)地左移1位,累加器中的結(jié)果為:Szzzzzz0(Q7格式),即11101000(0.1875),自動(dòng)地消去了兩個(gè)帶符號(hào)數(shù)相乘時(shí)產(chǎn)生的冗余符號(hào)位。在小數(shù)乘法編程時(shí),應(yīng)當(dāng)事先設(shè)置FRCT位如下:SSBXFRCTMPY*AR2,*AR3,ASTHA,@Z這樣,TMS320C54x就完成了Q15×Ql5=Q15的小數(shù)乘法。
6.9除法運(yùn)算
1.被除數(shù)的絕對(duì)值小于除數(shù)的絕對(duì)值,商為小數(shù)
在一般的DSP中都沒(méi)有除法器硬件。因?yàn)槌ㄆ饔布鷥r(jià)很高,所以就沒(méi)有專(zhuān)門(mén)的除法指令。同樣,在TMS320C54x中也沒(méi)有一條單周期的16位除法指令。但是,利用條件減法指令(SUBC指令),加上重復(fù)指令“RPT#15”,就可實(shí)現(xiàn)兩個(gè)無(wú)符號(hào)數(shù)的除法運(yùn)算。條件減法指令的功能如下:SUBCSmem,src 2.被除數(shù)的絕對(duì)值大于等于除數(shù)的絕對(duì)值,商為整數(shù)
6.10浮點(diǎn)運(yùn)算
1.浮點(diǎn)數(shù)的表示方法
在TMS320C54x中,浮點(diǎn)數(shù)由尾數(shù)和指數(shù)兩部分組成,它與定點(diǎn)數(shù)的關(guān)系如下:定點(diǎn)數(shù)=尾數(shù)×2(指數(shù))例如,定點(diǎn)數(shù)0x2000(0.25)用浮點(diǎn)數(shù)表示時(shí),尾數(shù)為0x4000(0.5),指數(shù)為1,即0.25=0.5×21浮點(diǎn)數(shù)的尾數(shù)和指數(shù)可正可負(fù),均用補(bǔ)碼表示。指數(shù)的范圍為8~31。
2.定點(diǎn)數(shù)到浮點(diǎn)數(shù)的轉(zhuǎn)換
TMS320C54x通過(guò)3條指令可將一個(gè)定點(diǎn)數(shù)轉(zhuǎn)化成浮點(diǎn)數(shù):(1)EXPA(2)STT,EXPONENT(3)NORMA3.浮點(diǎn)數(shù)到定點(diǎn)數(shù)的轉(zhuǎn)換
知道TMS320C54x浮點(diǎn)數(shù)的定義后,就不難將浮點(diǎn)數(shù)轉(zhuǎn)換成定點(diǎn)數(shù)了。因?yàn)楦↑c(diǎn)數(shù)的指數(shù)就是在規(guī)格化時(shí)左移(指數(shù)為負(fù)時(shí)是右移)的位數(shù),所以在將浮點(diǎn)數(shù)轉(zhuǎn)換成定點(diǎn)數(shù)時(shí),只要按指數(shù)值將尾數(shù)右移(指數(shù)為負(fù)時(shí)是左移)就行了。
4.浮點(diǎn)乘法舉例
【例6-26】編寫(xiě)浮點(diǎn)乘法程序,完成x1×x2=0.3×(0.8)運(yùn)算。程序中保留10個(gè)數(shù)據(jù)存儲(chǔ)單元:x1:被乘數(shù)m2:乘數(shù)的尾數(shù)x2:乘數(shù)ep:乘積的指數(shù)e1:被乘數(shù)的指數(shù)mp:乘積的尾數(shù)ml:被乘數(shù)的尾數(shù)product:乘積e2:乘數(shù)的指數(shù)temp:暫存單元程序清單如下:.title"zh24.asm".mmregs.defstartSTACK.usect"STACK",100;64H.bssx1,1.bssx2,1.bsse1,1.bssm1,1.bsse2,1.bssm2,1.bssep,1.bssmp,1.bssproduct,1.bsstemp,1.datatable:.word3*32768/10;0.3.word-8*32768/10;-0.8.textstart:STM#STACK+100,SP;設(shè)置堆棧指針MVPDtable,@x1;將x1和x2傳送至數(shù)據(jù)存儲(chǔ)器MVPDtable+1,@x2LD@x1,16,A;將x1規(guī)格化為浮點(diǎn)數(shù)EXPASTT,@e1;保存x1的指數(shù)NORMASTHA,@m1;保存x1的尾數(shù)
L
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年股票互換協(xié)議
- 2025年度綠色建筑節(jié)能改造工程承包合同模板2篇
- 2025年度電影院場(chǎng)地租賃合同及觀影安全保障與服務(wù)標(biāo)準(zhǔn)協(xié)議3篇
- 2024版移動(dòng)網(wǎng)絡(luò)業(yè)務(wù)伙伴合同版B版
- 2025年度婚禮場(chǎng)地借用與策劃服務(wù)合同3篇
- 2025年度訴訟保全擔(dān)保流程規(guī)范細(xì)則合同3篇
- 2025年度池塘休閑漁業(yè)項(xiàng)目租賃協(xié)議3篇
- 2025年水土保持監(jiān)測(cè)技術(shù)咨詢(xún)與旅游開(kāi)發(fā)合同3篇
- 二零二五年空調(diào)清洗保養(yǎng)及節(jié)能效益分析合同3篇
- 2025年版健康養(yǎng)老服務(wù)合同4篇
- 建筑行業(yè)人才培養(yǎng)和發(fā)展方案
- 生活垃圾焚燒發(fā)電廠摻燒一般工業(yè)固廢和協(xié)同處置污泥項(xiàng)目環(huán)評(píng)資料環(huán)境影響
- 軟件開(kāi)發(fā)年終工作總結(jié)課件
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 現(xiàn)場(chǎng)勘察制度
- 2024年山東省煙臺(tái)市中考英語(yǔ)試題含解析
- 專(zhuān)項(xiàng)14-因式分解-專(zhuān)題訓(xùn)練(50道)
- 四年級(jí)簡(jiǎn)便運(yùn)算100道大全及答案
- 黔東南南苗族侗族自治州黃平縣2024年數(shù)學(xué)三年級(jí)第一學(xué)期期末考試試題含解析
- 科研倫理審查與違規(guī)處理考核試卷
- 安平縣2024年小升初必考題數(shù)學(xué)檢測(cè)卷含解析
評(píng)論
0/150
提交評(píng)論