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

下載本文檔

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

文檔簡(jiǎn)介

第3章指令系統(tǒng)3.1數(shù)據(jù)尋址方式3.2TMS320C54x的指令系統(tǒng)3.1數(shù)據(jù)尋址方式3.1.1指令的表示方法

1.指令的基本形式與所有的微處理器助記符指令一樣,TMS320C54x的助記符指令也是由操作符和操作數(shù)兩部分組成的。在匯編前,操作符是用助記符表示的,指出指令應(yīng)完成何種操作;操作數(shù)用來描述該指令的操作對(duì)象,它可以是數(shù)據(jù)本身,也可以是指出如何獲取操作數(shù)的信息。助記符指令的基本形式為標(biāo)號(hào),操作符,操作數(shù)1,操作數(shù)2,操作數(shù)3其中,標(biāo)號(hào)是可選項(xiàng),操作數(shù)可以沒有或有多個(gè),其內(nèi)容可以是立即數(shù)、寄存器、程序地址、數(shù)據(jù)地址、I/O地址等。TMS320C54x中源操作數(shù)一般在操作數(shù)1的位置,目的操作數(shù)則在操作數(shù)3的位置,指令執(zhí)行結(jié)果存放到目的操作數(shù)單元中,源操作數(shù)不變。上述指令的執(zhí)行結(jié)果是將立即數(shù)0FFH傳送至累加器A中。這里的LD為操作符,#0FFH為操作數(shù)1,累加器A為操作數(shù)2。2.指令的數(shù)據(jù)類型

TMS320C54x尋址存儲(chǔ)器有兩種基本的數(shù)據(jù)形式:16位數(shù)和32位數(shù)。大多數(shù)指令能夠?qū)ぶ?6位數(shù),只有雙精度和長(zhǎng)字指令才能尋址32位數(shù),如表3-1所示。表3-1尋址32位數(shù)的指令在對(duì)32位數(shù)尋址時(shí),先處理高有效字,然后處理低有效字。如果尋址的第1個(gè)字處在偶地址,那么第2個(gè)字就處在下一個(gè)(較高的)地址;如果第1個(gè)字處在奇地址,那么第2個(gè)字就處在前一個(gè)(較低的)地址,如圖3-1所示。在討論尋址方式時(shí),要用到一些縮寫語,表3-2給出了部分縮寫語的名稱和含義。圖3-132位字的存儲(chǔ)順序表3-2部分尋址方式縮寫語3.1.2數(shù)據(jù)尋址方式

TMS320C54x數(shù)字信號(hào)處理器共有7種尋址方式,如表3-3所示。表3-3TMS320C54x的數(shù)據(jù)尋址方式1.立即尋址立即尋址就是在指令中已經(jīng)包含有執(zhí)行指令所需的操作數(shù)(一個(gè)固定的立即數(shù))。立即尋址方式中的立即數(shù)有兩種數(shù)值形式,數(shù)值的位數(shù)為3、5、8或9位時(shí)為短立即數(shù);數(shù)值的位數(shù)為16位時(shí)是長(zhǎng)立即數(shù)。立即數(shù)可以包含在單字節(jié)或雙字節(jié)指令中,短立即數(shù)在單字節(jié)指令中,長(zhǎng)立即數(shù)在雙字節(jié)指令中。在一條指令中,立即數(shù)的形式是由所使用的指令的類型決定的。在立即尋址方式的指令中,在數(shù)字前面加一個(gè)“#”符號(hào),表示此數(shù)為一個(gè)立即數(shù),否則會(huì)誤認(rèn)為是一個(gè)地址。例如:用一個(gè)十六進(jìn)制數(shù)80H加載累加器A,可以寫成如下指令:

LD#80H,A 執(zhí)行后,A=0080H

如果將立即數(shù)10H先左移4位后,再加載累加器A,可以寫成如下指令:

LD#10H,4,A 執(zhí)行后,A=00000100HLD#32768,B 執(zhí)行后,B=FFFF8000H,狀態(tài)寄存器ST1中的SXM位等于1,數(shù)據(jù)進(jìn)入ALU之前進(jìn)行符號(hào)擴(kuò)展2.絕對(duì)尋址絕對(duì)尋址就是指令中包含要尋址的存儲(chǔ)單元的16位地址,指令按照此地址進(jìn)行數(shù)據(jù)尋址。這種尋址方式為雙字指令,速度慢。絕對(duì)尋址有以下四種形式:(1)數(shù)據(jù)存儲(chǔ)器地址單元(dmad)尋址:用程序標(biāo)號(hào)或數(shù)據(jù)來確定指令中所需要的數(shù)據(jù)空間地址。其指令如下:

MVDKSmem,dmad

MVDMdmad,MMRMVKDdmad,Smem

MVMDMMR,dmad(2)程序存儲(chǔ)器地址單元(pmad)尋址:用一個(gè)符號(hào)或一個(gè)具體的數(shù)來確定程序存儲(chǔ)器中的地址。其指令如下:

FIRS Xmem,Ymem,pmad

MACD Smem,pmad,src

MACP Smem,pmad,src

MVDP Smem,pmad

MVPD pmad,Smem(3)端口地址(PA)尋址:用一個(gè)符號(hào)或一個(gè)常數(shù)來確定外部I/O端口地址。其指令如下:

PORTR PA,Smem

PORTW Smem,PA(4)*(lk)尋址:16位符號(hào)常數(shù)所指的數(shù)據(jù)存儲(chǔ)單元(Smem)中的操作數(shù)。3.累加器尋址累加器尋址是以累加器內(nèi)容作為一個(gè)地址來讀取程序存儲(chǔ)器中的數(shù)據(jù)的。有兩條指令可以用累加器尋址:

READASmem;把累加器A所確定的程序存儲(chǔ)單元中的內(nèi)容傳送到由Smem所指定的數(shù)據(jù)存儲(chǔ)單元中

