3tms320c54指令系統(tǒng)詳解_第1頁(yè)
3tms320c54指令系統(tǒng)詳解_第2頁(yè)
3tms320c54指令系統(tǒng)詳解_第3頁(yè)
3tms320c54指令系統(tǒng)詳解_第4頁(yè)
3tms320c54指令系統(tǒng)詳解_第5頁(yè)
已閱讀5頁(yè),還剩83頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第三章TMS320C54X指令系統(tǒng)

本章內(nèi)容包括:(1)存儲(chǔ)器尋址方式(2)匯編語(yǔ)言指令系統(tǒng)(3)偽指令系統(tǒng)。主講人:陳德宏立即數(shù)尋址:指令中有一個(gè)操作數(shù)為固定的數(shù)(加#)絕對(duì)地址尋址:指令中有一個(gè)操作數(shù)為固定的地址累加器尋址:用累加器的值作為地址去訪問(wèn)程序存儲(chǔ)器直接尋址:指令中的地址和所在的數(shù)據(jù)頁(yè)指針DP或SP

決定了操作數(shù)在數(shù)據(jù)存儲(chǔ)器中的實(shí)際地址間接尋址:按照輔助寄存器中的地址訪問(wèn)存儲(chǔ)器存儲(chǔ)器映射寄存器尋址:修改存儲(chǔ)器映射寄存器中的值,而不影響當(dāng)前DP或SP的值堆棧尋址:把數(shù)據(jù)壓入和彈出系統(tǒng)堆棧。尋址方式:當(dāng)硬件執(zhí)行指令時(shí),尋找指令所參與運(yùn)算的操作數(shù)的方法3.1存儲(chǔ)器尋址方式符號(hào)含義Smem16位單尋址操作數(shù)Xmem16位的雙尋址操作數(shù),從DB總線讀出Ymem16位的雙尋址操作數(shù),從CB總線讀出dmad16位立即數(shù),數(shù)據(jù)存儲(chǔ)器的地址pmad16位立即數(shù),程序存儲(chǔ)器的地址PA16位立即數(shù),I/O的地址src源累加器dst目的累加器lk16位的長(zhǎng)立即數(shù)部分尋址的縮寫語(yǔ)在立即數(shù)尋址中,指令里包括了立即操作數(shù)(常數(shù),用#k表示,#用來(lái)區(qū)分地址的表示方法)。立即數(shù)可包含在單字或雙字指令中。3-,5-,8-或9-bit立即數(shù)在單字指令中16-bit立即數(shù)在雙字指令中例如:LD #80h, A1.立即數(shù)尋址3或5bit立即數(shù)8bit立即數(shù)9bit立即數(shù)16bit立即數(shù)LDFRAMELDADDORMADDMRPTANDRPTZANDMSTBITFSTMCMPMSUBLDXORMACXORMOR表、支持立即數(shù)尋址的指令2.絕對(duì)尋址指令中有一個(gè)操作數(shù)為所要尋址存儲(chǔ)單元16位地址術(shù)語(yǔ)解釋:dmad-數(shù)據(jù)存儲(chǔ)地址;pmad-程序存儲(chǔ)地址;PA-口地址;lk-長(zhǎng)整數(shù)。只有四種類型指令可以使用16bits的絕對(duì)地址尋址:dmad尋址pmad尋址PA尋址*(lk)尋址(1)dmad尋址

dmad尋址用一標(biāo)號(hào)標(biāo)記數(shù)據(jù)空間地址,這類指令有:MVDKSmem,dmadMVDMdmad,MMRMVKDdmad,SmemMVMDMMR,dmad如:MVKDSAMPLE,*AR5此處SAMPLE即是dmad

(2)pmad尋址

pmad尋址用一標(biāo)號(hào)標(biāo)記程序空間地址,這類指令有:

FIRSXmem,Ymem,pmadMACDSmem,pmad,srcMACPSmem,pmad,srcMVPDpmad,Smem(3)PA尋址PA尋址用一標(biāo)號(hào)標(biāo)記外部I/O口地址,這類指令有:

PORTRPA,SmemPORTWSmem,PA如:PORTRFIFO,*AR5

此處FIFO即為PA

(4)*(lk)尋址:適用于支持單數(shù)據(jù)存儲(chǔ)器操作數(shù)(Smem)的指令:例如:LDSmem,dst

則可以有LD*(Buffer),A;將Buffer符號(hào)所指的數(shù)據(jù)存儲(chǔ)單元的數(shù)裝載到累加器A,

Buffer是一個(gè)符號(hào)常數(shù)

在直接尋址中,指令代碼包含了數(shù)據(jù)存儲(chǔ)器地址的低七位。這7bit(dma)作為偏移地址與數(shù)據(jù)頁(yè)指針(DP),當(dāng)ST1中的CPL位=0

堆棧指針(SP),

當(dāng)ST1中的CPL位=1相結(jié)合共同形成16位的數(shù)據(jù)存儲(chǔ)器實(shí)際地址。當(dāng)偏移地址為變量時(shí),變量前加@符號(hào)。例如:X.set5LD#20hDPLD@X,A3.直接尋址CPL=0:dma與9-bit的DP相結(jié)合形成數(shù)據(jù)存儲(chǔ)器地址。以DP為基準(zhǔn)的直接尋址DP9-bit9-bit的DP指向數(shù)據(jù)存儲(chǔ)空間的512個(gè)數(shù)據(jù)頁(yè)中的一頁(yè)012510511注意的是:用DP直接尋址,操作對(duì)象需處于同一頁(yè)用DP直接尋址CPL=0地址計(jì)算公式:例如:SSBXCPL;狀態(tài)寄存器置位LD@1,AADD@2,A;A的結(jié)果:1500024010000503404SPSP方式,以SP中內(nèi)容作為dmad基地址,指令中地址標(biāo)號(hào)作為正向偏移量,二者相加構(gòu)成dmad地址。用SP直接尋址CPL=1:READASmemWRITASmem

READA是把累加器A所確定的程序存儲(chǔ)器單元中的一個(gè)字,傳送到單數(shù)據(jù)存儲(chǔ)器(Smem)操作數(shù)所確定的數(shù)據(jù)存儲(chǔ)器單元中。WRITA是把Smem操作數(shù)所確定的數(shù)據(jù)單元中的一個(gè)字,傳送到累加器A確定的程序存儲(chǔ)器單元中去。上述兩條指令,在重復(fù)的方式下執(zhí)行,搬移連續(xù)的數(shù)據(jù)(以A的值為起始地址)到連續(xù)的DM中,能夠?qū)奂悠鰽自動(dòng)增量4.累加器尋址累加器尋址是用累加器中的數(shù)作為一個(gè)地址。這種尋址方式可用來(lái)對(duì)存放數(shù)據(jù)的程序存儲(chǔ)器尋址。地址由累加器的低16位決定,共有兩條指令可以采用累加器尋址:DM的地址:0206h15141312111098765432100000001000000110累加器尋址和直接尋址舉例5.間接尋址

在間接尋址中,64K數(shù)據(jù)空間任意單元都可通過(guò)一個(gè)輔助寄存器中的16-bit地址進(jìn)行訪問(wèn)?!瓹54x有8個(gè)16-bit輔助寄存器(AR0-AR7)。兩個(gè)輔助寄存器算術(shù)單元(ARAU0和ARAU1),根據(jù)輔助寄存器的內(nèi)容進(jìn)行操作,完成無(wú)符號(hào)的16-bit算術(shù)運(yùn)算。間接尋址很靈活,不僅能從存儲(chǔ)器中讀或?qū)懸粋€(gè)單16-bit數(shù)據(jù)操作數(shù),而且能在一條指令中訪問(wèn)兩個(gè)數(shù)據(jù)存儲(chǔ)器單元(即從兩個(gè)獨(dú)立的存儲(chǔ)器單元讀數(shù)據(jù),或讀一個(gè)存儲(chǔ)器單元同時(shí)寫另一個(gè)存儲(chǔ)器單元,或讀寫兩個(gè)連續(xù)的存儲(chǔ)器單元)。*ARx:

