第3.2章 匯編指令DSP教案_第1頁
第3.2章 匯編指令DSP教案_第2頁
第3.2章 匯編指令DSP教案_第3頁
第3.2章 匯編指令DSP教案_第4頁
第3.2章 匯編指令DSP教案_第5頁
已閱讀5頁,還剩210頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章

TMS320C54x的指令系統(tǒng)3.4TMS320C54x指令系統(tǒng)概述

C54x的助記符指令由操作碼和操作數(shù)組成。

例如:

LD

#0FFH,A

;將立即數(shù)0FFH傳送至A

操作碼源操作數(shù)目的操作數(shù)注釋3.4.1指令系統(tǒng)中的符號和縮寫表3-1指令系統(tǒng)中的符號和縮寫表3-1指令系統(tǒng)中的符號和縮寫(續(xù)1)表3-1指令系統(tǒng)中的符號和縮寫(續(xù)2)表3-1指令系統(tǒng)中的符號和縮寫(續(xù)3)表3-1指令系統(tǒng)中的符號和縮寫(續(xù)4)3.4.2指令系統(tǒng)中的運(yùn)算符

TMS320C54x匯編器使用與C語言相似的優(yōu)先級表3-2指令系統(tǒng)中的運(yùn)算符號和運(yùn)算優(yōu)先級序號符號運(yùn)算功能求值順序1+-~!取正、取負(fù)、按位求補(bǔ)、邏輯負(fù)

從右至左2*/%乘法、除法、求模從左至右3+-加法、減法從左至右4^指數(shù)

從左到右

5<<>>左移、右移從左至右6<小于、小于等于從左至右7>大于、大于等于從左至右8!=不等于從左至右9&按位與運(yùn)算從左至右10∧

按位異或運(yùn)算從左至右11|按位或運(yùn)算從左至右3.4.3匯編指令介紹算數(shù)運(yùn)算指令邏輯運(yùn)算指令程序控制指令裝載和存儲(數(shù)據(jù)傳送)指令

TMS320C54x的指令系統(tǒng)共有129條基本指令,由于操作數(shù)的尋址方式不同,又可派生至205條指令。按功能分為如下幾類:算術(shù)運(yùn)算指令加法指令(ADD、ADDC、ADDM、ADDS)減法指令(SUB、SUBB、SUBC、SUBS)乘法指令(MPY[R]、MPYA、MPYU、SQUR)乘累加指令(MAC[R]、MACA[R]、MACD、MACP、MACSU、

SQURA、MAS[R]、MASA[R]、SQURS)乘減指令(MASA)雙字/雙精度指令(DADD、DADST、DRSUB、DSADT)特殊操作指令(ABDST、ABS、CMPL、DELAY、EXP、MAX、

MIN、POLY、SAT、RND、SQDST、FIRS、

LMS、NEG、NORM)加法指令共4條:ADD、ADDC、ADDM、ADDS加法指令功能:把一個(gè)16bit數(shù)加到選定累加器dst[src]中加法指令該指令受SXM和OVM影響,且影響C和OVdst(OVsrc)加法指令舉例例3.45ADD*AR3+,14,ADataMemory加法指令舉例例3.47ADD#456BH,8,A,B

例3.46ADDA,-8,B加法指令功能:把16bit的Smem和進(jìn)位位C的值加到src中加法指令舉例例3.48ADDC*+AR2(5),A加法指令功能:16bit的Smem與16bit立即數(shù)1k相加,結(jié)果放在Smem中。加法指令舉例例3.49ADDM#0123BH,*AR4+DataMemory例3.50

ADDM,#0FFF8H,*AR4+DataMemory加法指令舉例加法指令功能:把無符號16bit的Smem加到src中加法指令舉例例3.51ADDS*AR2-,BDataMemory減法指令減法指令(續(xù))共4條:SUB、SUBB、SUBC、SUBS功能:從選定累加器或雙Xmem中減去一個(gè)16bit值,結(jié)果放在dst[src]例3.52

SUB*AR1+,14,A

DataMemory減法指令舉例例3.53SUBA,-8,B

減法指令舉例例3.54

SUB#12345,8,A,B減法指令舉例減法指令功能:從源累加器中減去Smem的值和進(jìn)位位C的邏輯反例3.55SUBBDAT5,ADataMemory減法指令舉例例3.56