WRITASmem;將Smem所指定的數(shù)據(jù)存儲(chǔ)單元中的一個(gè)數(shù)傳送到累加器A確定的程序存儲(chǔ)器單元中4.直接尋址直接尋址就是在指令中包含有數(shù)據(jù)存儲(chǔ)器地址(dma)的低7位,用這7位作為偏移地址,并與基地址值(數(shù)據(jù)頁(yè)面指針DP的9位或堆棧指針SP的16位)組成一個(gè)16位的數(shù)據(jù)存儲(chǔ)器地址。直接尋址分為數(shù)據(jù)頁(yè)指針直接尋址和堆棧指針直接尋址兩種。這兩種尋址方式可以在不改變DP或SP的情況下,隨機(jī)地尋找128個(gè)存儲(chǔ)單元中的任何一個(gè)單元地址。直接尋址的優(yōu)點(diǎn)是訪問方便快捷,每條指令只需要一個(gè)字。直接尋址的代碼格式如下:當(dāng)狀態(tài)寄存器ST1中的CPL位等于0時(shí),ST0中的DP值(9位地址)與指令中的7位地址一起形成16位數(shù)據(jù)存儲(chǔ)器地址,如圖3-2所示。圖3-2以DP為基準(zhǔn)的直接尋址因?yàn)镈P值的范圍是0~511,所以以DP為基準(zhǔn)的直接尋址把存儲(chǔ)器分成512頁(yè);又因?yàn)?位dma值的范圍是0~127,所以每頁(yè)有128個(gè)可訪問的單元,也就是說,DP指向512頁(yè)中的一頁(yè),dma就指向該頁(yè)中的特定單元。DP值可以由LD指令裝入,RESET指令將DP賦為0。DP不能通過上電進(jìn)行初始化,必須在程序中對(duì)它進(jìn)行初始化后,才能保證程序正常工作。當(dāng)ST1中的CPL位等于1時(shí),將指令中的7位地址與16位堆棧指針SP相加,形成16位的數(shù)據(jù)存儲(chǔ)器地址,如圖3-3所示。圖3-3以SP為基準(zhǔn)的直接尋址方式直接尋址的句法是利用一個(gè)符號(hào)“@”(加在變量的前面)或者一個(gè)常數(shù)來確定偏移地址值的。例如:(1)數(shù)據(jù)頁(yè)指針直接尋址:x=01FFH,y=0200H。(2)堆棧指針直接尋址:SP=0010H。5.間接尋址在間接尋址中,64K字?jǐn)?shù)據(jù)空間中的任意單元都可以通過一個(gè)輔助寄存器中的16位地址進(jìn)行訪問,同時(shí)可以預(yù)調(diào)整或修改輔助寄存器值,完成循環(huán)尋址和位碼倒序?qū)ぶ返忍厥夤δ?。TMS320C54x有8個(gè)16位輔助寄存器(AR0~AR7)、兩個(gè)輔助寄存器算術(shù)運(yùn)算單元(ARAU0和ARAU1),它們與8個(gè)輔助寄存器一起完成16位無符號(hào)數(shù)算術(shù)運(yùn)算。間接尋址很靈活,它不僅能在單條指令中對(duì)存儲(chǔ)器讀/寫一個(gè)16位操作數(shù),而且還能在單條指令中讀兩個(gè)獨(dú)立的數(shù)據(jù)存儲(chǔ)單元,讀/寫兩個(gè)順序的數(shù)據(jù)存儲(chǔ)單元,或者讀一個(gè)數(shù)據(jù)存儲(chǔ)單元的同時(shí)寫另一個(gè)數(shù)據(jù)存儲(chǔ)單元。1)單數(shù)據(jù)存儲(chǔ)器操作數(shù)間接尋址單數(shù)據(jù)存儲(chǔ)器操作數(shù)間接尋址指令的格式如下:2~0位:3位輔助寄存器域,它定義了尋址所使用的輔助寄存器。ARF由狀態(tài)寄存器ST1中的兼容方式位CMPT來決定。

CMPT=0:標(biāo)準(zhǔn)方式。ARP始終設(shè)置為0,不能修改。

CMPT=1:兼容方式。表3-4列出了16種單數(shù)據(jù)存儲(chǔ)器操作數(shù)的間接尋址功能及其說明。單操作數(shù)間接尋址的硬件框圖如圖3-4所示表3-4單數(shù)據(jù)存儲(chǔ)器操作數(shù)的間接尋址類型圖3-4單操作數(shù)間接尋址的硬件框圖2)位碼倒序?qū)ぶ饭δ芪淮a倒序?qū)ぶ诽岣吡藞?zhí)行速度,在FFT算法中,經(jīng)常要用到位碼倒序?qū)ぶ饭δ?。在這種尋址方式中,AR0存放的整數(shù)N是FFT點(diǎn)數(shù)的一半。一個(gè)輔助寄存器指向一個(gè)數(shù)據(jù)存放的物理單元,當(dāng)使用位倒序?qū)ぶ钒袮R0加到輔助寄存器中時(shí),地址以位倒序的方式產(chǎn)生,即進(jìn)位是從左向右,而不是通常的從右向左。

例如:AR0=00001010B,AR2=01100110B,如執(zhí)行*AR2+0B尋址功能,也就是(01100110)+(0001010),結(jié)果AR2=01101101B。應(yīng)注意,計(jì)算是采用從左到右運(yùn)算的。以16點(diǎn)FFT為例,其運(yùn)算結(jié)果的順序?yàn)閄(0)、X(8)、X(4)、…、X(15),如表3-5所示。表3-5位碼倒序?qū)ぶ反鎯?chǔ)單元地址FFT變換結(jié)果位碼倒序位碼倒序?qū)ぶ方Y(jié)果存儲(chǔ)單元地址FFT變換結(jié)果位碼倒序位碼倒序?qū)ぶ方Y(jié)果0000X(0)0000X(0)1000X(1)0001X(8)0001X(8)1000X(1)1001X(9)1001X(9)0010X(4)0100X(2)1010X(5)0101X(10)0011X(12)1100X(3)1011X(13)1101X(11)0100X(2)0010X(4)1100X(3)0011X(12)0101X(10)1010X(5)1101X(11)1011X(13)0110X(6)0110X(6)1110X(7)0111X(14)0111X(14)1110X(7)1111X(15)1111X(15)3)循環(huán)尋址在卷積、相關(guān)和FIR濾波器等算法中,都需要在存儲(chǔ)器中設(shè)置一個(gè)循環(huán)緩沖器,它是一個(gè)滑動(dòng)窗口,保存著最新的一批數(shù)據(jù)。當(dāng)新的數(shù)據(jù)到來時(shí),緩沖器中最早的數(shù)據(jù)就會(huì)被新的數(shù)據(jù)覆蓋。循環(huán)緩沖器實(shí)現(xiàn)的關(guān)鍵是循環(huán)尋址的實(shí)現(xiàn)。循環(huán)緩沖器大小寄存器(BK)的內(nèi)容確定了循環(huán)緩沖器的大小。BK中的數(shù)值由指令“STM#lk,BK”設(shè)定。長(zhǎng)度為R的緩沖器必須從N位地址的邊界開始(即循環(huán)緩沖器基地址的N個(gè)最低有效位必須為0),N應(yīng)滿足2N>R的最小整數(shù)。循環(huán)緩沖區(qū)的有效基地址(EFB)就是用戶選定的輔助寄存器(ARx)的低N位置0后所得到的值,循環(huán)緩沖區(qū)的的尾地址(EOB)是通過用BK的低N位代替ARx的低N位得到的。循環(huán)緩沖區(qū)的指針index就是ARx的低N位,step就是加到輔助寄存器或從輔助寄存器中減去的值。圖3-5說明了BK、輔助寄存器(ARx)、循環(huán)緩沖區(qū)的尾地址和首地址以及循環(huán)緩沖器的指針關(guān)系。圖3-5循環(huán)尋址的框圖循環(huán)尋址的算法為if0≤index+step≤BK;index=index+step.elseifindex+step≥BK;index=index+step-BK.elseifindex+step<0;index=index+step+BK.4)雙數(shù)據(jù)存儲(chǔ)器操作數(shù)尋址雙數(shù)據(jù)存儲(chǔ)器操作數(shù)尋址用來完成兩個(gè)讀操作,或一個(gè)讀和一個(gè)并行存儲(chǔ)操作。采用這種方式的指令只有一個(gè)長(zhǎng)字,并且只能以間接尋址的方式工作。用Xmem和Ymem來代表這兩個(gè)數(shù)據(jù)存儲(chǔ)器操作數(shù)。在完成兩個(gè)讀操作過程中,Xmem表示讀操作數(shù)(訪問D數(shù)據(jù)總線),Ymem表示讀操作數(shù)(訪問C數(shù)據(jù)總線);在一個(gè)讀操作同時(shí)并行一個(gè)并行存儲(chǔ)操作過程中,Xmem表示讀操作數(shù)(訪問D數(shù)據(jù)總線),Ymem表示一個(gè)寫(訪問E數(shù)據(jù)總線)操作數(shù)。如果源操作數(shù)和目的操作數(shù)指向同一個(gè)單元,則在并行存儲(chǔ)指令中(如ST||LD),讀在寫之前。如果一個(gè)雙操作指令(如ADD)指向同一輔助寄存器,并且這兩個(gè)操作數(shù)的尋址方式不同,那么就按Xmod域所確定的方式來尋址。雙數(shù)據(jù)存儲(chǔ)器操作數(shù)間接尋址的硬件框圖如圖3-6所示。圖3-6雙數(shù)據(jù)存儲(chǔ)器操作數(shù)間接尋址的硬件框圖雙數(shù)據(jù)存儲(chǔ)器操作數(shù)間接尋址的指令格式如下:15?8??76?54?32?1?0操作碼XmodXarYmodYar表3-6雙數(shù)據(jù)存儲(chǔ)器操作數(shù)間接尋址指令代碼的位說明位名稱功能15~8操作碼這8位包含了指令的操作碼7~6Xmod訪問Xmem操作數(shù)的間接尋址方式的類型5~4Xar標(biāo)明包含Xmem地址的輔助寄存器3~2Ymod訪問Ymem操作數(shù)的間接尋址方式的類型1~0Yar標(biāo)明包含Ymem地址的輔助寄存器表3-7由指令的Xar和Yar域選擇的輔助寄存器Xar或Yar域輔助寄存器00AR201AR310AR411AR5