ARx包含了數(shù)據(jù)存儲(chǔ)器地址*ARx-/*ARx+:訪問(wèn)后,

ARx中的地址減1/加1*+ARx:在尋址之前,ARx中的地址加1*ARx-0B/*ARx+0B:訪問(wèn)后,從ARx中以位倒序進(jìn)位的方式減去/加上AR0*ARx-0/*ARx+0

:訪問(wèn)后,從ARx中減去/加上AR0*ARx-%/*ARx+%:

訪問(wèn)后,ARx中的地址以循環(huán)尋址的方式減1/加1*ARx-0%/*ARx+0%:訪問(wèn)后,從ARx中以循環(huán)尋址的方式減去/加上AR0*ARx(lk):

ARx和16-bit的長(zhǎng)偏移(lk)的和用來(lái)作為數(shù)據(jù)存儲(chǔ)器地址。ARx本身不被修改單操作數(shù)間接尋址類型:*+ARx(lk):在尋址之前,把一個(gè)帶符號(hào)的16-bit的長(zhǎng)偏移(lk)加到ARx中,然后用新的ARx的值作為數(shù)據(jù)存儲(chǔ)器的地址*+ARx(lk)%:在尋址之前,把一個(gè)帶符號(hào)的16-bit的長(zhǎng)偏移以循環(huán)尋址的方式加到ARx中,然后再用新的ARx的值作為數(shù)據(jù)存儲(chǔ)器的地址有B符號(hào),倒序進(jìn)位有%符號(hào),循環(huán)尋址有0符號(hào),與AR0有關(guān)間接尋址編程:

.mmregs .bssx,4,1 .dataa .word1,2,3,4 .sect“program” STM#a,AR1 STM#x,AR2 LD#0,A LD*AR1+,T MAC*AR2+,A LD*AR1+,T MAC*AR2+,A LD*AR1+,T MAC*AR2+,A LD*AR1,T MAC*AR2,A …..編程舉例:在卷積、相關(guān)、FIR中要用到循環(huán)緩沖區(qū)。循環(huán)緩沖區(qū)長(zhǎng)度R由BK決定

STM#lk,BK;設(shè)置循環(huán)緩沖區(qū)長(zhǎng)度循環(huán)緩沖區(qū)從N位的地址邊界(N位0)開始,R<2N,若R=40,則N=6,開始地址為:

xxxxxxxxxx000000。循環(huán)尋址時(shí)用一個(gè)ARx指向緩沖區(qū)。地址變化規(guī)則:循環(huán)尋址(有%符號(hào))

.sect “fir-prog”

STM#255,BRC ;BlockRepeatCounter,

;Repeat256times

RPTBDfir_filter_loop STM#16,BK ;FIRcircularbuffersize

LD*AR7+,A ;loadtheinputvalue

STLA,*AR4+% ;replaceoldestsamplewith

;newestsample

RPTZA,#15

MAC*AR4+0%,*AR3+0%,A ;filtering

STHA,*AR5+ ;replacetheoldestbuffervaluefir_filter_loop應(yīng)用舉例:計(jì)算16階的FIR濾波器輸出256個(gè)點(diǎn)0001000101100011010111118點(diǎn)的FFT蝶型結(jié)運(yùn)算FFT中混序就是位倒序FFT運(yùn)算時(shí)輸出/輸入序列中必有其一要混序。倒序,10100101,用于FFT中蝶型變換位倒序進(jìn)位:進(jìn)位不是加到左邊一位,而是加到右邊的那位。例如:進(jìn)位加到左邊進(jìn)位加到右邊

11001100+1000+1000101000010如果AR2中存放X(0)的地址,AR0的值為8(FFT長(zhǎng)度的一半),則下列程序向PA口輸出倒序:0000,1000,0100,1100,0010,…,0111,1111。RPT#15PORTW*AR2+0B,PA倒序進(jìn)位(有B符號(hào))位倒序?qū)ぶ返膱?zhí)行

設(shè)FFT長(zhǎng)度N=16,則AR0賦值為8,位倒序方式讀入數(shù)據(jù)情況如下:存儲(chǔ)器映射寄存器只有8條指令能使用存儲(chǔ)器映射寄存器尋址:LDMMMR,dstMVDMdmad,MMRMVMDMMR,dmadMVMMMMRx,MMRyPOPMMMRPSHMMMRSTLMsrc,MMRSTM#lk,MMR

存儲(chǔ)器映射寄存器尋址用來(lái)修改存儲(chǔ)器映射寄存器而不影響當(dāng)前數(shù)據(jù)頁(yè)指針(DP)或堆棧指針(SP)的值。存儲(chǔ)器映射寄存器尋址直接尋址中利用操作數(shù)中的低7位訪問(wèn)MMR間接尋址中利用ARx訪問(wèn)MMR,Arx高位被置0。MVDM300H,BKLDAR4,AMVMMSP,AR16.存儲(chǔ)器映射寄存器尋址共有四條使用堆棧尋址方式訪問(wèn)堆棧的指令:

PSHD把一個(gè)數(shù)據(jù)存儲(chǔ)器的值壓入堆棧。

PSHM把一個(gè)存儲(chǔ)器映射寄存器的值壓入堆棧。 POPD把一個(gè)數(shù)據(jù)存儲(chǔ)器的值彈出堆棧。

POPM把一個(gè)存儲(chǔ)器映射寄存器的值彈出堆棧。7.堆棧尋址系統(tǒng)堆棧用來(lái)在中斷和子程序期間自動(dòng)存放程序計(jì)數(shù)器(PC)。它也能用來(lái)存放額外的數(shù)據(jù)項(xiàng)或傳遞數(shù)據(jù)值。處理器使用一個(gè)16-bit的存儲(chǔ)器映射寄存器—堆棧指針來(lái)對(duì)堆棧尋址,它總是指向存放在堆棧中的最后一個(gè)元素。0001001000110100010101100001001000110100010101100011sp操作前的堆棧和SP0010sp操作后的堆棧和SPX1X1X2圖、堆棧操作對(duì)堆棧指針的影響(1)立即尋址運(yùn)行速度慢,但需要較多的程序存儲(chǔ)空間,而且數(shù)值不能改變,主要用于表示常數(shù)和初始化。(2)絕對(duì)尋址可以訪問(wèn)任何的數(shù)據(jù)空間,但速度慢,要求較多的存儲(chǔ)空間,用于對(duì)速度沒有苛求的場(chǎng)合。(3)累加器尋址主要是在程序空間和數(shù)據(jù)空間傳送數(shù)據(jù)。(4)間接尋址類似于高級(jí)語(yǔ)言中的指針,較為靈活,主要是針對(duì)數(shù)字信號(hào)處理的算法而設(shè)計(jì)的。(5)直接尋址中尋址速度較快,利用并行流水線操作,用于時(shí)間要求較高的場(chǎng)合。(6)MMR是基地址為零(不考慮SP、DP、CPL)的直接尋址方式,尋址速度較快,可以直接快速訪問(wèn)數(shù)據(jù)存儲(chǔ)器的0頁(yè)資源。7種尋址方式不同的用途

TMS320C54x的指令集有129條指令,由尋址方式不同衍生至216條,按功能分為如下幾類:

算術(shù)運(yùn)算指令 邏輯運(yùn)算指令

程序控制指令

裝入和存儲(chǔ)指令P98表2-1列出了指令系統(tǒng)的符號(hào)和意義TMS320C54x的指令集

當(dāng)它表示一個(gè)整數(shù)時(shí),其最低位(D0)表示1,D1位表示2的1次方,次高位(D14)表示2的14方。

如果表示一個(gè)有符號(hào)數(shù)時(shí),最高位(D15)為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù)。例如,07FFFH表示最大的正數(shù)32767(十進(jìn)制),而0FFFFH表示最大的負(fù)數(shù)-1(負(fù)數(shù)用2的補(bǔ)碼方式顯示)。

當(dāng)需要表示小數(shù)時(shí),小數(shù)點(diǎn)的位置始終在最高為后,而最高位(D15)表示符號(hào)位。這樣次高位(D14)表示0.5,然后是0.25,。所以4000H表示小數(shù)0.5,2000H表示小數(shù)0.25,而0001H表示16位定點(diǎn)DSP表示的最小的小數(shù)(有符號(hào))0.000030517578125。小數(shù)或整數(shù)由FRCT位決定:

SSBXFRCT;將FRCT置1,下面是以小數(shù)方式運(yùn)算定點(diǎn)DSP中數(shù)據(jù)表示方法1、算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令用于完成加減乘除等算術(shù)運(yùn)算。按照功能的不同可以將算術(shù)運(yùn)算類指令分為7組:(1)加法指令(ADD)(2)減法指令(SUB)(3)乘法指令(MPY)(4)乘加指令(MAC)(5)乘減指令(MAS)(6)雙數(shù)/雙精度(32比特操作數(shù))(DADD、DSUB)(7)專用指令(Application-specific)(1)加法指令將16比特的值與累加器內(nèi)容或另一個(gè)數(shù)據(jù)存儲(chǔ)單元內(nèi)容相加,并把結(jié)果放進(jìn)累加器。ADDSmem,src

;src=(Smem)+(src)ADDSmem,TS,src

;src=(Smem)<<TS+(src)ADDSmem,16,src[,dst];src

or[,dst]=(Smem)<<16+(src)ADDSmem,[SHIFT],src[,dst];src

or[,dst]=(Smem)<<[SHIFT]+src

2ADDXmem,SHFT,dst

;src=(Xmem)<<SHFT+(src)ADDXmem,Ymem,dst

;dst=((Xmem)+(Ymem))<<16ADD#1k,[SHFT],src[,dst];src

or[,dst]=lk<<SHFT+(src)2ADD#1k,16,src[,dst];src

or[,dst]=lk<<16+(src)2ADDsrc[,SHIFT][,dst];dst=(srcor[,dst])+(src)<<SHIFTADDsrc,ASM[,dst];src

or[,dst]=(srcor[,dst])+(src)<<ASMADDCSmem,src;src=src+Smem+CADDM#lk,Smem;Smem=#lk+(Smem)2其中:Smem為16比特的單數(shù)據(jù)存儲(chǔ)器操作數(shù);

Xmem和Ymem為雙數(shù)據(jù)存儲(chǔ)器操作數(shù);

src和dst為源(目的)操作數(shù),這里是指C54x的累加器A和B

lk為整數(shù),范圍-32768到32767;SHIFT為移位位數(shù),范圍-16到15;

SHFT為移位位數(shù),范圍0到15;執(zhí)行該指令時(shí)可能會(huì)影響的狀態(tài)位有進(jìn)位標(biāo)志C和目的累加器溢出標(biāo)志Ovdst;另外,影響該指令執(zhí)行的狀態(tài)位有符號(hào)擴(kuò)展模式位SXM和溢出模式位OVM;算術(shù)運(yùn)算指令大部分都只需要一個(gè)指令周期,只有個(gè)別指令需要2~3指令周期。(2)減法指令是將累加器的內(nèi)容或另一個(gè)數(shù)據(jù)存儲(chǔ)單元的內(nèi)容與一個(gè)16比特的值相減,并把結(jié)果放進(jìn)累加器。SUBSmem,src

;src=(src)-(Smem)SUBSmem,TS,src

;src=(src)-(Smem)<<TSSUBSmem,16,src[,dst];src

or[,dst]=(src)-(Smem)<<16SUBSmem[,SHIFT],src[,dst];src

or[,dst]=(src)-(Smem)<<SHIFTSUBXmem,SHFT,src

;src=(src)-(Xmem)<<SHFTSUBXmem,Ymem,dst

;dst=(Xmem)<<16-(Ymem)<<16SUB#1k[,SHFT],src[,dst];src

or[,dst]=(src)-1k<<SHFTSUB#1k,16,src[,dst];src

or[,dst]=(src)-1k<<16SUBsrc[,SHIFT][,dst];dst=(dst)-(src)<<SHIFTSUBsrc,ASM[,dst];src

or[,dst]=(dst)-(src)<<ASMSUBB Smem,src ;src-Smem-CSUBCSmem,src;if(src-Smem<<15)>=0;src=(src-Smem<<15)<<1+1Elsesrc=src<<!SUBSSmem,src;src=src-uns(Smem)(3)乘法指令在‘C54X中提供了大量的乘法運(yùn)算指令,其結(jié)果都是32位,放在A或B累加器中。乘數(shù)在‘C54X的乘法指令很靈活,可以是T寄存器、立即數(shù)、存貯單元和A或B累加器的高16位。如果是無(wú)符號(hào)數(shù)乘時(shí),請(qǐng)使用MPYU指令。這是一條專用于無(wú)符號(hào)數(shù)乘法運(yùn)算的指令,而其它指令都是有符號(hào)數(shù)的乘法。狀態(tài)位:影響該指令執(zhí)行的狀態(tài)位有:分?jǐn)?shù)模式位FRCT和溢出模式位OVM;執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:目的累加器溢出標(biāo)志OVdst3、乘法指令rsbx FRCT ;清FRCT標(biāo)志,準(zhǔn)備整數(shù)乘ld temp1,T ;將變量temp1裝入T寄存器mpy temp2,A ;完成temp2*temp1,結(jié)果放;入A寄存器(32位)整數(shù)乘法舉例在‘C54X中,小數(shù)的乘法與整數(shù)乘法基本一致,只是由于兩個(gè)有符號(hào)的小數(shù)相乘,其結(jié)果的小數(shù)點(diǎn)的位置在次高的后面,所以必須左移一位,才能得到正確的結(jié)果?!瓹54X中提供了一個(gè)狀態(tài)位FRCT,將其設(shè)置為1時(shí),系統(tǒng)自動(dòng)將乘積結(jié)果左移移位。兩個(gè)小數(shù)(16位)相乘后結(jié)果為32位,如果精度允許的話,可以只存高16位,將低16位丟棄,這樣仍可得到16位的結(jié)果。實(shí)現(xiàn)小數(shù)乘法

ssbxFRCT ;FRCT=1,準(zhǔn)備小數(shù)乘法

ld temp1,16,a ;將變量temp1裝入累加器A的高16位

mpyatemp2 ;完成temp2乘累加器A的高16位,結(jié)

;果在B中,同時(shí)將temp2裝入T寄存器

sth b,temp3 ;將乘積結(jié)果的高16位存入變量temp3如:0.1(0x0ccd)x0.7(0x599a)

=0.06997680664063(0x08f5)注:可以使用MPYR完成四舍五入。比較如下結(jié)果

mpyrtemp1,b

;T*temp1->b(4)乘加指令乘加指令是將臨時(shí)寄存器T或一個(gè)數(shù)據(jù)存儲(chǔ)單元的內(nèi)容與一個(gè)立即數(shù)或另一個(gè)數(shù)據(jù)存儲(chǔ)單元的內(nèi)容相乘并把乘積與源累加器的內(nèi)容相加,然后把結(jié)果放進(jìn)累加器中。MAC[R]Smem,src;src=(T)*(Smem)+(src)MAC[R]Xmem,Ymem,src[,dst];src

or[dst]=(Xmem)*(Ymem)+(src),T=(Xmem)MAC#1k,src[,dst];dst=(T)*1k+(src)MACSmem,#1k,src[,dst];dst=(Smem)*1k+(src),T=(Smem)影響該指令執(zhí)行的狀態(tài)位有:分?jǐn)?shù)模式位FRCT和溢出模式位OVM;執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:目的累加器溢出標(biāo)志OVdst.(5)乘減指令乘減指令MAS,將臨時(shí)寄存器T或一個(gè)數(shù)據(jù)存儲(chǔ)單元的內(nèi)容與另一個(gè)數(shù)據(jù)存儲(chǔ)單元的內(nèi)容相乘并把乘積與源累加器的內(nèi)容相減,然后把結(jié)果放進(jìn)累加器中。MAS[R]Smem,src;src=(src)-(T)*(Smem)MAS[R]Xmem,Ymem,src[,dst];

src

or[dst]=(src)-(Xmem)*(Ymem),T=(Xmem)影響該指令執(zhí)行的狀態(tài)位有:分?jǐn)?shù)模式位FRCT和溢出模式位OVM;執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:目的累加器溢出標(biāo)志Ovdst乘加和乘減指令匯集(6)雙字指那些有一個(gè)操作數(shù)為雙字長(zhǎng)(32比特)的指令。以DADD為例,其語(yǔ)法及完成的操作如下所示,它在C16的控制下完成一個(gè)32比特的加或兩個(gè)16比特的加;DADDLmem,src[,dst];If(C16)=0Thendst=(Lmem)+(src);Elsedst(39-16)=(Lmem(31-16))+(src(31-16))dst(15-0)=(Lmem(15-0))+(src(15-0))Lmem為雙字(32比特)數(shù)據(jù)存儲(chǔ)器操作數(shù);src和dst為源(目的)操作數(shù),這里是指C54x的累加器A和累加器B。影響該指令執(zhí)行的狀態(tài)位有:符號(hào)擴(kuò)展模式位SXM和溢出模式位OVM(當(dāng)C16=0時(shí));執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:進(jìn)位標(biāo)志C和目的累加器溢出標(biāo)志OVdst;雙精度/雙數(shù)操作指令(七)特殊指令2.邏輯運(yùn)算指令按照功能的不同可以將邏輯運(yùn)算指令分為5組:與(AND)指令或(OR)指令異或(XOR)指令移位(SHIFT)指令測(cè)試(TEST)指令(1)與指令Smem為16比特的數(shù)據(jù)存儲(chǔ)器操作數(shù);src和dst為源(目的)操作數(shù),一般為累加器A和累加器B;1k為整數(shù),范圍-32768到32767;SHIFT為移位位數(shù),范圍-16到15;SHFT為移位位數(shù),范圍0到15;(2)或指令src(39-16)不變影響該指令執(zhí)行的狀態(tài)位:無(wú)執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:無(wú)(3)異或指令影響該指令執(zhí)行的狀態(tài)位:無(wú)執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:無(wú)(4)移位和測(cè)試指令

測(cè)試(TEST)指令可以測(cè)試操作數(shù)的比特位的值,也可以比較兩個(gè)數(shù)是否相等。BITFSmem,#1k;如果(Smem&&1k)=0,則TC=0;否則TC=1CMPMSmem,#1k;如果Smem等于#1k,則TC=1;否則TC=0;TC為測(cè)試結(jié)構(gòu)比特;其中影響該指令執(zhí)行的狀態(tài)位:無(wú)執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:測(cè)試控制比特TC3、程序控制指令程序控制指令用于控制程序的流程,也就是指令的執(zhí)行順序。按照功能的不同可以將程序控制類指令分為7組:跳轉(zhuǎn)(Branch)指令;調(diào)用(Call)指令;中斷(Interrupt)指令;返回(Return)指令;重復(fù)(Repeat)指令;堆棧操作指令;混合程序控制指令;(1)跳轉(zhuǎn)指令

跳轉(zhuǎn)指令可以改變程序指針PC的值,使程序從一個(gè)地址跳轉(zhuǎn)到另一個(gè)地址執(zhí)行。這種跳轉(zhuǎn)可以是無(wú)條件的跳轉(zhuǎn),也可以是有條件的跳轉(zhuǎn)。以BC為例:BCpmad,cond[,cond[,cond]];

if(cond(s))ThenPC=pmad(15-0),elsePC=PC+2其中pmad為16比特的程序地址,范圍0到65535;Cond為跳轉(zhuǎn)的條件,包括:條件說(shuō)明條件說(shuō)明BIOBIO為低NBIOBIO為高CC=1NCC=0TCTC=1NTCTC=0AEQ(A)=0BEQ(B)=0ANEQ(A)<>0BNEQ(B)<>0AGT(A)>0BGT(B)>0AGEQ(A)>=0BGEQ(B)>=0ALT(A)<0BLT(B)<0ALEQ(A)<=0BLEQ(B)<=0ALVA溢出BOVB溢出ANOVA沒有溢出BNOVB沒有溢出UNC無(wú)條件

采用延遲方式,緊接著該指令的兩條單指令或一條雙字指令從程序存儲(chǔ)器中取出先執(zhí)行,但如果條件滿足,那么這兩字將從流水中沖掉,程序從pmad開始;如果條件不滿足,PC加2且緊接著該指令的兩個(gè)字繼續(xù)執(zhí)行。例:STM#3FFFH,@xBCD2000H,AGTBC2000H,AGT;(4/2)STM#3FFFH,@X;2(2)調(diào)用指令

調(diào)用指令同樣可以改變程序指針PC的值,使程序從一個(gè)地址跳轉(zhuǎn)到另一個(gè)地址執(zhí)行。但與跳轉(zhuǎn)指令不同的是,DSP在執(zhí)行完被調(diào)用的程序段后要返回起跳處繼續(xù)執(zhí)行原來(lái)的程序。同樣,這種調(diào)用也可以是無(wú)條件的或有條件的。下面以CALL為例:CALLpmad;SP=(SP-1),TOS=(PC+2),

PC=pmad(15-0)

其中pmad為目的程序地址;

SP為堆棧指針;TOS為堆棧的頂端;(3)中斷指令中斷指令同樣可以改變程序指針PC的值,使程序從一個(gè)地址跳轉(zhuǎn)到另一個(gè)地址執(zhí)行。但與調(diào)用指令一樣,DSP在執(zhí)行完中斷服務(wù)程序后要返回發(fā)生中斷的地方繼續(xù)執(zhí)行原來(lái)的程序。當(dāng)發(fā)生中斷時(shí),DSP會(huì)置INTM為1,屏蔽所有可屏蔽中斷,并在中斷標(biāo)志寄存器IFR中設(shè)置相應(yīng)的中斷標(biāo)志。下面以INTR為例:

INTRK;SP=(SP-1),TOS=(PC+1),PC=IPTR(15-7)+K<<2,INTM=1其中K為C54xDSP的中斷號(hào)碼,范圍0到31;

IPTR為9比特長(zhǎng)的中斷向量指針;執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:INTM和中斷標(biāo)志寄存器IFR中相應(yīng)的位INTR3例:(4)返回指令返回指令用于在執(zhí)行完被調(diào)用的程序段或中斷服務(wù)程序后,返回到調(diào)用指令或發(fā)生中斷的地方,使DSP能繼續(xù)執(zhí)行原來(lái)的程序??焖俜祷丶拇嫫鱏P++允許中斷下面以RETE為例:RETE;PC=TOS,SP=(SP+1),INTM=0影響該指令執(zhí)行的狀態(tài)位:無(wú)執(zhí)行該指令會(huì)產(chǎn)生的狀態(tài)位:中斷屏蔽位INTM(5)重復(fù)指令重復(fù)指令可以使DSP重復(fù)執(zhí)行一條指令或一段指令;RPT#K;單指令重復(fù),RC=#K舉例:累加器清零,循環(huán)執(zhí)行下一條n+1次(6)堆棧操作指令

堆棧操作指令可以對(duì)堆棧進(jìn)行壓入(PUSH)和彈出(POP)操作,相應(yīng)的操作數(shù)可以是數(shù)據(jù)存儲(chǔ)單元Smem或存儲(chǔ)映射寄存器MMR。下面以PSHD和POPM為例:PSHDSmem;SP=(SP-1),TOS=SmemPOPMMMR;MMR=TOS,SP=(SP+1)其中,Smem為16比特的數(shù)據(jù)存儲(chǔ)器操作數(shù);

MMR為存儲(chǔ)映射寄存器空指令實(shí)現(xiàn)一個(gè)非屏蔽的軟件復(fù)位對(duì)狀態(tài)寄存器ST0和ST1特定位清零對(duì)狀態(tài)寄存器ST0和ST1特定位置1修改輔助寄存器保持空閑狀態(tài)直到有中斷產(chǎn)生條件執(zhí)行(7)混合程序控制指令舉例:(1)XC1,ALEQMAR*AR1+ADDA,DAT100(2)LOOP1:XC2,BIOB LOOP1PORTRPA0,@y1……FFFFFFFFFFA執(zhí)行前FFFFFFFFFFA執(zhí)行后AR10032AR100334、裝載與存儲(chǔ)指令裝載和存儲(chǔ)指令用于完成數(shù)據(jù)的讀入和保存,按照功能可以為:裝入和存儲(chǔ)指令包括:

一般的裝入

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論