SUBB*AR1+,BDataMemory減法指令舉例減法指令功能:16bit的Smem左移15bit,再從src中減去移位后的值。若結(jié)果大于0,則結(jié)果左移一位加上1,放入src中;否則只把src的值左移一位,放入src中。例3.57

SUBCDAT2,ADataMemory減法指令舉例例3.58

RPT#25SUBC*AR1,BDataMemory減法指令舉例減法指令功能:從源累加器src中減去16bit無符號Smem的值。例3.59SUBS*AR2-,B

DataMemory減法指令舉例乘法指令共4條:MPY[R]、MPYA、MPYU、SQUR功能:T寄存器的值或一個(gè)數(shù)據(jù)存儲器值與另一個(gè)數(shù)據(jù)存儲器的值或一個(gè)立即數(shù)相乘,結(jié)果放入dst。在讀操作數(shù)階段把Smem或Xmem的值裝入T寄存器中。該指令受FRCT和OVM的影響,并能影響OVdst。例3.60

MPYDAT13,ADataMemory乘法指令舉例例3.62

MPY#0FFFEH,A

乘法指令舉例乘法指令功能:A的高位與Smem或T寄存器的值相乘,結(jié)果放dst或B中。在讀操作數(shù)期間把Smem裝入T寄存器。例3.63

MPYA*AR2

DataMemory乘法指令舉例例3.64

MPYAB

乘法指令舉例乘法指令功能:無符號T寄存器值與無符號Smem相乘,結(jié)果放入dst。例3.65MPYU*AR0-,ADataMemory乘法指令舉例乘法指令功能:Smem或累加器A的高位平方后,結(jié)果放在dst中。例3.67SQURA,B乘法指令舉例乘加和乘減指令乘加和乘減指令共9條:乘-加:MAC[R]、MACA[R]、MACD、MACP、MACSU、SQURA乘-減:MAS[R]、MASA[R]、SQURS乘加和乘減指令功能:完成乘和累加運(yùn)算,并可進(jìn)行湊整,結(jié)果放dst/src中。乘加和乘減指令該指令受FRCT和OVM的影響,并能影響OVdst。例3.68MAC*AR5+,ADataMemory乘-累加指令舉例例3.69MAC#345H,A,B

乘-累加指令舉例DataMemory乘-累加指令舉例例3.71MAC*AR5+,*AR6+,A,B乘加和乘減指令功能:A的高位與Smem或T寄存器中的內(nèi)容相乘,乘積加到累加器B中或src中。例3.73MACAT,B乘-累加指令舉例DataMemory乘-累加指令舉例例3.74MACAR*AR5+,B

乘加和乘減指令功能:Smem與pmad相乘,乘積和src值相加,結(jié)果放src中。并把Smem裝入下一數(shù)據(jù)單元和T寄存器。ProgramMemory乘-累加指令舉例例3.75MACD*AR3–,COEFFS,A乘加和乘減指令功能:Smem與pmad相乘,乘積和src相加,結(jié)果放src中。同時(shí)把Smem復(fù)制到T寄存器中。ProgramMemory乘-累加指令舉例例3.76MACP*AR3-,COEFFS,A

乘加和乘減指令功能:無符號Xmem與帶符號Ymem相乘,乘積與src相加,結(jié)果放src中。同時(shí)把Xmem存入T寄存器。例3.77MACSU*AR4+,*AR5+,A乘-累加指令舉例乘加和乘減指令功能:對Smem求平方并加到src中;同時(shí)Smem放到T寄存器中。例3.84SQURA*AR3+,ADataMemory乘-累加指令舉例乘加和乘減指令功能:Xmem在讀操作數(shù)階段裝入到T寄存器中;一個(gè)存儲器操作數(shù)與T寄存器內(nèi)容相乘,或兩個(gè)存儲器操作數(shù)相乘,再從src或dst中減去該乘積,結(jié)果存放src或dst中。例3.78MAS*AR5+,ADataMemory乘-減指令舉例例3.80MASR*AR5+,*AR6+,A,B乘-減指令舉例DataMemory乘-減指令舉例例3.81MASA*AR5+例3.81MASA*AR5+,B例3.82MASAT,B乘-減指令舉例例3.85SQURSDAT9,A

乘-減指令舉例雙精度指令共6條:DADD、DADST、DRSUB、DSADT、DSUB、DSUBTDataMemory雙字算數(shù)運(yùn)算指令舉例例3.86DADD*AR3+,A,BDataMemory雙字算數(shù)運(yùn)算指令舉例例3.90DRSUB*AR3+,A例3.94DSUB*AR3+,A