表3-8雙數(shù)據(jù)存儲(chǔ)器操作數(shù)間接尋址類型Xmod或Ymod域操作數(shù)語法功能描述00*ARxaddr=ARxARx是數(shù)據(jù)存儲(chǔ)器地址01*ARx?addr=ARxARx=ARx?1訪問后,ARx中的地址減110*ARx+addr=ARxARx=ARx+1訪問后,ARx中的地址加111*ARx+0%addr=ARxARx=circ(ARx+AR0)訪問后,AR0以循環(huán)尋址的方式加到ARx中6.存儲(chǔ)器映像寄存器尋址存儲(chǔ)器映像寄存器尋址是用來修改存儲(chǔ)器映像寄存器的,但不影響當(dāng)前數(shù)據(jù)頁(yè)指針DP或堆棧指針SP的值。由于DP和SP不需要改變,因此寫一個(gè)寄存器的開銷是最小的。存儲(chǔ)器映像寄存器尋址可以在直接尋址和間接尋址中使用。存儲(chǔ)器映像寄存器(MMR)地址的產(chǎn)生有兩種方法:(1)在直接尋址方式下,不管當(dāng)前DP或SP的值為何值,使數(shù)據(jù)寄存器地址的高9位(MSBs)強(qiáng)制置0,數(shù)據(jù)存儲(chǔ)器地址的低7位(LSBs)則來自于指令字。(2)在間接尋址方式下,只使用當(dāng)前輔助寄存器的低7位作為數(shù)據(jù)存儲(chǔ)器地址的低7位,地址的高9位為0,指定的輔助寄存器的高9位在尋址后被強(qiáng)制置0。圖3-7存儲(chǔ)器映像寄存器尋址7.堆棧尋址系統(tǒng)堆棧用來在中斷或調(diào)用子程序期間自動(dòng)存放程序計(jì)數(shù)器,也能用來存放用戶當(dāng)前的程序環(huán)境或傳遞數(shù)據(jù)值。處理器使用一個(gè)16位存儲(chǔ)器映像寄存器的一個(gè)堆棧指針(SP)來尋址堆棧,SP始終指向存放在堆棧中的最后一個(gè)單元。當(dāng)調(diào)用一個(gè)子程序或一個(gè)中斷響應(yīng)發(fā)生時(shí),PC會(huì)被自動(dòng)壓棧,堆棧指針SP指向存放最后一個(gè)數(shù)據(jù)的堆棧單元;返回時(shí),返回地址從堆棧中彈出并裝入PC。使用堆棧尋址方式訪問堆棧的指令共有4條:

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

PSHM:把一個(gè)存儲(chǔ)器映像寄存器的值壓入堆棧。

POPD:把一個(gè)數(shù)據(jù)存儲(chǔ)器的值彈出堆棧。

POPM:把一個(gè)存儲(chǔ)器映像寄存器的值彈出堆棧。堆棧存放數(shù)據(jù)是從高地址向低地址進(jìn)行的。壓入堆棧時(shí),先減小SP,再將數(shù)據(jù)壓入堆棧;彈出堆棧時(shí),先從堆棧彈出數(shù)據(jù),再增加SP值。圖3-8說明了堆棧操作對(duì)堆棧指針(SP)的影響。圖3-8堆棧操作對(duì)堆棧指針的影響3.2TMS320C54x的指令系統(tǒng)

TMS320C54x可以使用兩套指令系統(tǒng):代數(shù)表達(dá)式形式指令和助記符形式指令。代數(shù)表達(dá)式形式指令易學(xué)易記,運(yùn)算關(guān)系清楚明了;助記符形式指令與計(jì)算機(jī)匯編語言比較接近,便于閱讀和記憶。因?yàn)閮烧叩膮R編器不同,所以兩種形式的指令不能混淆。TMS320C54x指令系統(tǒng)按功能可以分成四種基本類型:●算術(shù)運(yùn)算指令;●邏輯運(yùn)算指令;●程序控制指令;●加載和存儲(chǔ)指令。3.2.1指令系統(tǒng)概述1.指令系統(tǒng)中規(guī)定的符號(hào)與縮寫

