版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
4.1概述4.2匯編語言4.3尋址方式
第四章DSP指令系統(tǒng)2/6/20234.1概述C54xDSP軟件設計的方法通常有三種。第一種,用C語言開發(fā)。TI公司提供了用于C語言開發(fā)的CCS(CodeComposerStudio)平臺。該平臺包括了優(yōu)化ANSIC編譯器,從而可以在C源程序級進行開發(fā)調試。這種方式的優(yōu)點是可以增強軟件的可讀性,提高了軟件的開發(fā)速度,方便軟件的修改和移植。然而,C編譯器無法實現(xiàn)在任何情況下都能夠合理地利用DSP芯片的各種資源。此外,對DSP芯片的某些硬件控制,用C語言就不如用匯編程序方便,有些甚至無法用C語言實現(xiàn)。第二種,用匯編語言開發(fā)。此種方式代碼效率高,程序執(zhí)行速度快,可以充分合理地利用芯片提供的硬件資源。然而,用匯編語言編寫程序比較煩瑣,可讀性較差。另外,不同類別或不同公司的芯片匯編語言往往不同,因此可移植性較差??傊?,用匯編語言開發(fā)產(chǎn)品,周期長,軟件的修改和升級困難。第三種,C和匯編語言混合編程開發(fā)。采用混合編程的方法能更好地達到設計要求,完成設計任務。4.2匯編語言4.2.1匯編語言源程序格式匯編語言是DSP應用軟件的基礎。編寫匯編語言必須要符合相應的格式,這樣匯編器才能將源文件轉換為機器語言的目標文件。C54xDSP匯編語言源程序由源說明語句組成,包含匯編語言指令、匯編偽指令、宏偽指令和注釋等。匯編語言語句格式可以包含4個部分:標號域、指令域、操作數(shù)域和注釋域。以助記符指令為例,匯編語言語句格式如下:[標號][:]指令[操作數(shù)列表][;注釋],其中[]內(nèi)的部分是可選項。在編寫匯編指令時,必須遵循以下格式:(1)語句必須以標號、空格、星號或分號開始。(2)標號為可選項。若要使用標號,則必須從第1列開始。標號長度最多為32個字符,由A~Z,a~z,0~9,_和$等組成,但第1個字符不能為數(shù)字。標號后可以跟一個冒號(:),但并不作為標號的一部分。(3)每個域必須由1個或多個空格分開,制表符等效于空格。(4)注釋是可選項,開始于第1列的注釋須用星號或分號(*或;)標示,但在其他列開始的注釋前面只能標分號。(5)指令域一定不能從第1列開始,否則將被視為標號。指令域包括以下操作碼之一:助記符指令、匯編偽指令(如.data,.set)、宏偽指令(如.var,.macro)和宏調用。(6)操作數(shù)域為操作數(shù)的列表,匯編器允許指定常數(shù)、符號或表達式作為地址、立即數(shù)或間接尋址。當操作數(shù)為立即數(shù)時,使用#符號作為前綴;操作數(shù)為間接尋址時,使用*符號作為前綴,將操作數(shù)的內(nèi)容作為地址。4.2匯編指令介紹C54xDSP按指令的功能分類,可分為如下四類:*數(shù)據(jù)傳送指令;*算術運算指令;*邏輯運算指令;*程序控制指令。表4.1指令集符號續(xù)表一
續(xù)表一
續(xù)表二
1.數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令把源操作數(shù)從源存儲器中傳送到目的操作數(shù)指定的存儲器中。C54xDSP的數(shù)據(jù)傳送指令包括裝載指令、存儲指令、條件存儲指令、并行裝載和存儲指令、并行裝載和乘法指令、并行存儲和加/減法指令、并行存儲和乘法指令、混合裝載和存儲指令。1)裝載指令裝載指令是取數(shù)或賦值指令,將存儲器內(nèi)容或立即數(shù)賦給目的寄存器,共7條指令,如下所示。
(1)DLD語法:助記符方式 表達式方式DLDLmem,dst dst=dbl(Lmem) dst=dual(Lmem)執(zhí)行方式:ifC16=0Then(Lmem)→dstElse(Lmem(31-16))→dst(39-16)(Lmem(15-0))→dst(15-0)受SXM(符號擴展方式位)的影響。雙16位或雙精度32位功能描述:該指令只把32bit的長操作數(shù)Lmem裝入到目的累加器dst中。C16的值決定了所采用的方式:C16=0指令以雙精度方式執(zhí)行。Lmem裝入到dst中。C16=1指令以雙16bit方式執(zhí)行。Lmem的高16bit裝入到 dst前24bit中;同時,Lmem的低16bit裝入到dst的 低16bit中。例4.1DLD*AR3+,BDataMemory因為該指令是一個長操作指令,所以AR3在執(zhí)行后加2。AR3高有效字5位位移數(shù)ST1中5位累加器移位方式位在所有累加器裝入操作中都會受到SXM影響,在帶有SHIFT或ASM移位的裝入操作中只受OVM(ST1中的符號擴展位)的影響;在帶有SHIFT或ASM移位的裝入指令中影響Ovd(或當dst=src時影響OVsrc-源累加器A或B的溢出標志)。功能描述:把一數(shù)據(jù)存儲器值或一立即數(shù)裝入累加器(dst或當沒有確定dst時為src),并支持各種不同的移位。另外,指令支持帶移位的累加器到累加器的搬移。例4.2LD*AR1,ADataMemory例4.3LD*AR1,ABeforeInstructionAfterInstructionDataMemoryST1中的符號擴展模式位SXM=1溢出FEDC例4.4
LD*AR1,TS,BDataMemory例4.5
LD*AR3+,16,ADataMemory(3)LD語法:助記符方式 表達式方式①LDSmem,T ①T=Smem②LDSmem,DP ②DP=Smem③LD#k9,DP ③DP=#k9④LD#k5,ASM ④ASM=#k5⑤LD#k3,ARP ⑤ARP=#k3⑥LDSmem,ASM ⑥ASM=Smem執(zhí)行過程:①(Smem)→T②(Smem(8-0))→DP(9位)③k9→DP④k5→ASM⑤k3→ARP⑥(Smem(4-0))→ASM不影響任何狀態(tài)位。功能描述:把一個數(shù)裝入T寄存器或狀態(tài)寄存器ST0或ST1中的DP、ASM和ARP域中。裝入的數(shù)可以是一個單數(shù)據(jù)存儲器操作數(shù)Smem也可以是一個常數(shù)。該指令代碼為一個字,但當Smem采用了長偏移直接尋址或絕對地址尋址方式時,指令代碼為兩個字。例4.6
LD*AR3+,TDataMemory例4.7
LD*AR4,DPDataMemory11111110DC例4.8
LD#23,DP017H例4.9
LD15,ASM0FH例4.10
LD3,ARP例4.11
LDDAT0ASMDataMemory(4)?LDM語法:助記符方式表達式方式LDMMMR,dst dst=MMR dst=mmr(MMR)執(zhí)行過程:(MMR)→dst不影響任何狀態(tài)位。功能描述:把存儲器映射寄存器---MMR中的值裝入到目的累加器dst中。不管DP的當前值或ARx的高9位的值是多少,都把有效地址的高9位清0,以指定為在數(shù)據(jù)頁0中。該指令不受SXM的影響。例4.12
LDMAR4,A(5)LDR語法:助記符方式表達式方式LDRSmem,dst dst=rnd(Smem)執(zhí)行過程:(Smem)<<16+1<<15→dst(31-16)受SXM的影響。功能描述:把單數(shù)據(jù)存儲器操作數(shù)Smem左移16bit后裝入目 的累加器dst的高端(31~16位)。Smem通過加 再對累加器的低端(15~0位)清0來湊整。累加器 的第15位置為1。例4.13
LDR*AR1,ADataMemory(6)LDU語法:助記符方式表達式方式LDUSmem,dstdst=uns(Smem)執(zhí)行過程:(Smem)→dst(15-0)000000H→dst(39-16)不影響任何狀態(tài)位。功能描述:把單數(shù)據(jù)存儲器值Smem裝入目的累加器dst的低端(15~0位)。dst的保護位和高端(39~16位)清0。因此,數(shù)據(jù)被看成是一個不帶符號的16bit數(shù)。不管SXM位的狀態(tài)如何都無符號擴展。該指令代碼占一個字,但當Smem采用長偏移間接尋址或絕對地址尋址方式時就會多占一個字。例4.14LDU*AR1,ADataMemory(7)LTD語法:助記符方式表達式方式LTDSmem ltd(Smem)執(zhí)行過程:(Smem)→T(Smem)→Smem+1不影響任何狀態(tài)位。功能描述:把一個單數(shù)據(jù)存儲器單元的內(nèi)容Smem復制到T寄存器和緊接著T的數(shù)據(jù)單元中去。當數(shù)據(jù)復制完畢后,Smem單元的內(nèi)容保持不變。這個功能在數(shù)字信號處理中實現(xiàn)一個Z延時是相當有用的。該功能在存儲器延遲指令中也存在。例4.15
LTD*AR3DataMemory2)存儲指令存儲指令將原操作數(shù)或立即數(shù)存入存儲器或寄存器,共10條指令,如下所示。(1)DST語法:助記符方式表達式方式DSTsrc,Lmemdbl(Lmem)=src dual(Lmem)=src執(zhí)行過程:(src(31-0))→Lmem不影響任何狀態(tài)位。功能描述:把源累加器的內(nèi)容放在一個32bit的長數(shù)據(jù)存儲器單元Lmem中。例4.16
DSTB,*AR3+DataMemory(2)?ST語法:助記符方式表達式方式①STT,Smem ①Smem=T②STTRN,Smem ②Smem=TRN③ST#1k,Smem ③Smem=#1k執(zhí)行過程:①(T)→Smem②(TRN)→Smem③1k→Smem該指令不影響任何狀態(tài)位。功能描述:把T寄存器的內(nèi)容,過渡寄存器(TRN)的內(nèi)容或一個 16bit常數(shù)1k存放到數(shù)據(jù)存儲器單元Smem中去。例4.17
STTRN,DAT5DataMemory例4.18
STT,*AR7-DataMemory(3)STH語法:助記符方式表達式方式①STHsrc,Smem①Smem=hi(src)②STHsrc,ASM,Smem②Smem=hi(src)<<ASM③STHsrc,SHFT,Xmem③Xmem=hi(src)<<SHFT④STHsrc[,SHIFT],Smem④Smem=hi(src)<<SHIFT 執(zhí)行過程:①(src(31-16))→Smem ②(src)<<(ASM-16)→Smem ③(src)<<(SHFT-16)→Xmem ④(src)<<(SHIFT-16)→Smem該指令受SXM影響。功能描述:把源累加器src的高端(31~16位)存放到數(shù)據(jù)存儲器單元Smem中去。Src進行左移,移動位數(shù)由ASM、SHFT或SHIFT決定;然后再把移位后的值(31~16位)存放到數(shù)據(jù)存儲器單元(Smem或Xmem)中。如果SXM=0,則把src的39位復制到數(shù)據(jù)存儲器單元的最高位。如果SXM=1,就把移位后進行了符號擴展的第39位存放到數(shù)據(jù)存儲器單元的最高位。例4.19
STHA,DAT10DataMemory31-16位例4.20
STHB,–8,*AR7–右移8位為00FF842112(4)STL語法:助記符方式表達式方式①STLsrc,Smem①Smem=src②STLsrc,ASM,Smem②Smem=src<<ASM③STLsrc,SHFT,Xmem③Xmem=src<<SHFT④STLsrc[,SHIFT],Smem④Smem=src<<SHIFT執(zhí)行過程:①(src(15-0))→Smem②(src)<<ASM→Smem③(src)<<SHFT→Xmem④(src)<<SHIFT-16→Smem該指令受SXM影響。功能描述:把源累加器src的低端(15~0位)存放到數(shù)據(jù)存儲器單元Smem中去。Src進行左移操作,移動位數(shù)由ASM、SHFT或SHIFT決定。然后把移位后的值(15~0位)存放到數(shù)據(jù)存儲器單元(Smem或Xmem)中去。當移位值為正時,低位添0。例4.21STLA,DAT110-7位例4.22STLB,-8,*AR7-DataMemory右移8位00FF842112(5)STLM語法:助記符方式表達式方式STLMsrc,MMRMMR=srcmmr(MMR)=src執(zhí)行過程:(src(15-0))→MMR該指令不影響任何狀態(tài)位。功能描述:把源累加器src的低端(15~0位)存放到存儲器映射寄存器MMR中。無論DP的當前值或ARx的高9位是多少,都對有效地址的高9位清0。指令允許src存放在數(shù)據(jù)第0頁中的任何一個存儲器單元中而不必修改狀態(tài)寄存器ST0中的DP域。例4.23STLMA,BRC(塊循環(huán)計數(shù)器)例4.24
STLMB,*AR1-高位清零-1(6)STM語法:助記符方式表達式方式STLM#1k,MMRMMR=#1k mmr(MMR)=#1k執(zhí)行過程:1k(16位長立即數(shù))→MMR該指令不影響任何狀態(tài)位。功能描述:該指令的功能是:把一個16bit常數(shù)1k存放到一個存 儲器映射寄存器MMR或一個在第0數(shù)據(jù)頁中的存儲 器單元,而不必修改狀態(tài)寄存器ST0中的DP域。無 論DP的當前值或ARx的高9位是多少,都對有效地 址的高9位清0。例4.25
STM1111H,IMR例4.26
STM8765H,*AR7+
指令執(zhí)行前
指令執(zhí)行后AR70333HAR70034H數(shù)據(jù)存儲器
0033H0000H0033H8765H(7)CMPS(比較、選擇并存儲最大值)語法:助記符方式表達式方式CMPSsrc,Smemcmps(src,Smem)執(zhí)行過程:if((src(31-16))﹥(src(15-0)))Then(src(31-16))→Smem(TRN)<<1→TRN0→TRN(0)0→TCElse(src(15-0))→Smem1→TRN(0)1→TC該指令影響TC位。功能描述:比較位于源累加器的高端和低端的兩個16bit二進制補碼值的大小,把較大值存在單數(shù)據(jù)存儲器單元Smem中。如果是源累加器的高端(31~16位)較大,則過渡寄存器(TRN)左移一位,最低位填0,TC位清0。如果是源累加器的低端(15~0位)較大,則TRN左移一位,最低位填1,TC位置1。該指令不遵從標準的流水操作。比較是在讀操作數(shù)階段完成,因而,源累加器的值是指令執(zhí)行前一個階段的值。TRN寄存器和TC位是在執(zhí)行階段被修改的。例4.27
CMPSA,*AR4+2345H<7899H7899HAR4TCTRN左移1位低位填1(8)SACCD語法:助記符方式 表達式方式
SACCDsrc,Xmem,condif(cond)Xmem=hi(src)<<ASM執(zhí)行方式:if(cond) Then (src)<<(ASM-16)→Xmem Else (Xmem)→(Xmem)該指令受ASM和SXM的影響。功能描述:如果滿足條件(如表4.2所示),則源累加器src左移(ASM-16)位后存放到Xmem指定的存儲器單元中去;如果不滿足條件,則指令從Xmem中讀出數(shù)據(jù),然后又把它寫回到原來的單元中去,即Xmem單元的值保持不變。表4.2功能條件例4.28
SACCDA,*AR3+0%,ALTDataMemory訪問后,AR0以循環(huán)尋址的方法加到ARx中ALT:(A)<0}+(9)SRCCD語法:助記符方式表達式方式SRCCDXmem,condif(cond)Xmem=BRC執(zhí)行過程:if(cond)Then(BRC)→XmemElse(Xmem)→Xmem該指令不會影響任何狀態(tài)位。功能描述:如果滿足條件,則指令把塊循環(huán)計數(shù)器(BRC)中的內(nèi)容放到Xmem中去;如果不滿足條件,則指令把Xmem中的內(nèi)容讀出,再把它寫回去,即Xmem保持不變。例4.29
SRCCD*AR5-,AGTDataMemoryAGT:(A)>0BRCAR5語法:助記符方式表達式方式 STRCDXmem,condif(cond)Xmem=T執(zhí)行過程:if(cond) (T)→Xmem Else(Xmem)→Xmem該指令不會影響任何狀態(tài)位。功能描述:如果滿足條件,就把T寄存器的值存放到數(shù)據(jù)存儲器單元Xmem中去;如果不滿足條件,則指令從單元Xmem中讀出數(shù)據(jù),然后再把它寫回到Xmem中去,即Xmem中的數(shù)據(jù)保持不變。例4.30
STRCD*AR5-,AGTDataMemoryA>0TAR53)混合裝載和存儲指令混合裝載和存儲指令共12條,如下所示。
(1)MVDD語法:助記符方式表達式方式MVDDXmem,YmemYmem=Xmem執(zhí)行過程:(Xmem)→Ymem該指令不影響任何狀態(tài)位。功能描述:把通過Xmem尋址的數(shù)據(jù)存儲器單元的值復制到通過Ymem尋址的數(shù)據(jù)存儲器單元中去。例4.31
MVDD*AR3+,*AR5+DataMemory0200AR50201AR5(2)MVDK語法:助記符方式表達式方式MVDKSmem,dmaddata(dmad)=Smem執(zhí)行過程:(dmad)→EAR(地址寄存器)if(RC)≠0Then(Smem)→通過EAR尋址的Dmem(EAR)+1→EARElse(Smem)→通過EAR尋址的Dmem該指令不會影響任何狀態(tài)位。RC循環(huán)計數(shù)器地址功能描述:把一個單數(shù)據(jù)存儲器操作數(shù)Smem的內(nèi)容復制到一個通過dmad(地址在EAB地址寄存器EAR中)尋址的數(shù)據(jù)存儲器單元??梢匝h(huán)執(zhí)行該指令來轉移數(shù)據(jù)存儲器中的連續(xù)字(使用間接尋址)。實際被轉移的字數(shù)要比指令開始執(zhí)行時循環(huán)計數(shù)器中的值大1。一旦啟動流水,指令就成為單周期指令。該指令代碼占兩個字,但當Smem采用長偏移間接尋址或絕對尋址方式時就會多占一個字。例4.32
MVDKDAT10,8000HDataMemory例4.33
MVDK*AR3-,1000HDataMemory(3)MVDM語法:助記符方式表達式方式MVDMdmad,MMRMMR=data(dmad) mmr(MMR)=data(dmad)執(zhí)行過程:dmad→DARif(RC)≠0Then(通過DAR尋址的Dmem)→MMR(DAR)+1→DARElse(通過DAR尋址的Dmem)→MMRRC循環(huán)計數(shù)器該指令不影響任何狀態(tài)位。功能描述:把數(shù)據(jù)從一個數(shù)據(jù)存儲器單元dmem(dmad的值裝入DAB地址寄存器DAR中)復制到一個存儲器映射寄存器MMR中。一旦啟動了循環(huán)流水,指令就變成了一條單周期指令。該指令代碼占兩個字。例4.34
MVDM300H,BKDataMemory(4)MVDP語法:助記符方式表達式方式MVDPSmem,pmadprog(pmad)=Smem執(zhí)行過程:pmad→PAR(程序存貯器地址寄存器)if(RC)≠0Then(Smem)→由PAR尋址的Pmem(PAR)+1→PARElse(Smem)→由PAR尋址的Pmem該指令不會影響任何狀態(tài)位。立即數(shù)尋址RC循環(huán)計數(shù)器功能描述:把嚴格的16bit單數(shù)據(jù)存儲器操作數(shù)Smem復制到一個由16bit立即數(shù)pmad尋址的程序存儲器單元中。通過循環(huán)執(zhí)行該指令可以把數(shù)據(jù)存儲器中的連續(xù)字(使用間接尋址)轉移到由16bit立即數(shù)尋址的連續(xù)的程序存儲器空間中。源和目的塊不必全部在片外或片內(nèi)。當循環(huán)流水開始進行時,該指令就變成了一個單周期指令。另外,當循環(huán)執(zhí)行該指令時,中斷被禁止。例4.35
MVDPDAT0,0FE00HDataMemoryProgramMemory(5)MVKD語法:助記符方式表達式方式MVKDdmad,SmemSmem=data(dmad)執(zhí)行過程:dmad→DAR【DAB-(D地址總線)地址寄存器】if(RC)≠0Then(通過DAR尋址的Dmem)→Smem(DAR)+1→DARElse(通過DAR尋址的Dmem)→Smem該指令不會影響任何狀態(tài)位。RC循環(huán)計數(shù)器功能描述:把數(shù)據(jù)從一數(shù)據(jù)存儲器單元轉移到另一個數(shù)據(jù)存儲器單元中。源數(shù)據(jù)存儲器單元由一個16bit立即數(shù)dmad尋址,然后轉移到Smem中。循環(huán)執(zhí)行該指令可以轉移數(shù)據(jù)存儲器中的連續(xù)字(使用間接尋址)。轉移的字數(shù)要比指令開始執(zhí)行時循環(huán)計數(shù)器中的值大1。一旦形成循環(huán)流水,該指令就變成了單周期指令。該指令代碼占兩個字,但當Smem采用長偏移間接尋址或絕對尋址方式時就會多占一個字。例4.36
MVKD1000H,*+AR5DataMemory01FF+1=0200123(6)MVMD語法:助記符方式表達式方式MVMDMMR,dmaddata(dmad)=MMR data(dmad)=mmr(MMR)執(zhí)行過程:dmad→EAR【EAB(E地址總線)地址寄存器】if(RC)≠0Then(MMR)→由EAR尋址的Dmem(EAR)+1→EARElse(MMR)→由EAR尋址的DmemRC循環(huán)計數(shù)器該指令不影響任何狀態(tài)位。功能描述:把數(shù)據(jù)從一個存儲器映射寄存器MMR轉移到一個數(shù)據(jù)存儲器中。目的數(shù)據(jù)存儲器通過一個16bit立即數(shù)dmad尋址。一旦建立了循環(huán)流水,該指令就變成了單周期指令。例4.37
MVMDAR7,8000HDataMemory注意:這是一個直接尋址(7)MVMM語法:助記符方式表達式方式MVMMMMRx,MMRyMMRy=MMRx mmr(MMRy)=mmr(MMRx)執(zhí)行過程:(MMRx)→MMRy該指令不會影響任何狀態(tài)位。功能描述:把存儲器映射寄存器MMRx中的內(nèi)容轉移到另一個存儲器映射寄存器MMRy中。MMRx和MMRy只可能為9種操作數(shù)(AR0~AR7和SP-堆棧指針)。讀MMRx的操作在譯碼階段執(zhí)行;寫MMRy的操作在訪問階段執(zhí)行。注意,該指令不能循環(huán)執(zhí)行。例4.38
MVMMSP,AR1(8)MVPD語法:助記符方式表達式方式MVPDpmad,SmemSmem=prog(pmad)執(zhí)行過程:pmad→PAR(程序存貯器地址寄存器)if(RC)≠0Then(由PAR尋址的Pmem)→Smem(PAR)+1→PARElse(由PAR尋址的Pmem)→SmemRC循環(huán)計數(shù)器該指令不影響任何狀態(tài)位。功能描述:把一個字通過16bit立即數(shù)pmad尋址的程序存儲器轉移到一個由Smem尋址的數(shù)據(jù)存儲器單元。循環(huán)執(zhí)行該指令能把程序存儲器中的連續(xù)字轉移到連續(xù)的數(shù)據(jù)存儲器單元中去。源和目的塊不必全部都在片內(nèi)或片外。當建立起了循環(huán)流水,該指令就變成了單周期指令。另外,循環(huán)執(zhí)行該指令時禁止中斷。該指令代碼占兩個字,但當Smem采用長偏移間接尋址或絕對尋址方式時就會多占一個字。例4.39
MVPD0FE00H,DAT5ProgramMemoryDataMemory例4.40
MVPD2000H,*AR7-0ProgramMemory}-=123(9)PORTR語法:助記符方式表達式方式PORTRPA,Smem Smem=port(PA)執(zhí)行過程:(PA)→Smem該指令不會影響任何狀態(tài)位。功能描述:從一個外部I/O口PA(地址為16bit立即數(shù))把一個16bit數(shù)讀入到指定的數(shù)據(jù)存儲器單元Smem中。信號變?yōu)榈碗娖奖砻髟谠L問I/O口;和READY的時序和讀外部數(shù)據(jù)存儲器的時序相同。該指令代碼占兩個字,但當Smem使用長偏移間接尋址或絕對地址尋址時,就會多占一個字。16位立即數(shù)表示的端口地址例4.41
PORTR05,INDAT;INDAT.equ60HI/OMemoryDataMemory讀讀(10)PORTW語法:助記符方式表達式方式PORTWSmem,PA port(PA)=Smem執(zhí)行過程:(Smem)→PA該指令不影響任何狀態(tài)位。功能描述:把指定的數(shù)據(jù)存儲器單元Smem中的16bit數(shù)寫到外部I/O口PA中去。信號變?yōu)榈碗娖奖砻髟谠L問I/O口;和READY的時序和讀外部數(shù)據(jù)存儲器的時序相同。該指令代碼占兩個字,但當Smem使用長偏移間接尋址或絕對地址尋址時就會多占一個字。寫例4.42
PORTWOUTDAT,5H;OUTDAT.equ07HI/OMemoryDataMemory寫(11)READA語法:助記符方式表達式方式READASmemSmem=prog(A)執(zhí)行過程:A→PAR(程序存貯器地址寄存器)if((RC)≠0)Then(由PAR尋址的Pmem)→Smem(PAR)+1→PAR(RC)-1→RCElse(由PAR尋址的Pmem)→SmemRC循環(huán)計數(shù)器該指令不影響任何狀態(tài)位。功能描述:把累加器A確定的程序存儲器單元中的一個字傳送到一個數(shù)據(jù)存儲器單元Smem中去。一旦建立了循環(huán)流水,指令就變成了單周期指令。對于不同的芯片,累加器A確定程序存儲器單元的方式如下:可以循環(huán)執(zhí)行該指令,把一塊連續(xù)字(由累加器A確定起始地址)轉移到一個連續(xù)的使用間接尋址方式的數(shù)據(jù)存儲器空間中去。源和目的塊不必全部都在片內(nèi)或片外。例4.43
READADAT6ProgramMemoryDataMemory(12)WRITA語法:助記符方式表達方式WRITASmemprog(A)=Smem執(zhí)行過程:A→PAR(程序存貯器地址寄存器)if(RC)≠0Then(Smem)由→PAR尋址的Pmem(PRA)+1→PRA(RC)-1→RCElse(Smem)→由PRA尋址的Pmem該指令不影響任何狀態(tài)位。RC循環(huán)計數(shù)器功能描述:把一個字從一個由Smem確定的數(shù)據(jù)存儲器單元傳送到一個程序存儲器單元。程序存儲器的地址由累加器A確定,具體情況與芯片有關:我們可以通過循環(huán)指令,把數(shù)據(jù)存儲器中的連續(xù)字(使用間接尋址)轉移到由PRA尋址的連續(xù)的程序存儲器空間去。PAR的初始值是累加器A的低16位值。源和目的塊都不必完全在片內(nèi)或片外。當循環(huán)時,一旦建立了循環(huán)流水,該指令就變成了單周期指令。例4.44
WRITADAT5ProgramMemoryDataMemory
2.算術運算指令C54xDSP的算術運算指令包括加法指令、乘法指令、乘法—累加指令、乘法—減法指令、雙字運算指令及特殊應用指令。1)加法指令加法指令共4條,如下所示。(1)ADD語法:助記符方式表達式方式①ADDSmem,src ①src=src+Smem src+=Smem②ADDSmem,TS,src ②src=src+Smem<<TS src+=Smem<<TS③ADDSmem,16,src[,dst] ③dst=src+Smem<<16 dst+=Smem<<16④ADDSmem[,SHIFT],src[,dst]④dst=src+Smem[<<SHIFT] dst+=Smem[<<SHIFT]⑤ADDXmem,SHIFT,src ⑤src=src+Xmem<<SHIFT src+=Xmem<<SHIFT⑥ADDXmem,Ymem,dst ⑥dst=Xmem<<16+Ymem<<16⑦ADD#1k[,SHIFT],src[,dst]⑦dst=src+#1k[<<SHIFT] dst+=#1k[<<SHIFT]⑧ADD#1k,16,src[,dst] ⑧dst=src+#1k<<16 dst+=#1k<<16⑨ADDsrc[,SHIFT][,dst] ⑨dst=dst+src[<<SHIFT] dst+=src+[<<SHIFT]⑩ADDsrc,ASM[,dst] ⑩dst=dst+src<<ASM dst+=src<<ASM執(zhí)行過程:①(Smem)+(src)→src②(Smem)<<(TS)+(src)→src③(Smem)<<16+(src)→dst④(Smem)[<<SHIFT]+(src)→dst⑤(Xmem)<<SHIFT+(src)→src⑥((Xmem)+(Ymem))<<16→dst⑦1k<<16+(src)→dst⑧1k<<SHIFT+(src)→dst⑨(srcor[dst])+(src)<<SHIFT→dst⑩(srcor[dst])+(src)<<ASM→dst該指令受SXM(ST1中的符號擴展位)和OVM(ST1中的溢出方式位)影響,且影響C(ST1中的進位位)和OVdst—目的累加器A或B得溢出標志(如果dst=src—源累加器,就是OVsrc)功能描述:把一個16bit的數(shù)加到選定的累加器中,或加到一個采用雙數(shù)據(jù)存儲器操作數(shù)尋址的16bit操作數(shù)Xmem中。這個16bit的數(shù)可為以下情況中的一個:*單數(shù)據(jù)存儲器操作數(shù)(Smem);*雙數(shù)據(jù)存儲器操作數(shù)(Ymem);*一個16bit立即操作數(shù)(#1k);*src中的移位數(shù)。如果定義了dst,結果就存在dst中;否則,結果存在src中。大部分第二操作數(shù)要移位。左移位時低位添0;右移時高位情況為:*如果SXM=1,進行符號擴展;*如果SXM=0,則添0。例4.45ADD*AR3+,14,ADataMemory(src=src+Xmem<<SHIFT)
例4.46
ADDA,-8,B
(2)ADDC語法:助記符方式表達式方式ADDCSmem,srcsrc=src+Smem+CARRY src+=Smem+CARRY執(zhí)行過程:(Smem)+(src)+(C)→src該指令受OVM和C影響,并能影響C和OVsrc。功能描述:把16bit單數(shù)據(jù)存儲器操作數(shù)Smem和進位位(C)的值加到src中,其結果存放在src中。無論SXM位的值是什么,都不進行符號擴展。例4.48
ADDC*+AR2(5),ADataMemory+5(3)?ADDM語法:助記符方式表達式方式ADDM#1k,SmemSmem=Smem+#1k Smem+=#1k執(zhí)行過程: #1k+(Smem)→Smem該指令受OVM和SXM影響,并能影響C和OVA。功能描述:16bit單數(shù)據(jù)存儲器操作數(shù)Smem與16bit立即數(shù)1k相加,結果存放在Smem中。該指令不能循環(huán)執(zhí)行。例4.49
ADDM0123BH,*AR4+DataMemory(4)ADDS語法:助記符方式表達式方式ADDSSmem,src src=src+uns(Smem) src+=uns(Smem)執(zhí)行過程:uns(Smem)+(src)→src該指令受OVM影響,并能影響C和OVsrc。功能描述:把不帶符號的16bit單數(shù)據(jù)存儲器操作數(shù)Smem加到src中,結果存放在src中。無論SXM為何值都不進行符號擴展。例4.51
ADDS*AR2-,BDataMemory2)減法指令減法指令共4條,如下所示。(1)SUB語法:助記符方式表達式方式①SUBSmem,src ①src=src-Smem src-=Smem②SUBSmem,TS,src ②src=src-Smem<<TS src-=Smem<<TS③SUBSmem,16,src[,dst] ③dst=src-Smem<<16 dst-=Smem<<16④SUBSmem[,SHIFT],src[,dst] ④dst=src-Smem[<<SHIFT] dst-=Smem[<<SHIFT]⑤SUBXeme,SHIFT,src ⑤src=src-Xmem<<SHFT src-=Xmem<<SHFT⑥SUBXeme,Ymem,dst ⑥dst=Xmem<<16-Ymem <<16⑦SUB#lk,[,SHIFT],src[,dst] ⑦dst=src-#lk[<<SHFT] dst-=#lk[<<SHFT]⑧SUB#lk,16,src[,dst] ⑧dst=src-#lk<<16 dst-=#lk<<16⑨SUBsrc[,SHIFT],[,dst] ⑨dst=dst-src<<SHIFT dst-=src<<SHIFT⑩SUBsrc,ASM,[,dst] ⑩dst=dst-src<<ASM dst-=src<<ASM執(zhí)行過程:①(src)-(Smem)→src②(src)-(Smem)<<TS→src③(src)-(Smem)<<16→dst④(src)-(Smem)<<SHIFT→dst⑤(src)-(Xmem)<<SHIFT→rc⑥(Xmem)<<16-(Ymem)<<16→dst⑦(src)-lk<<SHFT→dst⑧(src)-lk<<16→dst⑨(src)-(src)<<SHFT→dst⑩(src)-(src)<<ASM→dst該指令受SXM和OVM的影響,并能影響C和OVdst(如果dst=src,就為OVsrc)。在語法③中,如果減法的結果產(chǎn)生一個借位,則進位位C為0;否則C不受影響。功能描述:從選定的累加器或采用雙數(shù)據(jù)存儲器尋址方式的16bit操作數(shù)Xmem中減去一個16bit值。16bit減數(shù)可能是下列情況中的一種:*單數(shù)據(jù)存儲器操作數(shù)(Smem);*雙數(shù)據(jù)存儲器操作數(shù)(#lk);*16bit立即數(shù)(#lk);*源累加器src的移位值。如果指定了目的累加器dst,結果就存放在dst中;否則,結果存放在src中。大部分指令的第二操作數(shù)都進行了移位。對于左移,低位添0;高位當SXM=1時進行符號擴展,當SXM=0時添0。對于右移,高位當SXM=0時進行符號擴展,當SXM=0時添0。例4.52
SUB*AR1+,14,A
DataMemory1500左移14位為54000001200-5400000=例4.53
SUBA,-8,B
1200右移8位00121800-0012=例4.54
SUB#12345,8,A,B(2)SUBB語法:助記符方式表達式方式SUBBSmem,src src=src-Smem-BORROW src-=Smem-BORROW執(zhí)行過程:(src)-(Smem)-(C的邏輯反)→src該指令受OVM和C的影響,并能影響C和OVsrc。功能描述:從源累加器中減去單數(shù)據(jù)存儲器操作數(shù)的值和進位位C的邏輯反,且不進行符號擴展。例4.55
SUBBDAT5,ADataMemory(src)-(Smem)-(C的邏輯反)→src例4.56
SUBB*AR1+,BDataMemoryC=0(3)SUBC語法:助記符方式表達式方式SUBCSmem,srcsubc(Smem,src)執(zhí)行過程:(src)-((Smem)<<15)→ALU的輸出ifALU≥的輸出0Then ((ALU的輸出)<<1)+1→srcElse (src)<<1→src該指令受SXM的影響,并能影響C和OVsrc(源累加器的溢出標志)。功能描述:16bit單數(shù)據(jù)存儲器操作數(shù)Smem左移15bit,然后再從源累加器src中減去移位后的值。如果結果大于0,結果就左移一位,加上1,再存放到src中;否則,只把src的值左移一位,再存放到src中。除數(shù)和被除數(shù)在這條指令中都假設為正,SXM將影響該操作:如果SXM=1,則除數(shù)的最高位必須為0;如果SXM=0,則任何一個16bit除數(shù)值都可以。Src中的被除數(shù)必須初始化為正(bit31為0),且在移位后也必須保持為正。該指令影響OVA或OVB,但不受OVM影響。所以,當發(fā)生溢出時,scr不進行飽和運算。例4.57
SUBCDAT2,ADataMemory0001左移15位=08000H0004-8000(<0左移1位)=0008(4)SUBS語法:助記符方式表達式方式SUBSSmem,srcsrc=src-uns(Smem) src-=uns(Smem)執(zhí)行過程:src-不帶符號的Smem→src該指令受OVM的影響,并能影響C和Ovsrc。功能描述:從源累加器src中減去16bit單數(shù)據(jù)存儲器操作數(shù)Smem的值。無論SXM的值為多少,Smem都被看成是一個16bit無符號數(shù)。例4.59
SUBS*AR2-,BDataMemory0002-EEEE=FFFFFF11143)乘法指令乘法指令共4條,如下所示。(1)MPY[R]語法:助記符方式表達式方式①MPY[R]Smem,dst①dst=rnd(T*Smem)②MPYXmem,Ymem,dst②dst=Xmem*Ymem[,T=Xmem]③MPYSmem,#1k,dst③dst=Smem*#1k[,T=Smem]④MPY#1k,dst④dst=T*#1k執(zhí)行方式:①(T)×(Smem)→dst ②(Xmem)×(Ymem)→dst (Xmem)→T ③(Smem)×1k→dst (Smem)→T ④(T)×1k→ds該指令受FRCT(ST1中的小數(shù)方式位)和OVM的影響,并能影響OVdst。功能描述:T寄存器的值或一個數(shù)據(jù)存儲器值與另一個數(shù)據(jù)存儲器的值或一個立即數(shù)相乘,結果存放在目的累加器dst中。在讀操作數(shù)階段把Smem或Xmem的值裝入T寄存器中。如果你使用了R后綴,指令就會對結果進行湊整運算。其步驟是:結果加上215再對15~0位清0。例4.60
MPYDAT13,ADataMemory例4.61
MPY*AR2-,*AR4+0%,BDataMemory例4.62
MPY#0FFFEH,A(2)MPYA語法:助記符方式表達式方式①MPYASmem①B=Smem*hi(A)[,T=Smem]②MPYAdst②dst=T*hi(A)執(zhí)行過程:①(Smem)×(A(32–16))→B(Smem)→T②(T)×(A(32–16))→dst該指令受FRCT和OVM的影響,并影響OVsrc(在語法①中為OVB)。功能描述:累加器A的高端(32~16位)與一個單數(shù)據(jù)存儲器操作數(shù)Smem或T寄存器的值相乘,結果存放在累加器dst或累加器B中。在讀操作數(shù)期間把單數(shù)據(jù)存儲器操作數(shù)Smem裝入T寄存器中(語法①)。該指令代碼占一個字,但當Smem采用長偏移間接尋址或絕對尋址方式時就會多占一個字。例4.63
MPYA*AR2DataMemory例4.64
MPYAB(3)MPYU語法:助記符方式表達式方式MPYUSmem,dstdst=T*uns(Smem)執(zhí)行過程:無符號的(T)×無符號的(Smem)→dst該指令受FRCT和OVM的影響,同時會影響到OVdst。功能描述:不帶符號的T寄存器值與不帶符號的單數(shù)據(jù)存儲器操作數(shù)Smem相乘,結果存放在目的累加器dst中。乘法器對于該指令來說相當于兩個操作數(shù)的最高位都為0的一個帶符號的17×17bit的乘法器。該指令在計算諸如兩個32bit數(shù)相乘得到一個64bit乘積的多精度乘法時相當有用。該指令代碼占一個字,但當Smem采用長偏移間接尋址或絕對尋址方式時就會多占一個字。例4.65
MPYU*AR0-,ADataMemory(4)SQUR語法:助記符方式表達式方式①SQURSmem,dst①dst=Smem*Smem[,T=Smem]dst=square(Smem)[,T=Smem]②SQURA,dst②dst=hi(A)*hi(A)dst=square(hi(A))執(zhí)行過程:①(Smem)→T (Smem)×(Smem)→dst②(A(32-16))×(A(32-16))→dst該指令受OVM和FRCT的影響,并能影響OVsrc。功能描述:一個單數(shù)據(jù)存儲器操作數(shù)Smem或累加器A的高端(32~16位)平方后,結果存放在目的累加器dst中。如果用的是累加器A,T就不受影響;如果操作數(shù)為Smem,就要把Smem存入T寄存器中。例4.66
SQURDAT30,BDataMemory例4.67
SQURA,B4)乘法—累加和乘法—減法指令乘法—累加和乘法—減法指令,共9條,如下所示。
(1)MAC[R]語法:助記符方式表達式方式①MAC[R]Smem,src①src=rnd(src+T*Smem)②MAC[R]Xmem,Ymem,src[,dst] ②dsr=rnd(src+Xmem*Ymem) [,T=Xmem]③MAC[R]#1k,src[,dst] ③dst=src+T*#1k dst+=T*#1k④MAC[R]Smem,#1k,src[,dst] ④dst=src+Smem*#1k[,T=Smem] dst+=Smem*#1k[,T=Smem]執(zhí)行過程: ①(Smem)×(T)+(src)→src ②(Xmem)×(Ymem)+(src)→dst (Xmem)→T ③(T)×1k+(src)→dst ④(Smem)×1k+(src)→dst (Smem)→T該指令受FRCT和OVM的影響,并影響OVdst(當沒有確定dst為OVsrc時)。功能描述:該指令完成乘和累加運算,并可進行湊整,結果按規(guī)定存放在dst或src中。對于語法②和語法④,緊接著操作碼的數(shù)據(jù)存儲器值在讀操作數(shù)階段存放到T寄存器中。果你使用R后綴,則指令對乘/累加操作的結果湊整。例4.68
MAC*AR5+,ADataMemory例4.69
MAC#345H,A,B例4.70
MAC#345H,A,B例4.71
MAC*AR5+,*AR6+,A,BDataMemory(2)MACA[R]語法:助記符方式表達式方式①MACA[R]Smem[,B]①B=rnd(B+Smem*hi(A))[,T=Xmem]②MACA[R]T,src[,dst]②dst=rnd(src+T*hi(A))執(zhí)行過程:①(Smem)×(A(32-16))+(B)→B(Smem)→T ②(T)×(A(32-16))+(src)→src該指令受FRCT和OVM影響,在語法①中影響OVdst(如果沒有定義dst,就為OVsrc)和OVB。功能描述:累加器A的高端(32~16位)與一個單數(shù)據(jù)存儲器操作數(shù)Smem或T寄存器中的內(nèi)容相乘,乘積加到累加器B中(語法①)或源累加器src中。語法①結果存放在累加器B中,語法②結果存放在dst或src(如果沒有定義dst就為src)中。累加器A的32~16位值用來作為乘法器的一個17bit操作數(shù)。如果你使用了R后綴,指令要對結果進行湊整。該指令代碼占一個字,但當Smem采用長偏移間接尋址方式時就會多占一個字。例4.72
LMS*AR3+,*AR4+DataMemory例4.73
MACAT,B,B例4.74
MACAR*AR5+,BDataMemory(3)MACD語法:助記符方式表達式方式MACDSmem,pmad,srcmacd(Smem,pmad,src)執(zhí)行過程:pmad→PARif(RC)≠0Then(Smem)×(用PAR尋址的Pmem)+(src)→src(Smem)→T(Smem)→Smem+1(PAR)+1→PARElse(Smem)×(用PAR尋址的Pmem)+(src)→src(Smem)→T(Smem)→Smem+1該指令受FRCT和OVM的影響,并影響到OVsrc。功能描述:一個單數(shù)據(jù)存儲器值Smem與一個程序存儲器值pmad相乘,乘積和源累加器src的值相加,結果存放在src中。另外,還把數(shù)據(jù)存儲器值Smem裝入到T寄存器和緊接著Smem地址的數(shù)據(jù)單元中去。當循環(huán)執(zhí)行該指令時,在程序地址寄存器PAR中存儲器地址執(zhí)行加1操作。循環(huán)流水一旦啟動,指令就變成單周期指令,在存儲器延遲指令中也存在該功能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度物業(yè)企業(yè)社區(qū)安全防范體系建設合同2篇
- 2025年度新能源項目勞務派遣管理合同范本2篇
- 2024年自然人股東股權融資協(xié)議3篇
- 2024版漿砌石施工合作協(xié)議細則版B版
- 二零二五年度城市軌道交通施工合同12篇
- 課程設計一般幾天
- 2025版礦石運輸合同貨物質量檢測與鑒定協(xié)議3篇
- 2025年度鈑金加工行業(yè)綠色制造技術合作合同3篇
- 演藝培訓課程設計案例
- 美術畫斑馬課程設計
- 能源托管服務投標方案(技術方案)
- 2024年新奧集團股份有限公司招聘筆試參考題庫含答案解析
- 乳頭混淆疾病演示課件
- 高速公路涉路施工許可技術審查指南(一)
- 海南物流行業(yè)發(fā)展趨勢分析報告
- 安全運維配置檢查
- 移相變壓器計算程序標準版
- 期末測試(試題)-三年級數(shù)學上冊人教版
- 藥劑科門診中成西藥房利用PDCA循環(huán)降低門診藥房調劑內(nèi)差發(fā)生率品管圈QCC成果匯報
- 物料員工作計劃與總結
- 浙江省金華市2023年九年級上學期期末數(shù)學試題附答案
評論
0/150
提交評論