DataMemory雙字算數(shù)運(yùn)算指令舉例例3.95DSUB*AR3-,A

雙字算數(shù)運(yùn)算指令舉例專用指令共15條:ABDST、ABS、CMPL、DELAY、EXP、MAX、MIN、POLY、SAT、RND、SQDST、FIRS、

LMS、

NEG、

NORM邏輯運(yùn)算指令與指令(AND、ANDM)或指令(OR、ORM)異或指令(XOR、XORM)移位指令(ROL、ROLTC、ROR、SFTA、SFTC、SFTL)測試指令(BIT、BITF、BITT、CMPM、CMPR)與邏輯運(yùn)算指令共2條:AND、ANDM例3.121ANDA,3,B與指令舉例例3.122ANDM#00FFh,*AR4+DataMemory與指令舉例或邏輯運(yùn)算指令共2條:OR、ORM例3.123ORA,3,B或指令舉例例3.124

ORM0404H,*AR4+DataMemory或指令舉例異或邏輯運(yùn)算指令共2條:XOR、XORM例3.126XORA,3,B例3.125XOR*AR3+,A異或指令舉例例3.127XORM#0404H,*AR4-DataMemory異或指令舉例移位指令共6條:ROL、ROLTC、ROR、SFTA、SFTC、SFTL例3.128ROLA移位指令舉例例3.129ROLTCA移位指令舉例例3.130RORA移位指令舉例例3.131SFTAA,-5,B例3.132SFTAB,+5移位指令舉例例3.133SFTCA移位指令舉例例3.134SFTLA,-5,B例3.135SFTLB,+5移位指令舉例測試指令共5條:BIT、BITF、BITT、CMPM、CMPR例3.136BIT*AR5+,3;testbit12DataMemory測試指令舉例例3.137BITFDAT5,#00FFHDataMemory測試指令舉例例3.138BITT*AR7+0DataMemory測試指令舉例例3.139CMPM*AR4+,#0404HDataMemory測試指令舉例例3.140CMPR2,AR4測試指令舉例程序控制指令分支轉(zhuǎn)移指令(B[D]、BACC[D]、BANZ[D]、BC[D]、FB[D]、FBACC[D])子程序調(diào)用指令(CALA[D]、CALL[D]、CC[D]、FCALA[D]、FCALL[D])中斷指令(INTR、TRAP)返回指令(FRET[D]、FRETE[D]、RC[D]、RET[D]、RETE[D]、RETF[D])重復(fù)指令(RPT、RPTB[D]、RPTZ)堆棧處理指令(FRAME、POPD、POPM、PSHD、PSHM)混合程序控制指令(IDLE、MAR、NOP、RESET、RSBX、SSBX、XC)

分支轉(zhuǎn)移指令功能:指令指針指向指定的pmad(一個(gè)符號或數(shù)字)。共6條:B[D]、BACC[D]、BANZ[D]、BC[D]、FB[D]、FBACC[D]例3.141BD1000HANDM#4444H,*AR1+

操作數(shù)與4444H相與后,程序繼續(xù)從1000H單元開始執(zhí)行。分支轉(zhuǎn)移指令舉例分支轉(zhuǎn)移指令功能:程序指針PC指向src的低位所確定的16bit地址。例3.142BACCA分支轉(zhuǎn)移指令舉例分支轉(zhuǎn)移指令功能:若當(dāng)前輔助寄存器ARx不為0,則程序指針轉(zhuǎn)移到指定pmad;否則PC指針加2。例3.143BANZ1FFFH,*AR3-分支轉(zhuǎn)移指令舉例分支轉(zhuǎn)移指令功能:滿足特定條件,指令就轉(zhuǎn)移到pmad上;否則PC加2且緊接著該指令的兩個(gè)字繼續(xù)執(zhí)行例3.144BC1FFFH,AGT分支轉(zhuǎn)移指令舉例例3.145BC2000H,AGT例3.146BCD1000H,BOVANDM#4444H,*AR1+注意:存儲器單元的數(shù)據(jù)和#4444H相與后,如果滿足OVB就發(fā)生轉(zhuǎn)移;否則繼續(xù)按順序執(zhí)行。