TMS320C54x指令系統(tǒng)中規(guī)定了許多符號(hào)與縮寫,在介紹指令系統(tǒng)之前應(yīng)有所了解。為了便于學(xué)習(xí)和使用,在表3-9(略)和表3-10(略)中列出了指令系統(tǒng)和操作碼中的符號(hào)和縮寫,以備查用。2.指令系統(tǒng)中的記號(hào)和運(yùn)算符指令系統(tǒng)中所用的一些記號(hào)見表3-11(略)。指令系統(tǒng)中所用的運(yùn)算符號(hào)見表3-12。表3-12指令系統(tǒng)中所用的運(yùn)算符號(hào)符號(hào)運(yùn)算求值順序+、-、~一元加法、減法、1的補(bǔ)碼從右到左*、/、%乘法、除法、取模從左到右+、-加法、減法從左到右<<、>>左移、右移從左到右<、≤小于、小于或等于從左到右>、≥大于、大于或等于從左到右≠或!=不等于從左到右&按位與運(yùn)算從左到右^按位異或運(yùn)算從左到右|按位或運(yùn)算從左到右3.2.2指令系統(tǒng)分類

TMS320C54x的指令一共有129條,由于操作數(shù)的尋址方式不同,以至于派生有205條指令。TMS320C54x指令系統(tǒng)的分類有兩種方法,一是按指令執(zhí)行時(shí)所需的周期分類;一是按指令的功能分類。按指令的功能可分為四類:算術(shù)運(yùn)算指令、邏輯運(yùn)算指令、程序控制指令以及加載和存儲(chǔ)指令。1.算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令用于完成加、減、乘、除等算術(shù)運(yùn)算,可分為加法指令、減法指令、乘法指令、乘加指令、乘減指令、雙操作數(shù)指令和專用指令。其中,大部分指令只需要一個(gè)指令周期,只有個(gè)別指令需要2~3個(gè)指令周期。1)加法指令指令中表示整數(shù)時(shí),有有符號(hào)數(shù)和無符號(hào)數(shù)兩種格式。TMS320C54x提供了多條用于加法的指令,如ADD、ADDC、ADDM和ADDS,具體說明見表3-13。表3-13加法指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋ADDSmem,srcsrc=src+Smem操作數(shù)加到累加器ADDSmem,TS,srcsrc=src+Smem<<TS操作數(shù)移位后加到累加器ADDSmem,16,src[,dst]dst=src+Smem<<16操作數(shù)左移16位后加到累加器ADDSmem[,SHIFT],src[,dst]dst=src+Smem<<SHIFT操作數(shù)移位后加到累加器ADDXmem,SHFT,srcsrc=src+Xmem<<SHFT操作數(shù)移位后加到累加器ADDXmem,Ymem,dstdst=Xmem<<16+Ymem<<16兩個(gè)操作數(shù)分別左移16位,然后相加

ADD#lk[,SHFT],src[,dst]dst=src+#lk<<SHFT長(zhǎng)立即數(shù)移位后加到累加器ADD#lk,16,src[,dst]dst=src+#lk<<16長(zhǎng)立即數(shù)左移16位后加到累加器ADDsrc[,SHIFT][,dst]dst=dst+src<<SHIFT累加器移位后相加ADDsrc,ASM[,dst]dst=dst+src<<ASM累加器按ASM移位后相加ADDCSmem,srcsrc=src+Smem+C操作數(shù)帶進(jìn)位加至累加器ADDM#lk,SmemSmem=Smem+#lk長(zhǎng)立即數(shù)加至存儲(chǔ)器中ADDSSmem,srcsrc=src+uns(Smem)符號(hào)位不擴(kuò)展的加法

ADD指令有10種句法。如果目的累加器dst被指定,則結(jié)果存放在dst中;如果沒有被指定,則結(jié)果存放在源累加器src中。移位操作數(shù)的范圍為?16≤SHIFT≤15,0≤SHFT≤15。正數(shù)為左移位,左移位低位添0,高位受SXM位影響。如果SXM=1,則高位進(jìn)行符號(hào)擴(kuò)展;如果SXM=0,則高位清零。負(fù)數(shù)為右移位,受SXM位影響。如果SXM=1,則高位進(jìn)行符號(hào)擴(kuò)展;如果SXM=0,則高位清零?!纠?】ADD*AR3+,14,A

指令執(zhí)行前

指令執(zhí)行后A0000001200HA0005401200HC1C0AR30100HAR30101HSXM1SXM1數(shù)據(jù)存儲(chǔ)器

0100H1500H0100H1500H【例2】ADDA,-8,B

指令執(zhí)行前

指令執(zhí)行后A0005401200HA0005401200HB0000001800HB0000055812HC1C0【例3】ADD#4568H,8,A,B

指令執(zhí)行前

指令執(zhí)行后A0000001200HA0000001200HB0000001800HB0000457A00HC1C0【例4】ADD*AR2+,*AR2-,A

指令執(zhí)行前

指令執(zhí)行后A0000001200HA0028000000HC1C0AR20100HAR20101H數(shù)據(jù)存儲(chǔ)器

00FFH1300H00FFH1300H0100H1400H0100H1400H0101H1500H0101H1500H【例5】ADDC*+AR2(5),A;不受SXM位影響

指令執(zhí)行前

指令執(zhí)行后A0000000030HA0000000045HC1C0AR20100HAR20105H數(shù)據(jù)存儲(chǔ)器

0100H0000H0100H0000H0105H0014H0105H0014H【例6】ADDM#123BH,*AR4+;該指令不能循環(huán)執(zhí)行

指令執(zhí)行前

指令執(zhí)行后AR40100HAR40101H數(shù)據(jù)存儲(chǔ)器

0100H0014H0100H124FH【例7】ADDM#0F088H,*AR2+

指令執(zhí)行前

指令執(zhí)行后VOM1VOM1SXM1SXM1AR20105HAR20106H數(shù)據(jù)存儲(chǔ)器

0105H8007H0105H8000H

【例8】ADDS*AR2-,B;無論SXM為何值,都不進(jìn)行符號(hào)擴(kuò)展

指令執(zhí)行前

指令執(zhí)行后B0000000003HB000000F004HCxC0AR20106HAR20105H數(shù)據(jù)存儲(chǔ)器

0106HF001H0106HF001H2)減法指令

TMS320C54x中減法指令有許多,如SUB、SUBB、SUBC和SUBS,具體說明見表3-14。其中,SUBS是無符號(hào)數(shù)的減法運(yùn)算,SUBB是帶借位的減法運(yùn)算,而SUBC是含條件的移位減。在TMS320C54x中,沒有專門的除法指令,要實(shí)現(xiàn)除法運(yùn)算一般有兩種方法:一種方法是用乘法進(jìn)行,如要除以某個(gè)數(shù),可以先求出該數(shù)的倒數(shù),再乘以其倒數(shù);另一種方法是用SUBC指令,再重復(fù)16次減法運(yùn)算,可實(shí)現(xiàn)兩個(gè)無符號(hào)數(shù)的除法運(yùn)算。減法指令中狀態(tài)位與加法指令中的基本相同。表3-14減法指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋SUBSmem,srcsrc=src-Smem從累加器中減去一個(gè)操作數(shù)SUBSmem,TS,srcsrc=src-Smem<<TS從累加器中減去移位后的操作數(shù)SUBSmem,16,src[,dst]dst=src-Smem<<16從累加器中減去左移16位后的操作數(shù)SUBSmem[,?SHIFT],?src[,dst]dst=src-Smem<<SHIFT操作數(shù)移位后與累加器相減

操作符操作數(shù)代數(shù)表達(dá)式注釋SUBXmem,SHFT,srcsrc=src-Xmem<<SHFT操作數(shù)移位后與累加器相減SUBXmem,Ymem,dstdst=Xmem<<16-Ymem<<16兩個(gè)操作數(shù)分別左移16位再相減SUB#lk[,SHFT],src[,dst]dst=src-#lk<<SHFT長(zhǎng)立即數(shù)移位后與累加器相減SUB#lk,16,src[,dst]dst=src-#lk<<16長(zhǎng)立即數(shù)左移16位后與累加器相減SUBsrc[,SHIFT][,dst]dst=dst-src<<SHIFT源累加器移位后與目的累加器相減SUBsrc,ASM[,dst]dst=dst-src<<ASM源累加器按ASM移位后與目的累加器相減SUBBSmem,srcsrc=src-Smem-帶借位的減法SUBCSmem,srcif(src-Smem<<15)≥0src=(src-Smem<<15)<<1+1elsesrc=src<<1有條件減法SUBSSmem,srcsrc=src-uns(Smem)符號(hào)位不擴(kuò)展的減法【例9】SUB#12345,8,A,B

指令執(zhí)行前

指令執(zhí)行后A0000001200HA0000001200HB0000001800HBFFFFCFD900HCXC0SXM1SXM1

【例10】LD#8,DP ;使頁(yè)面指針DP=8 LD#0006H,A ;加載A累加器

SSBXC ;置借位位C為1

SUBB@5,A ;完成帶借位的減法運(yùn)算。數(shù)據(jù)地址=0405H,為直接尋址

指令執(zhí)行前

指令執(zhí)行后A0000000006HAFFFFFFFFFEHC1C0DP008HDP008H數(shù)據(jù)存儲(chǔ)器

0405H0008H0405H0008H【例11】利用SUBC完成整除法,41H÷7H=9H,余數(shù)是2H。LD #0041H,B ;將被除數(shù)41H裝入累加器B的低16位

STM #0100H,AR2 ;寄存器AR2=0100HSTM #0110H,AR3 ;寄存器AR3=0110HST #0007H,*AR2 ;設(shè)置AR2寄存器的內(nèi)容,(AR2)=0007HRPT #15 ;重復(fù)SUBC指令15+1次

SUBC*AR2,B;使用SUBC指令完成除法運(yùn)算

STLB,*AR3+;將商(累加器B的低16位)存入變量AR3所指地址的數(shù)據(jù)單元,AR3+1→AR3STHB,*AR3;將余數(shù)(累加器B的高16位)存入變量AR3所指地址的數(shù)據(jù)單元

SUBC指令重復(fù)執(zhí)行前和最后一條指令執(zhí)行完后各寄存器的狀態(tài)如下:

指令執(zhí)行前

指令執(zhí)行后B0000000041HB0000020009HCXC1AR20100HAR20100HAR30110HAR30111H數(shù)據(jù)存儲(chǔ)器

0100H0007H0100H0007H0110H0000H0110H0009H0111H0000H0111H0002H【例12】商為整數(shù)的除法:0.44÷(-0.22)=-2的程序段。 .bss num,1 .bss den,1 .bss quot,1 .datatable: .word 44*32768/100 .word -22*32768/100 .textstart: STM #num,AR1 ;把被除數(shù)的地址送入AR1中

RPT #1 ;把下一條指令重復(fù)執(zhí)行2次

MVPD table,*AR1+ ;把被除數(shù)和除數(shù)送進(jìn)數(shù)據(jù)存儲(chǔ)單元

LD @den,16,A;將除數(shù)裝入A累加器的高16位

MPYA @num ;利用乘法操作確定商的符號(hào)

ABS A ;將除數(shù)取絕對(duì)值

STH A,@den ;將除數(shù)絕對(duì)值放回原位

LD @num,A ;將被除數(shù)裝入A累加器的低16位

ABS A ;將被除數(shù)取絕對(duì)值

RPT #15 ;16次減法循環(huán),完成除法

SUBC @den,A XC 1,BLT ;如果B<0,則商為負(fù)數(shù),執(zhí)行NEG指令,否則跳;過NEG指令

NEG A STL A,@quot;保存結(jié)果done: B done .end結(jié)果y=FFFEH=-2?!纠?3】商為小數(shù)的除法:44÷(-176)=-0.25的程序段。 .bss num,1 .bss den,1 .bss quot,1 .datatable: .word 44 .word -176 .textstart: STM

#num,AR1 RPT

#1 MVPD table,*AR1+ LD @den,16,A MPYA @num ABS A STH A,@den LD @num,16,A ;將被除數(shù)裝入A累加器的高16位

ABS A RPT #14;15次減法循環(huán),完成除法

SUBC@den,A XC 1,BLT NEG A STL A,@quotdone: B done .end結(jié)果y=E000H=-0.25。3)乘法指令

TMS320C54x中有大量的乘法運(yùn)算指令,其結(jié)果都是32位,放在A或B累加器中,如表3-15所示。乘數(shù)在TMS320C54x的乘法指令中的使用很靈活,可以是T寄存器、立即數(shù)、存儲(chǔ)單元以及A或B累加器的高16位。如果是無符號(hào)數(shù)相乘,則使用一條專用于無符號(hào)數(shù)相乘的指令,即MPYU指令,其他指令都是有符號(hào)數(shù)的乘法。表3-15乘法指令的說明操作符操

數(shù)代數(shù)表達(dá)式注