分支轉(zhuǎn)移指令舉例例3.147BC1000H,TC,NC,BIO分支轉(zhuǎn)移指令舉例分支轉(zhuǎn)移指令功能:PC指向由pmad的22~16位決定的頁中pmad的15~0位所確定的程序存儲器地址。例3.148FB012000H執(zhí)行過程:(pmad(15-0))→PC (pmad(22-16))→XPC2000H裝入PC,01裝入XPC,程序繼續(xù)從單元開始執(zhí)行。分支轉(zhuǎn)移指令舉例分支轉(zhuǎn)移指令功能:把src的22~16位值裝入XPC,并讓PC指向src的低位所確定的16bit地址。例3.149FBACCDBANDM#4444H*AR1+注意:操作數(shù)和#4444H相與后,7FH裝入XPC;程序繼續(xù)從第7FH頁的2000H單元開始執(zhí)行。

子程序調(diào)用指令功能:程序指針轉(zhuǎn)移到src的低位所確定的16bit地址單元,返回地址壓入棧頂。例3.150CALAADataMemory子程序調(diào)用指令舉例子程序調(diào)用指令功能:程序指針指向確定的pmad,返回地址在pmad裝入PC前壓入棧頂保存。例3.151CALL5678HDataMemory子程序調(diào)用指令舉例子程序調(diào)用指令功能:滿足確定條件時(shí),PC指向pmad;否則PC指針加2。例3.152CCD1111H,BOVANDM#4444H,*AR1+DataMemory子程序調(diào)用指令舉例子程序調(diào)用指令功能:把src的22~16位值裝入XPC,PC指向src的低15~0位所確定的16bit地址。例3.153FCALADBANDM#4444H,*AR1+DataMemory

子程序調(diào)用指令舉例子程序調(diào)用指令功能:PC指向pmad的22~16位確定的頁中pmad的15~0位所確定的程序存儲器地址。返回地址在pmad的低端裝入PC前被壓入堆棧。例3.154FCALL013333H子程序調(diào)用指令舉例中斷指令功能:程序指針PC指向由K所確定的中斷向量,該指令影響INTM和IFR。例3.155INTR3DataMemory中斷指令舉例中斷指令功能:程序指針PC指向由K所確定的中斷向量。例3.156TRAP3DataMemory中斷指令舉例0025PCBeforeInstructionAfterInstructionFFPC

01FFIPTR01FFIPTR1000SP0FFFSP返回指令共6條:FRET[D]、FRETE[D]、RC[D]、RET[D]、RETE[D]、RETF[D]例3.157FRETDataMemory返回指令舉例返回指令例3.158FRETE

返回指令舉例返回指令例3.159RCAGEQ,ANOV;如果A的值為正,且OVA等于0就返回DataMemory返回指令舉例返回指令例3.160RET

DataMemory返回指令舉例返回指令例3.161RETE

DataMemory返回指令舉例返回指令RIN:快速返回寄存器例3.162RETFDataMemory返回指令舉例重復(fù)指令功能:指令執(zhí)行時(shí),首先把循環(huán)的次數(shù)裝入循環(huán)計(jì)數(shù)器(RC)。例3.163RPTDAT127;DAT127等于0FFFHDataMemory重復(fù)指令舉例例4.164RPT#1111H ;下一條指令循環(huán)執(zhí)行4370次重復(fù)指令功能:循環(huán)執(zhí)行一指令塊,循環(huán)的次數(shù)由存儲器映射的塊循環(huán)計(jì)數(shù)器(BRC)確定。例3.165

STM#99,BRC RPTBend_block-1;end_block-1=BottomofBlock重復(fù)指令舉例例3.166

STM#99,BRC RPTBDend_block-1MCDMPOINTER,AR1;初始化指針,end_block-1為塊底部重復(fù)指令舉例重復(fù)指令功能:對目的累加器dst清0,循環(huán)執(zhí)行下一條指令n+1次。例3.167