釋MPYSmem,dstdst=T×SmemT寄存器值與操作數(shù)相乘MPYRSmem,dstdst=rnd(T×Smem)T寄存器值與操作數(shù)相乘(帶舍入)MPYXmem,Ymem,dstdst=Xmem×Ymem,T=Xmem兩個(gè)操作數(shù)相乘MPYSmem,#lk,dstdst=Smem×#lk,T=Smem長(zhǎng)立即數(shù)與操作數(shù)相乘MPY#lk,dstdst=T×#lkT寄存器值與長(zhǎng)立即數(shù)相乘MPYAdstdst=T×AT寄存器值與累加器A的高位相乘MPYASmemB=Smem×A,T=Smem操作數(shù)與累加器A的高位相乘MPYUSmem,dstdst=uns(T)×uns(Smem)兩無符號(hào)數(shù)相乘SQURSmem,dstdst=SmemvSmem,T=Smem操作數(shù)的平方SQURA,dstdst=A×A累加器A的高位平方【例14】實(shí)現(xiàn)整數(shù)乘法。LD #0030H,A ;將0030H裝入累加器ASTM #0100H,AR2 ;AR2=0100HST #2000H,*AR2 ;(AR2)=2000HRSBX FRCT ;清FTCT標(biāo)志位,準(zhǔn)備整數(shù)乘LD #2,DP ;DP=002HLD 0,T ;將AR2中的內(nèi)容2000H裝入T寄存器MPY #-2,A ;完成2000H與0FFFEH相乘,結(jié)果放入A累加器(32位),;A=FFFFFFC000H【例15】實(shí)現(xiàn)小數(shù)乘法。

SSBX FRCT ;置FRCT標(biāo)志位,準(zhǔn)備小數(shù)乘法

LD temp1,16,A;將變量temp1裝入累加器A的高16位MPYA temp2

;完成temp2與累加器A的高16位相乘,結(jié)果放入B累加器,;并將temp2裝入T寄存器STH temp3;將乘積結(jié)果的高16位存入變量temp34)乘加指令乘加指令完成一個(gè)乘法運(yùn)算,將乘積再與源累加器的內(nèi)容相加。指令中使用R后綴的,其運(yùn)算結(jié)果要進(jìn)行湊整。表3-16是對(duì)乘加指令的說明。表3-16乘加指令的說明操作符操

數(shù)代數(shù)表達(dá)式注

釋MACSmem,srcsrc=src+T×SmemT寄存器值與操作數(shù)相乘后加到累加器MACXmem,Ymem,src[,dst]dst=src+Xmem×Ymem,T=Xmem兩個(gè)操作數(shù)相乘后加到累加器MAC#lk,src[,dst]dst=src+T×#lk長(zhǎng)立即數(shù)與T寄存器值相乘后加到累加器MACSmem,#lk,src[,dst]dst=src+Smem×#lk,T=Smem長(zhǎng)立即數(shù)與操作數(shù)相乘后加到累加器MACRSmem,srcsrc=rnd(src+T×Smem)T寄存器值與操作數(shù)相乘后加到A(帶舍入)MACRXmem,Ymem,src[,dst]dst=rnd(src+Xmem×Ymem),T=Xmem兩個(gè)操作數(shù)相乘后加到累加器(帶舍入)MACASmem[,B]B=B+Smem×A,T=Smem操作數(shù)與累加器A的高位相乘后加BMACAT,src[,dst]dst=src+T×AT與A的高位相乘后再累加MACARSmem[,B]B=rnd(B+Smem×A)T=Smem操作數(shù)與A的高位相乘后再加B(帶舍入)MACART,src[,dst]dst=rnd(src+T×A)T與A的高位相乘后再累加MACDSmem,pmad,srcsrc=src+Smem×pmad,T=Xmem,Smem=Smem+1帶延時(shí)的操作數(shù)與程序存儲(chǔ)器值相乘后再累加MACPSmem,pmad,srcsrc=src+Smem×pmad,T=Xmem操作數(shù)與程序存儲(chǔ)器值相乘后再累加MACSUSmem,Ymem,srcsrc=src+uns(Smem)×Ymem,T=Xmem無符號(hào)數(shù)與有符號(hào)數(shù)相乘后再累加【例16】MAC#345H,A,B

指令執(zhí)行前

指令執(zhí)行后A0000001000HA0000001000HB0000000000HB00000D2400HT0400HT0400HFRCT0FRCT0【例17】MAC#345H,A,B

指令執(zhí)行前

指令執(zhí)行后A0000001000HA0000001000HB0000000000HB00001A3800HT0400HT0400HFRCT1FRCT1【例18】MAC*AR3+,*AR4+,A,B

指令執(zhí)行前

指令執(zhí)行后A0000001000HA0000001000HB0000000004HB000C4C10C0HT0008HT5678HFRCT1FRCT1AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲(chǔ)器

0100H5678H0100H5678H0200H1234H0200H1234H【例19】MACR*AR3+,*AR4+,A,B

指令執(zhí)行前

指令執(zhí)行后A0000001000HA0000001000HB0000000004HB000C4C0000HT0008HT5678HFRCT1FRCT1AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲(chǔ)器

0100H5678H0100H5678H0200H1234H0200H1234H【例20】MACAT,A,B

指令執(zhí)行前

指令執(zhí)行后A0012340000HA0012340000HB0000020000HB0012CF4BA0HT0444HT0444HFRCT1FRCT1【例21】MACAT,B,B

指令執(zhí)行前

指令執(zhí)行后A0012340000HA0012340000HB0000020000HB00009D4BA0HT0444HT0444HFRCT1FRCT1【例22】MACD*AR2-,COEFFS,A

指令執(zhí)行前

指令執(zhí)行后A0000770000HA00007D0B44HT0008HT0055HFRCT0FRCT0AR20100HAR200FFH程序存儲(chǔ)器

COEFFS1234HCOEFFS1234H數(shù)據(jù)存儲(chǔ)器

0100H0055H0100H0055H0101H0066H0101H0055H【例23】MACSU*AR3+,*AR4+,A

指令執(zhí)行前

指令執(zhí)行后A0000001000HA0009A0AA84HT0008HT8765HFRCT0FRCT0AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲(chǔ)器

0100H8765H0100H8765H0200H1234H0200H1234H

【例24】MACSU*AR3+,*AR4+,A

指令執(zhí)行前

指令執(zhí)行后A0000001000HAFFF76CAA84HT0008HT1234HFRCT0FRCT0AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲(chǔ)器

0100H1234H0100H1234H0200HFFFF8765H0200H8765H5)乘減指令乘減指令完成從累加器B或源累加器src或目的累加器dst中減去T寄存器或一個(gè)操作數(shù)與另一個(gè)操作數(shù)的乘積,結(jié)果存放在累加器B或dst或src中。表3-17是對(duì)乘減指令的說明。

表3-17乘減指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋MASSmem,srcsrc=src?T×Smem從src中減去T與操作數(shù)的乘積MASRSmem,srcsrc=uns(src?T×Smem)從src中減去T與操作數(shù)的乘積(帶舍入)MASXmem,Ymem,src[,dst]dst=src?Xmem×Ymem,T=Xmem從src中減去兩操作數(shù)的乘積MASRXmem,Ymem,src[,dst]dst=rnd(src?Xmem×Ymem),T=Xmem從src中減去兩操作數(shù)的乘積(帶舍入)MASASmem[,B]B=B?Smem×A,T=Smem從B中減去操作數(shù)與A高位的乘積MASAT,src[,dst]dst=src?T×A從src中減去T與A高位的乘積MASART,src[,dst]dst=rnd(src?T×A)從src中減去T與A高位的乘積(帶舍入)SQURASmem,srcsrc=src+Smem×Smem,T=Smem平方后累加SQURSSmem,srcsrc=src?Smem×Smem,T=Smem平方后作減法【例25】MAS*AR3+,*AR4+,A,B

指令執(zhí)行前

指令執(zhí)行后A0000001000HA0000001000HB0000000004HBFFF3B40F40HT0008HT5678HFRCT1FRCT1AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲(chǔ)器

0100H5678H0100H5678H0200H1234H0200H1234H【例26】MASRAR3+,*AR4+,A,B

指令執(zhí)行前

指令執(zhí)行后A0000001000HA0000001000HB0000000004HBFFF3B40000HT0008HT5678HFRCT1FRCT1AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲(chǔ)器

0100H5678H0100H5678H0200H1234H0200H1234H【例27】編制計(jì)算

y=0.1*0.8+(-0.2)*0.6+(-0.3)*(-0.9)程序段。.bss x,3 .bss a,3 .bss y,1 .datatable: .word 1*32768/10,-2*32768/10,-3*32768/10 .word 8*32768/10,6*32768/10,-9*32768/10 .textstart: STM #table,AR1;AR1指向程序地址table STM #x,AR2;AR2指向x STM #5,AR0 LD #0,A loop: LD *AR1+,A ;從程序存儲(chǔ)單元向數(shù)據(jù)存儲(chǔ)單元傳送6個(gè)數(shù)據(jù)

STL A,*AR2+

BANZloop,*AR0-

;AR0≠0,執(zhí)行標(biāo)號(hào)loop,否則執(zhí)行下一條指令

SSBX FRCT CALL SUMend: B endSUM: STM #a,AR3 ;被乘數(shù)單元

STM #x,AR4 ;乘數(shù)單元

RPTZ A,#2 ;重復(fù)執(zhí)行下條指令3次,使累加器A清零

MAC *AR3+,*AR4+,A STH A,@y RET .end結(jié)果y=1D70H=0.23。6)雙操作數(shù)指令雙操作數(shù)指令中有一個(gè)操作數(shù)Lmem是長(zhǎng)數(shù)據(jù)存儲(chǔ)操作數(shù),該指令為雙長(zhǎng)字(32位)的指令。如DADD指令,它在C16的控制下完成一個(gè)32位的加法運(yùn)算或兩個(gè)16位的加法運(yùn)算。當(dāng)C16=0時(shí),指令以雙精度(32位)方式執(zhí)行;當(dāng)C16=1時(shí),指令以雙16位方式執(zhí)行。表3-18是對(duì)雙操作數(shù)指令的說明。表3-18雙操作數(shù)指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋DADDLmem,src,[dst]ifC16=0dst=Lmem+srcIfC16=1

dst(39~16)=Lmem(31~16)+src(31~16)dst(15~0)=Lmem(15~0)+src(15~0)雙精度/雙16位數(shù)加到累加器DADSTLmem,dstifC16=0dst=Lmem+(T<<16+T)ifC16=1dst(39~16)=Lmem(31~16)+Tdst(15~0)=Lmem(15~0)-T雙精度/雙16位數(shù)與T寄存器值相加/減DRSUBLmem,srcifC16=0dst=Lmem-src

ifC16=1

src(39~16)=Lmem(31~16)-src(31~16)src(15~0)=Lmem(15~0)-src(15~0)雙精度/雙16位數(shù)減去累加器DSADTLmem,dstifC16=0dst=Lmem-(T<<16+T)ifC16=1dst(39~16)=Lmem(31~16)-Tdst(15~0)=Lmem(15~0)+T長(zhǎng)立即數(shù)與T寄存器值相加/減DSUBLmem,srcifC16=0src=src-Lmem

ifC16=1

src(39~16)=src(31~16)-Lmem(31~16)

src(15~0)=src(15~0)-Lmem(15~0)從累加器中減去雙精度/雙16位數(shù)DSUBTLmem,srcifC16=0dst=Lmem-(T<<16+T)ifC16=1dst(39~16)=Lmem(31~16)-Tdst(15~0)=Lmem(15~0)-T從長(zhǎng)立即數(shù)中減去T寄存器值【例28】DADD*AR3+,A,B

指令執(zhí)行前

指令執(zhí)行后A0056788933HA0056788933HB0000000000HB006BAD1D89HAR30100HAR30102HC160C160數(shù)據(jù)存儲(chǔ)器

0100H1534H0100H1534H0101H9456H0101H9456H【例29】DADD*AR3-,A,B

指令執(zhí)行前

指令執(zhí)行后A0056788933HA0056788933HB0000000000HB006BAC1D89HAR30100HAR300FEHC161C161數(shù)據(jù)存儲(chǔ)器

0100H1534H0100H1534H0101H9456H0101H9456H7)專用指令在TMS320C54x中,許多專用指令用來完成一些特殊的操作,這樣不僅可以大大提高編寫程序的速度,縮短程序的長(zhǎng)度,還避免了匯編中為實(shí)現(xiàn)一種功能而需要多條語句的弊端,減少了指令執(zhí)行的周期。表3-19是對(duì)專用指令的說明。表3-19專用指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋ABDSTXmem,YmemB=B+∣A(32~16)∣A=(Xmem-Ymem)<<16求絕對(duì)值A(chǔ)BSsrc,[dst]dst=∣src∣累加器取絕對(duì)值CMPLsrc,[dst]dst=累加器取反DELAYSmem(Smem+1)=Smem存儲(chǔ)器單元延遲EXPsrcT=符號(hào)位所在的位數(shù)(src)-8求累加器的指數(shù)FIRSXmem,Ymem,pmadB=B+A(32~16)

pmad

A=(Xmem+Ymem)<<16對(duì)稱有限沖擊響應(yīng)濾波器LMSXmem,YmemB=B+Xmem

YmemA=A+Xmem<<16+215求最小均方值操作符操

數(shù)代數(shù)表達(dá)式注

釋MAXdstdst=max(A,B)求累加器的最大值MINdstdst=min(A,B)求累加器的最小值NEGsrc,[dst]dst=-src累加器變負(fù)NORMsrc,[dst]dst=src<<TSdst=norm(src,TS)歸一化POLYSmemB=Smem<<16A=rnd(A(32~16)

T+B)求多項(xiàng)式的值RNDsrc,[dst]dst=src+215累加器舍入運(yùn)算SATsrc飽和運(yùn)算(src)對(duì)累加器的值做飽和計(jì)算SQDSTXmem,YmemB=B+A(32~16)×A(32~16)A=(Xmem-Ymem)<<16求兩點(diǎn)之間距離的平方【例30】ABDST*AR3+,*AR4+

指令執(zhí)行前

指令執(zhí)行后AFFABCD0000HAFFFFAB0000HB0000000000HB0000005433HAR30100HAR30101HAR40200HAR40201HFRCT0FRCT0數(shù)據(jù)存儲(chǔ)器