RPTZA,#1023;下一條指令重復(fù)執(zhí)行1024次。STLA,*AR2+重復(fù)指令舉例堆棧操作指令功能:把一短立即數(shù)偏移k加到SP中。例3.168FRAME10H堆棧指令舉例堆棧操作指令功能:把由SP尋址的數(shù)據(jù)存儲器單元的內(nèi)容轉(zhuǎn)移到由Smem確定的數(shù)據(jù)存儲器單元中。然后SP執(zhí)行加1操作。例3.169POPDDAT10DataMemory堆棧指令舉例堆棧操作指令功能:把由SP尋址的數(shù)據(jù)存儲器單元的內(nèi)容轉(zhuǎn)移到指定的存儲器映射寄存器MMR中。然后SP執(zhí)行加1操作。例3.170POPMAR5DataMemory堆棧指令舉例堆棧操作指令功能:SP減1后,把存儲器單元Smem的內(nèi)容壓入堆棧指針SP指向的數(shù)據(jù)存儲器單元中去。例3.171PSHD*AR3+DataMemory堆棧指令舉例堆棧操作指令功能:堆棧指針SP減1后,把MMR中的內(nèi)容壓入到SP所指的數(shù)據(jù)存儲器單元中去。例3.172PSHMBRCDataMemory堆棧指令舉例混合程序控制指令例3.173IDLE1

處理器保持空閑狀態(tài)直到產(chǎn)生一個(gè)復(fù)位或非屏蔽中斷。例3.174IDLE2

處理器保持空閑狀態(tài)直到產(chǎn)生一個(gè)復(fù)位或外部非屏蔽中斷。例3.175IDLE3

處理器保持空閑狀態(tài)直到產(chǎn)生一個(gè)復(fù)位或外部非屏蔽中斷?;旌铣绦蚩刂浦噶?/p>

功能:修改由Smem所確定的輔助寄存器的內(nèi)容例3.176MAR*AR3+混合程序控制指令舉例混合程序控制指令功能:該指令除了PC執(zhí)行加1操作以外不執(zhí)行任何操作。這在建立流水和執(zhí)行延遲方面比較有用?;旌铣绦蚩刂浦噶罟δ埽簩?shí)現(xiàn)了一個(gè)非屏蔽的軟件復(fù)位例3.178RESET混合程序控制指令舉例混合程序控制指令功能:對ST0和ST1的特定位清0。N指明被修改的狀態(tài)寄存器,SBIT確定被修改的位。例3.179RSBXSXM;SXM的意思是:n=1,SBIT=8混合程序控制指令舉例例3.180RSBX1,8混合程序控制指令功能:狀態(tài)寄存器ST0或ST1的指定位置為1。例3.181SSBXSXM;SXM意味著N=1,SBIT=8混合程序控制指令舉例混合程序控制指令功能:該指令的執(zhí)行是由n的值和所選擇的條件決定的。XC1,ALEQMAR*AR1+ADDA,DAT100例3.182如果累加器的值小于或等于0,加法指令執(zhí)行之前修改AR1。混合程序控制指令舉例裝載和存儲(數(shù)據(jù)傳送)指令一般的裝載和存儲指令(DLD、LD、LD、LDM等;ST、DST、STH、STL、STM、STLM等)條件存儲指令(CMPS、SACCD、SRCCD、STRCD)并行裝載和存儲指令并行裝載和乘法指令并行存儲和加、減法指令并行存儲和乘法指令混合裝載和存儲指令裝載指令是將存儲器內(nèi)容或立即數(shù)送目的寄存器;存儲指令是把源累加器或立即數(shù)送存儲器或寄存器。一般裝載指令共7條:DLD、LD、LD、LDM、LDR、LDU、LTDDataMemory因?yàn)樵撝噶钍且粋€(gè)長操作指令,所以AR3在執(zhí)行后加2。一般裝載指令舉例例3.1DLD*AR3+,B例3.2LD*AR1,ADataMemory一般裝載指令舉例*在所有累加器裝入操作中都會受到SXM的影響。例3.3LD*AR1,ABeforeInstructionAfterInstructionDataMemory一般裝載指令舉例例3.4LD*AR1,TS,BDataMemory一般裝載指令舉例例3.5LD*AR3+,16,ADataMemory一般裝載指令舉例例3.6LD*AR3+,TDataMemory一般裝載指令舉例例3.7LD*AR4,DPDataMemory一般裝載指令舉例例3.12LDMAR4,A一般裝載指令舉例例3.14LDU*AR1,ADataMemory一般裝載指令舉例例3.15LTD*AR3DataMemory一般裝載指令舉例一般存儲指令共6條:DST、ST、STH、STL、STLM、STM例3.16DSTB,*AR3+DataMemory一般存儲指令舉例例3.18STT,*AR7-DataMemory一般存儲指令舉例例3.19STHA,DAT10DataMemory一般存儲指令舉例例3.20STHB,–8,*AR7–一般存儲指令舉例例3.21STLA,DAT11一般存儲指令舉例例3.22ST

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論