0100H0055H0100H0055H0200H00AAH0200H00AAH【例31】FIRS*AR3+,*AR4+,COEFFS

指令執(zhí)行前

指令執(zhí)行后A0000770000HA0000FF0000HB0000000000HB000008762CHAR30100HAR30101HAR40200HAR40201HFRCT0FRCT0數(shù)據(jù)存儲(chǔ)器

0100H0055H0100H0055H0200H00AAH0200H00AAH程序存儲(chǔ)器

COEFFS1234HCOEFFS1234H2.邏輯指令按照功能的不同可將邏輯指令分為五組,即與指令(AND)、或指令(OR)、異或指令(XOR)、移位指令(ROL)和測(cè)試指令(BITF)。根據(jù)操作數(shù)的不同,指令的執(zhí)行需要1~2個(gè)指令周期。前三組指令與計(jì)算機(jī)匯編語言中邏輯指令一樣,是按位進(jìn)行操作的。1)與邏輯運(yùn)算指令表3-20是對(duì)與邏輯運(yùn)算指令的說明。表3-20與邏輯運(yùn)算指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋ANDSmem,srcsrc=src&Smem操作數(shù)和累加器相與AND#lk[,SHFT],src[,dst]dst=src&#lk<<SHIFT長(zhǎng)立即數(shù)移位后和累加器相與AND#lk,16,src[,dst]dst=src&#lk<<16長(zhǎng)立即數(shù)左移16位后和累加器相與ANDsrc[,SHIFT][,dst]dst=dst&src<<SHIFT源累加器移位后和目的累加器相與ANDM#lk,SmemSmem=Smem&#lk操作數(shù)和長(zhǎng)立即數(shù)相與2)或邏輯運(yùn)算指令表3-21是對(duì)或邏輯運(yùn)算指令的說明。表3-21或邏輯運(yùn)算指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋ORSmem,srcsrc=src∣Smem操作數(shù)和累加器相或OR#lk[,SHFT],src[,dst]dst=src∣#lk<<SHFT長(zhǎng)立即數(shù)移位后和累加器相或OR#lk,16,src[,dst]dst=src∣#lk<<16長(zhǎng)立即數(shù)左移16位后和累加器相或ORsrc[,SHIFT][,dst]dst=dst∣src<<SHIFT源累加器移位后和目的累加器相或ORM#lk,SmemSmem=Smem∣#lk操作數(shù)和長(zhǎng)立即數(shù)相或3)異或邏輯運(yùn)算指令表3-22是對(duì)異或邏輯運(yùn)算指令的說明。表3-22異或邏輯運(yùn)算指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋XORSmem,srcsrc=src∧Smem操作數(shù)和累加器相異或XOR#lk[,SHFT],src[,dst]dst=src∧#lk<<SHFT長(zhǎng)立即數(shù)移位后和累加器相異或XOR#lk,16,src[,dst]dst=src∧#lk<<16長(zhǎng)立即數(shù)左移16位后和累加器相異或XORsrc[,SHIFT][,dst]dst=dst∧src<<SHIFT源累加器移位后和目的累加器相異或XORM#lk,SmemSmem=Smem∧#lk操作數(shù)和長(zhǎng)立即數(shù)相異或4)移位指令表3-23(略)是對(duì)移位指令的說明?!纠?2】SFTAA,-8,B

指令執(zhí)行前

指令執(zhí)行后AFF87650055HAFF87650055HB0043211234HBFFFF876500HCXC0SXM1SXM1

【例33】SFTAA,-8,B

指令執(zhí)行前

指令執(zhí)行后AFF87650055HAFF87650055HB0043211234HB00FF876500HCXC0SXM0SXM0OVM0OVM0OVB0OVB1【例34】SFTLA,-8,B

指令執(zhí)行前

指令執(zhí)行后AFF87650085HAFF87650085HBFF80000000HB0000876500HC0C1【例35】SFTLB,+5

指令執(zhí)行前

指令執(zhí)行后BFFA2001234HB0040024680HC0C05)測(cè)試指令測(cè)試指令可以測(cè)試操作數(shù)的指定位的值,也可以比較兩個(gè)操作數(shù)是否相等。這些指令的執(zhí)行需要1~2個(gè)指令周期。表3-24是對(duì)測(cè)試指令的說明。表3-24測(cè)試指令的說明操作符操作數(shù)代數(shù)表達(dá)式注釋BITXmem,BITCTC=Xmem(15?BITC)測(cè)試指定位BITFSmem,#lkIf(Smem&&#lk)=0thenTC=0ElseTC=1測(cè)試由立即數(shù)指定的位域BITTSmemTC=Smem(15?T(3~0))測(cè)試由T寄存器指定的位CMPMSmem,#lkIfSmem=#lkthenTC=1ElseTC=0比較單數(shù)據(jù)存儲(chǔ)器操作數(shù)和立即數(shù)的值CMPRCC,ARx0≤CC≤3CC=00,測(cè)試ARx=AR0CC=01,測(cè)試ARx<AR0CC=10,測(cè)試ARx>AR0CC=11,測(cè)試ARx≠AR0If(cond)thenTC=1ElseTC=0輔助寄存器ARx與AR0相比較【例36】BIT*AR2+,12

指令執(zhí)行前

指令執(zhí)行后TCXTC1AR20100HAR20101H數(shù)據(jù)存儲(chǔ)器

0100H7688H0100H7688H【例37】CMPR2,AR4

指令執(zhí)行前

指令執(zhí)行后TC1TC0AR0FFFFHAR0FFFFHAR47FFFHAR47FFFH3.程序控制指令程序控制指令用于控制程序的執(zhí)行順序。程序控制指令包括分支轉(zhuǎn)移指令(B、BC)、調(diào)用指令(CALL)、中斷指令(INTR、TRAP)、返回指令(RET)、重復(fù)指令(RPT)、堆棧操作指令(FRAME、POPD)和混合程序控制指令(IDLE、NOP)。這些指令根據(jù)不同情況分別需要1~6個(gè)指令周期。條件分支轉(zhuǎn)移指令或條件調(diào)用、條件返回指令都要用條件來限制分支轉(zhuǎn)移、調(diào)用和返回操作,只有當(dāng)一個(gè)條件或多個(gè)條件得到滿足時(shí)才執(zhí)行指令。條件運(yùn)算符分為兩組,如表3-25所示。表3-25條件運(yùn)算符第1組第2組說明A類B類A類B類C類l

組內(nèi)同一類中不能選兩個(gè)條件l

組內(nèi)類與類之間的條件可以“與/或”l

組與組之間的條件只能“或”l

組1的不同類組合時(shí),必須針對(duì)同一累加器EQ、NEQLEQ、GEQLT、GTOVNOVTCNTCCNCBIONBIO

1)分支轉(zhuǎn)移指令

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論