LDX-DSP原理與應(yīng)用-張衛(wèi)寧-第3章_第1頁
LDX-DSP原理與應(yīng)用-張衛(wèi)寧-第3章_第2頁
LDX-DSP原理與應(yīng)用-張衛(wèi)寧-第3章_第3頁
LDX-DSP原理與應(yīng)用-張衛(wèi)寧-第3章_第4頁
LDX-DSP原理與應(yīng)用-張衛(wèi)寧-第3章_第5頁
已閱讀5頁,還剩90頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

在DSP應(yīng)用中,雖然可以使用C/C++高級語言編程,降低了對編程者的要求,但在一些實時性要求高的場合仍然需要采用匯編編程,以充分利用DSP豐富的硬件資源,發(fā)揮它的實時運算能力。用匯編語言編程,要求編程者對DSP的低層有充分的了解,包括硬件結(jié)構(gòu)、存儲器空間模型和I/O口的組織等。同時又要求編程者對指令系統(tǒng)有深刻的了解。第3章匯編語言指令系統(tǒng)

目錄:

3.1C54x匯編語言指令集介紹

3.2尋址方式

3.3C54x系列DSP的指令系統(tǒng)

第3章匯編語言指令系統(tǒng)

C54x指令集包括:本章介紹C54xDSP的匯編語言指令系統(tǒng)。與其它CPU的指令集相同,匯編語言指令又稱為硬指令,它們在匯編和連接后形成可執(zhí)行的機器碼,供DSP進行運算和其它操作。匯編語言指令匯編偽指令宏指令第3章匯編語言指令系統(tǒng)3.1C54x匯編語言指令集介紹

第3章匯編語言指令系統(tǒng)3.1.1指令系統(tǒng)中的符號、縮寫及操作符

指令系統(tǒng)中采用的符號和縮寫如下列表中所示序號符號含

義1A累加器A2ALU算術(shù)邏輯運算單元3AR泛指通用輔助寄存器4ARx指定某一輔助寄存器AR0~AR75ARP

ST0中的3位輔助寄存器指針6ASM

ST1中的5位累加器移位方式位-16~157B累加器B8BRAF

ST1中的塊重復(fù)操作標志9BRC塊重復(fù)操作寄存器10BITC或bit_code用于測試指令,指定數(shù)據(jù)存儲器單元中的哪一位被測試,取指范圍:0~15第3章匯編語言指令系統(tǒng)序號符號含

義11C16

ST1中的雙16位/雙精度算術(shù)運算方式位12C

ST0中的進位位13CC

2位條件碼(0CC3)14CMPT

ST1中的ARP修正方式位15CPL

ST1中的直接尋址編輯標志位16cond表示一種條件的操作數(shù),用于條件執(zhí)行指令17[d],[D]延時選項18DAB

D地址總線19DAR

DAB地址寄存器20dmad

16位立即數(shù)數(shù)據(jù)存儲器地址(0~65535)3.1.1指令系統(tǒng)中的符號、縮寫及操作符

第3章匯編語言指令系統(tǒng)序號符號含

義21Dmem數(shù)據(jù)存儲器操作數(shù)22DP

ST0中的數(shù)據(jù)存儲器頁指針(0DP511)23Dst目的累加器(A和B)24dst_與dst相反的目的累加器25EAB

E地址總線26EAR

EAB地址總線27extpmad

23位立即程序存儲器地址28FRCT

ST1中的小數(shù)方式位29hi(A)累加器的高階位(AH或BH)30HM

ST1中的保持方式位3.1.1指令系統(tǒng)中的符號、縮寫及操作符

第3章匯編語言指令系統(tǒng)序號符號含

義31IFR中斷標志寄存器32INTM

ST1中的中斷屏蔽位33K少于9位的短立即數(shù)34k3

3位立即數(shù)(0k37)35k5

5位立即數(shù)(-16k515)36k9

9位立即數(shù)(0k9511)37lk

16位長立即數(shù)38Lmem利用長字尋址的32位單數(shù)據(jù)存儲器操作數(shù)39Mmr,MMR存儲器映像寄存器40MMRx,MMRy存儲器映像寄存器,AR0~AR7或SP3.1.1指令系統(tǒng)中的符號、縮寫及操作符

第3章匯編語言指令系統(tǒng)序號符號含

義41n

XC指令后面的字數(shù),取1或242N指定狀態(tài)寄存器,N=0為ST0,N=1為ST143OVA

ST0中的累加器A溢出標志44OVB

ST0中的累加器B溢出標志45OVdst指定目的累加器(A或B)的溢出標志46OVdst_指定與Ovdst相反的目的累加器的溢出標志47OVsrc指定源累加器(A或B)的溢出標志48OVM

ST1中的溢出方式位49PA

16位立即端口地址(0PA65535)50PAR程序存儲器地址寄存器3.1.1指令系統(tǒng)中的符號、縮寫及操作符

第3章匯編語言指令系統(tǒng)序號符號含

義51PC程序計數(shù)器52pmad

16位立即程序存儲器地址(0pmad65535)53pmem程序存儲器操作數(shù)54PMST處理器工作方式狀態(tài)寄存器55prog程序存儲器操作數(shù)56[R]舍入選項57rnd循環(huán)尋址58RC重復(fù)計數(shù)器59RTN快速返回寄存器60REA塊重復(fù)結(jié)束地址寄存器3.1.1指令系統(tǒng)中的符號、縮寫及操作符

第3章匯編語言指令系統(tǒng)序號符號含

義61RSA塊重復(fù)起始地址寄存器62SBIT用于指定狀態(tài)寄存器位的4位地址(0~15)63SHFT

4位移位值(0~15)64SHIFT

5位移位值(-16~15)65Sind間接尋址的單數(shù)據(jù)存儲器操作數(shù)66Smem

16位單數(shù)據(jù)存儲器操作數(shù)67SP堆棧指針寄存器68src源累加器(A或B)69ST0,ST1狀態(tài)寄存器0,狀態(tài)寄存器170SXM

ST1中的符號擴展方式位3.1.1指令系統(tǒng)中的符號、縮寫及操作符

第3章匯編語言指令系統(tǒng)序號符號含

義71T暫存器72TC

ST0中的測試/控制標志73TOS堆棧頂部74TRN狀態(tài)轉(zhuǎn)移寄存器75TS由T寄存器的5~0位所規(guī)定的移位數(shù)(-16~31)76uns無符號數(shù)77XF

ST1中的外部標志狀態(tài)位78XPC程序計數(shù)器擴展寄存器79Xmem

16位雙數(shù)據(jù)存儲器操作數(shù),用于雙數(shù)據(jù)操作數(shù)指令80Ymem

16位雙數(shù)據(jù)存儲器操作數(shù),用于雙數(shù)據(jù)操作數(shù)指令和單數(shù)據(jù)操作指令3.1.1指令系統(tǒng)中的符號、縮寫及操作符

第3章匯編語言指令系統(tǒng)序號符號含

義81--SP堆棧指針值減182++SP堆棧指針值加183++PC程序計數(shù)器值加13.1.1指令系統(tǒng)中的符號、縮寫及操作符

第3章匯編語言指令系統(tǒng)3.1.1指令系統(tǒng)中的符號、縮寫及操作符

指令系統(tǒng)中的運算符號及優(yōu)先級如下列表中所示序號符號運算功能求值順序1+-~!取正、取負、按位求補、邏輯負

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

從左到右

5<<>>左移、右移從左至右6<小于、小于等于從左至右7>大于、大于等于從左至右8!=不等于從左至右第3章匯編語言指令系統(tǒng)序號符號運算功能求值順序8=等于從左至右9&按位與運算(AND)從左至右10∧

按位異或運算(exclusiveOR)從左至右11|按位或運算(OR)從左至右3.1.1指令系統(tǒng)中的符號、縮寫及操作符

本節(jié)以LD裝載指令為例,說明指令的格式和其它一些有用信息。

匯編語法操作數(shù)指令代碼執(zhí)行狀態(tài)位說明指令字長周期數(shù)

第3章匯編語言指令系統(tǒng)3.1.2匯編語言指令舉例(P61)第3章匯編語言指令系統(tǒng)3.2尋址方式

C54x的尋址方式共有下列7種:立即尋址絕對尋址累加器尋址直接尋址間接尋址存儲器映像寄存器尋址堆棧尋址

立即尋址是指指令中的操作數(shù)是一個立即數(shù),用#表示??墒褂昧⒓磳ぶ返闹噶罴傲⒓磾?shù)的位數(shù)如下表所示:第3章匯編語言指令系統(tǒng)3.2.1立即尋址3位或5位立即數(shù)

8位立即數(shù)

9位立即數(shù)

16位立即數(shù)

LD

FRAMELDRPT

LD

ADDBITFORSTADDMCMPMORMSTMANDLDRPTSUBANDMMACRPTZXORXORM例:LD#4,DP;4->DP指令代碼:EA04h第3章匯編語言指令系統(tǒng)3.2.2絕對尋址第3章匯編語言指令系統(tǒng)絕對尋址是指指令中包含著操作數(shù)的地址。

絕對尋址有下列4種類型:數(shù)據(jù)存儲器(dmad)尋址程序存儲器(pmad)尋址

I/O端口(PA)尋址

*(lk)尋址相關(guān)指令如下表所示:第3章匯編語言指令系統(tǒng)3.2.2絕對尋址絕對尋址方式相關(guān)指令數(shù)據(jù)存儲器(dmad)尋址

MVDKSmem,dmad

MVDMdmad,MMR

MVKDdmad,Smem

MVMDMMR,dmad

程序存儲器(pmad)尋址

FIRSXmem,Ymem,pmad

MACDSmem,pmad,src絕對尋址的地址,通常用一個在程序的初始化中指定的地址標號或符號來指明該數(shù)據(jù)存儲器地址絕對尋址的地址,通常用一個在程序的初始化中指定的地址標號或符號來指明該程序存儲器地址第3章匯編語言指令系統(tǒng)絕對尋址方式相關(guān)指令程序存儲器(pmad)尋址

MACPSmem,pmad,src

MVDPSmem,pmad

MVPDpmad,SmemI/O端口(PA)尋址

PORTRPA,Smem

PORTWSmem,PA

*(lk)尋址

可用于所有支持單數(shù)據(jù)操作數(shù)(Smem)

的指令,通過*(lk)可以尋址數(shù)據(jù)空間的任意地址

3.2.2絕對尋址絕對尋址的地址,通常用一個在程序的初始化中指定的地址標號或符號來指明該IO口地址LD*AR3,ALD*(BUFFER),B該指令的功能是指將標號為BUFFER的數(shù)據(jù)存儲器單元的內(nèi)容送入累加器B.累加器尋址是將累加器A中的內(nèi)容(低16位)作為程序存儲器的地址,完成程序空間和數(shù)據(jù)空間的數(shù)據(jù)訪問的一種方式。

有兩條指令采用這種尋址方式

:第3章匯編語言指令系統(tǒng)3.2.3累加器尋址

累加器尋址指令解釋READASmem

A中內(nèi)容為程序存儲器地址,將該地址中的數(shù)據(jù)送入Smem指定的數(shù)據(jù)存儲器中WRITASmem

將Smem指定的數(shù)據(jù)存儲器中的內(nèi)

容送入A所指出的程序存儲器中

直接尋址是指利用指令中的地址偏移量dma與數(shù)據(jù)頁指針DP或堆棧指針SP組合,找到數(shù)據(jù)空間中的一個16位地址的方式。直接尋址的表示方法是在符號或偏移量前加@。如LD@60h,A

指令代碼格式如下所示:第3章匯編語言指令系統(tǒng)3.2.4直接尋址15~8

7

6~0

操作碼

I=0

數(shù)據(jù)存儲器地址(dmad)

7位直接尋址有兩種產(chǎn)生地址的方法,由ST1中的位CPL來控制CPL=0時

第3章匯編語言指令系統(tǒng)3.2.4直接尋址(基地址+偏移量)直接尋址指令15~876~0操作碼I=0dmad頁指針DP(位于ST0中)9位數(shù)據(jù)頁指針DP高9位低7位16位數(shù)據(jù)存儲器地址9位數(shù)據(jù)頁指針DPdmad0~5110~127可以訪問64K的數(shù)據(jù)空間CPL=1時

第3章匯編語言指令系統(tǒng)3.2.4直接尋址dmad低7位16位數(shù)據(jù)存儲器地址16位堆棧指針SP堆棧指針SPSP+dmad16位SP+dmad直接尋址指令15~876~0操作碼I=0dmad

間接尋址是指通過兩個輔助算術(shù)邏輯單元ARAU0、ARAU1及8個輔助寄存器AR0~AR7,間接獲得數(shù)據(jù)存儲器地址的方式。在這種方式下,輔助寄存器的內(nèi)容就是數(shù)據(jù)空間操作數(shù)的地址。

按照尋址目的可將間接尋址分為:單操作數(shù)尋址雙操作數(shù)尋址第3章匯編語言指令系統(tǒng)3.2.5間接尋址單操作數(shù)尋址

單操作數(shù)間接尋址可以使用所有8個輔助寄存器AR0~AR7存放數(shù)據(jù)空間的Smem地址,并具有16種不同的地址調(diào)整功能。第3章匯編語言指令系統(tǒng)3.2.5間接尋址單操作數(shù)尋址結(jié)構(gòu)圖如下所示:第3章匯編語言指令系統(tǒng)3.2.5間接尋址CAB、DAB、EAB負責傳送數(shù)據(jù)存儲器地址CB、DB、EB負責傳送讀/寫數(shù)據(jù)循環(huán)緩沖區(qū)長度寄存器相對位置輔助寄存器指針輔助算術(shù)邏輯運算單元第3章匯編語言指令系統(tǒng)3.2.5間接尋址單操作數(shù)尋址

地址存放情況及地址調(diào)整功能共16種:(P68)

操作句法功

能說

明*

ARx

地址=ARx

ARx的內(nèi)容為數(shù)據(jù)存儲器地址*

+ARx

ARx=ARx+1

地址=ARx

ARx中的地址加1后,再尋址

*

ARx-

地址=ARx

ARx=ARx-1尋址結(jié)束后,ARx地址減1*

ARx+

地址=ARx

ARx=ARx+1尋址結(jié)束后,ARx地址加1*

ARx-0

地址=ARx

ARx=ARx-AR0

尋址結(jié)束后,從ARx中減去AR0的值第3章匯編語言指令系統(tǒng)3.2.5間接尋址單操作數(shù)尋址操作句法功

能說

明*

ARx+0

地址

=ARx

ARx=ARx+AR0

尋址結(jié)束后,把AR0加到ARx

中*

ARx-0B

地址=ARx

ARx=B(ARx-AR0)尋址結(jié)束后,用位倒序進位的方法從ARx中減去AR0的值

*

ARx+0B

地址=ARx

ARx=B(ARx+AR0)尋址結(jié)束后,用位倒序進位的方法將

AR0加到ARx中*

ARx-%

地址=ARx

ARx=Circ(ARx-1)尋址結(jié)束后,ARx中的地址值按循環(huán)減的方法減1*

ARx+%

地址=ARx

ARx=Circ(ARx+1)尋址結(jié)束后,ARx中的地址值按循環(huán)加的方法加1第3章匯編語言指令系統(tǒng)3.2.5間接尋址單操作數(shù)尋址操作句法功

能說

明*

ARx-0%

地址=ARx

ARx=Circ(ARx-AR0)

尋址結(jié)束后,按循環(huán)減的方法從

ARx中減去AR0中的值

*

ARx+0%

地址=ARx

ARx=Circ(ARx+AR0)

尋址結(jié)束后,按循環(huán)加的方法將AR0中的值加到ARx

*

ARx(lk)

地址=ARx+lk

ARx=ARx以ARx與16位數(shù)之和作為地址,尋址結(jié)束后,ARx中的值不變

*

+ARx(lk)

地址=ARx+lk

ARx=ARx+lk將一個16位帶符號數(shù)加到ARx,然后尋址*

ARx(lk)%

地址=Circ(ARx+lk)

ARx=Circ(ARx+lk)將一個16位帶符號數(shù)按循環(huán)加的方法加至ARx,然后再尋址*

(lk)

地址=(lk)利用16位無符號數(shù)作為地址,尋址數(shù)據(jù)存儲器位反向?qū)ぶ肺环聪驅(qū)ぶ肥菍iT為快速傅立葉變換FFT而設(shè)計的。4位二進制數(shù)的原始地址與位反向地址的對應(yīng)關(guān)系如下表所示:

詳見P69表3-5第3章匯編語言指令系統(tǒng)3.2.5間接尋址(二個關(guān)鍵問題)第3章匯編語言指令系統(tǒng)3.2.5間接尋址正常順序原始地址位反向地址位反向順序00000000001000110008200100100430011110012401000010250101101010601100110670111111014位反向?qū)ぶ?/p>

第3章匯編語言指令系統(tǒng)3.2.5間接尋址正常順序原始地址位反向地址位反向順序81000000119100110019101010010151110111101131211000011313110110111114111001117151111111115位反向?qū)ぶ?/p>

第3章匯編語言指令系統(tǒng)3.2.5間接尋址循環(huán)尋址目的:提高運算速度算法如下:

循環(huán)尋址的算法:If0偏移量+步長<

BK;

偏移量=偏移量+步長;Else

if偏移量+步長

BK;偏移量=偏移量+步長-BK;Else

if偏移量+步長

<0;偏移量=偏移量+步長+BK。①地址指針可由低向高增值變化,當增至最高地址時,能夠自動返回最低地址;②或由高減量變化,當減至最低地址時,可自動返回最高地址。第3章匯編語言指令系統(tǒng)3.2.5間接尋址循環(huán)尋址(P70幾個關(guān)鍵參量)

循環(huán)尋址示意圖如下所示:

循環(huán)緩沖區(qū)長度寄存器②雙操作數(shù)尋址

雙操作數(shù)尋址結(jié)構(gòu)圖如下所示:

第3章匯編語言指令系統(tǒng)3.2.5間接尋址第3章匯編語言指令系統(tǒng)3.2.5間接尋址②雙操作數(shù)尋址

雙操作數(shù)尋址有4種地址存放情況和地址調(diào)整功能:操作碼語法功能

說明

*

ARx地址=ARxARx中的內(nèi)容是數(shù)據(jù)存儲器地址

*

ARx-地址=ARxARx=ARx-1尋址后,ARx的地址減1

*

ARx+地址=ARxARx=ARx+1尋址后,ARx的地址加1

*

ARx+0%地址=ARxARx=circ(ARx+AR0)尋址后,AR0以循環(huán)尋址方式加到ARx中去

存儲器映像寄存器尋址是一種直接訪問存儲器映像寄存器MMR的方式,可以用來修改MMR的值。

有8條指令可以使用存儲器映像寄存器尋址:

第3章匯編語言指令系統(tǒng)3.2.6存儲器映像寄存器尋址第3章匯編語言指令系統(tǒng)3.2.6存儲器映像寄存器尋址存儲器映像寄存器尋址

LDMMMR,dstMVDMdmad,MMRMVMDMMR,dmadMVMMMMRx,MMRy

POPMMMR(出棧)PSHMMMR(入棧)STLMsrc,MMRSTM#lk,MMR

堆棧尋址用于進行數(shù)據(jù)或者MMR的入棧和出棧操作。C54X堆棧是下拉式堆棧,即入棧時地址值減小,而出棧時地址值增加。堆棧指針是16位的存儲器映像寄存器SP,它總是指向棧頂位置。下列4條指令使用堆棧尋址:

第3章匯編語言指令系統(tǒng)3.2.7堆棧尋址堆棧尋址

PSHDSmem

PSHMMMRPOPDSmemPOPMMMR

C54x的匯編語言指令集共有129條基本指令,按完成的功能可以分為6類:第3章匯編語言指令系統(tǒng)3.3C54x系列DSP的指令系統(tǒng)

數(shù)據(jù)存取指令算術(shù)運算指令邏輯運算指令

控制程序轉(zhuǎn)移指令重復(fù)操作指令并行操作指令本節(jié)只介紹非并行的數(shù)據(jù)存取指令,包括:第3章匯編語言指令系統(tǒng)3.3.1數(shù)據(jù)存取指令

加載指令存儲指令

32位長操作數(shù)的加載、存儲指令混合加載和存儲指令以累加器A或B為目標操作數(shù)的LD指令

第3章匯編語言指令系統(tǒng)

加載指令

(LD)以累加器A或B為目標操作數(shù)的LD指令

LDSmem,dstLDSmem,TS,dstLDSmem,16,dstLDSmem[,SHIFT],dstLDXmem,SHFT,dstLD#K,dstLD#lk[,SHFT],dstLD#lk,16,dstLDsrc,ASM[,dst]LDsrc[,SHIFT],dst例3.11LD*AR3,A1)當SXM=0時,進行無符號數(shù)的加載第3章匯編語言指令系統(tǒng)

加載指令

指令執(zhí)行前

A0000000000SXM0AR30200數(shù)據(jù)存儲器

0200H95A6指令執(zhí)行后

A00000095A6SXM0AR30200數(shù)據(jù)存儲器

0200H95A6例3.11LD*AR3,A2)當SXM=1時,進行有符號數(shù)的加載第3章匯編語言指令系統(tǒng)

加載指令

指令執(zhí)行前

A0000000000SXM1AR30200數(shù)據(jù)存儲器

0200H95A6指令執(zhí)行后

AFFFFFF95A6SXM1AR30200數(shù)據(jù)存儲器

0200H95A6例3.11LDA,4,B1)當OVM=0時,對溢出不進行處理,僅通過OVB=1反映溢出第3章匯編語言指令系統(tǒng)

加載指令

指令執(zhí)行前A007FFF8000B000000FFFFOVB0OVM0指令執(zhí)行后A007FFF8000B07FFF80000OVB1OVM0例3.11LDA,4,B2)當OVM=1時,對溢出進行處理(置32位最大的正數(shù))第3章匯編語言指令系統(tǒng)

加載指令

指令執(zhí)行前A007FFF8000B000000FFFFOVB0OVM0指令執(zhí)行后A007FFF8000B007FFFFFFFOVB1OVM1以暫存器T或ST0、ST1的DP、ASM及ARP字段為目標操作數(shù)的LD指令

第3章匯編語言指令系統(tǒng)

加載指令

以暫存器T或ST0、ST1的DP、ASM及ARP字段為目標操作數(shù)的LD指令

LDSmem,TLDSmem,DPLD#k9,DPLD#k5,ASMLD#k3,ARPLDSmem,ASM例3.13LD0,ASM第3章匯編語言指令系統(tǒng)

加載指令

ASM00DP3

數(shù)據(jù)存儲器

0180H1234指令執(zhí)行前指令執(zhí)行后

ASM14DP003

數(shù)據(jù)存儲器

0180H1234為MMR賦值的指令

第3章匯編語言指令系統(tǒng)②存儲指令(ST)

為MMR賦值的指令STLMsrc,MMR;

MMR=src(15-0),將累加器的低16位送入MMR,是1字1周期指令。STM#lk,MMR;

MMR=#lk,將長立即數(shù)送入

MMR,是2字2周期指令。例3.14

STLMA,*AR2(P77)第3章匯編語言指令系統(tǒng)②存儲指令

指令執(zhí)行前

A0012345678AR27315AR5(15h)3F69

指令執(zhí)行后

A0012345678AR20015AR55678

例3.15

STM#1357H,*AR4+

第3章匯編語言指令系統(tǒng)②存儲指令

指令執(zhí)行前

AR00000AR48010指令執(zhí)行后

AR01357AR40011

例3.16

STM#2468H,60H

第3章匯編語言指令系統(tǒng)②存儲指令

指令執(zhí)行前

0060H0000指令執(zhí)行后

0060H2468

STH和STL指令(H表高16位L表低16位)

第3章匯編語言指令系統(tǒng)②存儲指令

STH和

STL指令

STHsrc,Smem將AH或BH內(nèi)容送入SmemSTHsrc,ASM,SmemSTHsrc,SHFT,XmemSTHsrc[,SHIFT],SmemSTLsrc,SmemSTLsrc,ASM,SmemSTLsrc,SHFT,Xmem

STLsrc[,SHIFT],Smem

例3.17設(shè)累加器(A)=FF98765432HSTL A,8,da

第3章匯編語言指令系統(tǒng)②存儲指令

(da)=3200H

STL A,-8,da

STH A,8,da

STH A,-16,da

STH A,-8,da

(da)=7654H

(da)=7654H

(da)=FF98H

(da)=00FFH(SXM=0)

STH A,-16,da

(da)=FFFFH(SXM=1)

第3章匯編語言指令系統(tǒng)③

32位長操作數(shù)的加載、存儲指令及數(shù)據(jù)存放格式

32位長操作數(shù)的加載、存儲指令及數(shù)據(jù)存放格式DLDLmem,dst

在單周期內(nèi)同時利用CAB、CB和DAB、DB總線將32位Lmem

讀入累加器。是1字1周期指令。DSTsrc,Lmem

兩次使用EAB、EB總線將累加器的內(nèi)容分別寫入高16位和低16位數(shù)據(jù)存儲器。是1字2周期指令。

例3-18存放格式對數(shù)據(jù)存儲的影響(P78)

DSTB,*AR3+1)偶地址存放第3章匯編語言指令系統(tǒng)③

32位長操作數(shù)的加載、存儲指令及數(shù)據(jù)存放格式指令執(zhí)行前

B006CACBD90AR30100數(shù)據(jù)存儲器

0100H00000101H0000指令執(zhí)行后

B006CACBD90AR30102數(shù)據(jù)存儲器

0100H6CAC

0101HBD90第3章匯編語言指令系統(tǒng)③

32位長操作數(shù)的加載、存儲指令及數(shù)據(jù)存放格式

2)奇地址存放指令執(zhí)行前

B006CACBD90AR30101數(shù)據(jù)存儲器

0100H00000101H0000指令執(zhí)行后

B006CACBD90AR30103數(shù)據(jù)存儲器

0100HBD90

0101H6CAC例3-19存放格式對數(shù)據(jù)存儲的影響

DLD*AR3+,B1)偶地址存放第3章匯編語言指令系統(tǒng)③

32位長操作數(shù)的加載、存儲指令及數(shù)據(jù)存放格式指令執(zhí)行前

B0000000000AR30100數(shù)據(jù)存儲器

0100H6CAC0101HBD90指令執(zhí)行后

B006CACBD90AR30102數(shù)據(jù)存儲器

0100H6CAC

0101HBD90第3章匯編語言指令系統(tǒng)③

32位長操作數(shù)的加載、存儲指令及數(shù)據(jù)存放格式

2)奇地址存放指令執(zhí)行前

B0000000000AR30101數(shù)據(jù)存儲器

0100H6CAC0101HBD90指令執(zhí)行后

B00BD906CACAR30103數(shù)據(jù)存儲器

0100H6CAC

0101HBD90

C54x的算術(shù)運算指令包括:第3章匯編語言指令系統(tǒng)3.3.2算術(shù)運算指令基本算術(shù)運算指令特殊運算指令雙字(32位)算術(shù)運算指令乘累加和乘累減指令

第3章匯編語言指令系統(tǒng)基本算術(shù)運算指令加法指令操作字數(shù)周期數(shù)

ADDSmem

,src

src=src+Smem

1

1

ADDSmem

,TS,src

src=src+Smem<<TS

1

1

ADDSmem

,16

,src[,dst]

dst=src+Smem<<16

1

1

ADDSmem,[,SHIFT],src[,dst]

dst=src+Smem<<SHIFT

2

2

ADDXmem

,SHFT

,src

src=src+Xmem<<SHFT

1

1

ADDXmem

,Ymem

,dst

dst=Xmem<<16+Ymem<<16

1

1

ADD#lk,[,SHFT],src[,dst]

dst=src+#lk<<SHFT

2

2ADD#lk,16,src[,dst]

dst=src+#lk<<16

2

2

ADDsrc,[,SHIFT][,dst]

dst=dst+src<<SHIFT

1

2

ADDsrc,ASM[,dst]

dst=dst+src<<ASM11

ADDCSmem

,src

src=src+Smem+C

1

1

ADDM#lk,Smem

Smem=Smem+#lk

2

2

ADDSSmem

,src

src=src+uns(Smem)

1

1第3章匯編語言指令系統(tǒng)減法指令操作字數(shù)周期數(shù)

SUBSmem

,src

src=src-Smem

1

1

SUBSmem

,TS,src

src=src-Smem<<TS

1

1

SUBSmem

,16

,src[,dst]

dst=src-Smem<<16

1

1

SUBSmem,[,SHIFT],src[,dst]

dst=src-Smem<<SHIFT

2

2

SUBXmem

,SHFT

,src

src=src-Xmem<<SHFT

1

1

SUBXmem

,Ymem

,dst

dst=Xmem<<16-Ymem<<16

1

1

SUB#lk,[,SHFT],src[,dst]

dst=src-#lk<<SHFT

2

2SUB#lk,16,src[,dst]

dst=src-#lk<<16

2

2

SUBsrc,[,SHIFT][,dst]

dst=dst-src<<SHIFT

1

1

SUBsrc,ASM[,dst]

dst=dst-src<<ASM11

SUBBSmem

,src

src=src-Smem-C

1

1

SUBCSmem

,src

If(src-Smem<<15)>0,

src=(src-Smem<<15)<<1+1Elsesrc=src<<1

1

1

SUBSSmem

,src

src=src-uns(Smem)

1

1基本算術(shù)運算指令第3章匯編語言指令系統(tǒng)乘法指令操作字數(shù)周期數(shù)

MPYSmem

,dst

dst=T*Smem

1

1

MPYRSmem

,dst

dst=rnd(T*Smem)

1

1

MPYXmem

,Ymem

,dst

dst=Xmem

*Ymem,T=Xmem

1

1

MPYSmem

,#lk

,dst

dst=Smem

*#lk

,T=Smem

2

2

MPY#lk

,dst

dst=T*#lk

2

2

MPYA

dst

dst=T*A(32-16)

1

1

MPYASmem

B=Smem*A(32-16),T=Smem

1

1

MPYUSmem

,dst

dst=uns(T)*uns(Smem)

1

1

SQURSmem

,dst

dst=Smem

*Smem,T=Smem

1

1

SQURA,dst

dst=A(32-16)*A(32-16)

1

1基本算術(shù)運算指令第3章匯編語言指令系統(tǒng)②

特殊運算指令特殊運算指令操作字數(shù)周期數(shù)

ABDSTXmem

,Ymem

B

=B

+|A(32-16)|,A=(Xmem-Ymem)<<16

1

1

ABSsrc

[,dst

]

dst

=|src

|11

CMPLsrc

[,dst

]

dst

=src

1

1

DELAYSmem

(Smem

+1)=Smem

1

1

EXPsrc

T=帶符號數(shù)(src)-8

1

1

FIRSXmem

,Ymem

,

Pmad

B=B

–A*Pmad,A=(Xmem+Ymem)<<1623

LMSXmem

,Ymem

B=B+

Xmem

*Ymem,A=(A

+Xmem<<16)+215

1

1第3章匯編語言指令系統(tǒng)②

特殊運算指令特殊運算指令功能字數(shù)周期數(shù)

MAXdst

dst

=max(A,B)

1

1

MINdst

dst

=min(A,B)11

NEGsrc

[,dst

]

dst

=-src

1

1

NORMsrc

[,dst

]

dst

=src<<TS,

dst

=norm(src,T)

1

1

POLYSmem

B=Smem<<16,A=rnd(A

*T

+B

)

1

1

RNDsrc

[,dst

]

dst

=src

+21511

SATsrc

Saturate(src)

1

1

SQDSTXmem

,Ymem

B=B+

A(32-16)*A(32-16)A=(Xmem-Ymem)<<16

1

1第3章匯編語言指令系統(tǒng)③

雙字(32位)算術(shù)運算指令雙字指令操作字數(shù)周期數(shù)C16=0C16=1DADDLmem,src[,dst]dst=

Lmem+srcdst(39~16)=Lmem(31~16)+src(31~16)dst(15~0)=Lmem(15~0)+src(15~0)1

1DADSTLmem,dstdst=

Lmem+(T<<16+T)dst(39~16)=Lmem(31~16)+Tdst(15~0)=Lmem(15~0)–T11DRSUBLmem,srcsrc=

Lmem–srcsrc(39~16)=Lmem(31~16)–src(31~16)src(15~0)=Lmem(15~0)–src(15~0)

1

1第3章匯編語言指令系統(tǒng)③

雙字(32位)算術(shù)運算指令雙字指令操作字數(shù)周期數(shù)C16=0C16=1DSADTLmem,dstdst=

Lmem–(T<<16+T)dst(39~16)=Lmem(31~16)–Tdst(15~0)=Lmem(15~0)+T1

1DSUBLmem,srcsrc=

src–Lmemsrc(39~16)=src(31~16)–mem(31~16)src(15~0)=src(15~0)–mem(15~0)

1

1DSUBTLmem,dstdst=

Lmem–(T<<16+T)dst(39~16)=Lmem(31~16)–Tdst(15~0)=Lmem(15~0)–T

1

1對常用的乘累加指令的分析:

第3章匯編語言指令系統(tǒng)④

乘累加和乘累減指令MAC[R]MACA[R]MACP和MACDMACSUXmem,Ymem,src

指令MACDSmem,pmad,src

的操作框圖如下圖所示:第3章匯編語言指令系統(tǒng)④

乘累加和乘累減指令第3章匯編語言指令系統(tǒng)④

乘累加和乘累減指令指令操作字數(shù)周期數(shù)MACSmem,srcsrc=src+T*Smem

11MACRSmem,srcsrc=rnd(src+T*Smem)11MAC#lk,src[,dst]dst=src+T*#lk

22MACSmem,#lk,src[,dst]dst=src+Smem*#lk,T=Smem22MACXmem,Ymem,src[,dst]dst=src+Xmem*Ymem,T=Xmem11MACRXmem,Ymem,src[,dst]dst=rnd(src+Xmem*Ymem),T=Xmem11MACASmem[,B]B=B+Smem*A(32~16),T=Smem11MACARSmem[,B]B=B+rnd(Smem*A(32~16)),T=Smem11第3章匯編語言指令系統(tǒng)④

乘累加和乘累減指令指令操作字數(shù)周期數(shù)MACAT,src[,dst]

dst=src+T*A(32~16)11MACART,src[,dst]

dst=rnd(src+T*A(32~16))11MACDSmem,pmad,src

src=src+Smem*pmad,T=Smem,(Smem+1)=Smem23MACPSmem,pmad,srcsrc=src+Smem*pmad,T=Smem

23MACSUXmem,Ymem,src

src=src+uns(Xmem)*Ymem,T=Xmem11MASSmem,src

src=src–T*Smem

11MASRSmem,src

src=rnd(src–T*Smem)

11第3章匯編語言指令系統(tǒng)④

乘累加和乘累減指令指令操作字數(shù)周期數(shù)MASXmem,Ymem,src[,dst]dst=src–Xmem*Ymem,T=Xmem

11MASRXmem,Ymem,src[,dst]dst=rnd(src–Xmem*Ymem),T=Xmem

11MASASmem[,B]B=B–Smem*A(32~16),T=Smem

11MASAT,src[,dst]dst=src–T*A(32~16)11MASART,src[,dst]dst=rnd(src–T*A(32~16))11SQURASmem,src

src=src+Smem*Smem,T=Smem

11SQURSSmem,src

src=src–Smem*Smem,T=Smem

11邏輯運算指令包括:第3章匯編語言指令系統(tǒng)3.3.3邏輯運算指令布爾型指令移位指令測試指令

第3章匯編語言指令系統(tǒng)布爾型指令與指令操作字數(shù)周期數(shù)

ANDSmem

,src

src

=src&Smem

1

1

AND#lk[,SHFT],src[,dst]

dst

=src&#lk<<SHFT

2

2AND#lk,16,src[,dst]

dst

=src&#lk<<16

2

2

ANDsrc[,SHIFT][,dst]

dst=dst&src<<SHIFT

1

1

ANDM#lk,Smem

Smem

=Smem&#lk

2

2第3章匯編語言指令系統(tǒng)或指令操作字數(shù)周期數(shù)

ORSmem

,src

src

=src

|

Smem

1

1

OR#lk[,SHFT],src[,dst]

dst

=src

|#lk<<SHFT

2

2OR#lk,16,src[,dst]

dst

=src

|#lk<<16

2

2

ORsrc[,SHIFT][,dst]

dst=dst

|

src<<SHIFT

1

1

ORM#lk,Smem

Smem

=Smem

|#lk

2

2布爾型指令第3章匯編語言指令系統(tǒng)異或指令操作字數(shù)周期數(shù)

XORSmem

,src

src

=src

Smem

1

1

XOR#lk[,SHFT],src[,dst]

dst

=src

#lk<<SHFT

2

2XOR#lk,16,src[,dst]

dst

=src

#lk<<16

2

2

XORsrc[,SHIFT][,dst]

dst=dst

src<<SHIFT

1

1

XORM#lk,Smem

Smem

=Smem

#lk

2

2布爾型指令

移位指令共6條,都是單字單周期指令。第3章匯編語言指令系統(tǒng)②

移位指令指令操作ROLsrc帶進位位C的循環(huán)左移ROLTCsrc帶測試位TC的循環(huán)左移RORsrc帶進位位C的循環(huán)右移SFTAsrc,SHIFT[,dst]

dst=src<<SHIFT{算術(shù)移位}SFTCsrc若

src(31)=src(30)則

src=src<<1{條件移位}SFTLsrc,SHIFT[,dst]

dst=src<<SHIFT{邏輯移位}

帶進位位C的循環(huán)左移ROL移位示意圖如下:

39~32310累加器src保護位第3章匯編語言指令系統(tǒng)②

移位指令C0

帶進位位C的循環(huán)右移ROR移位示意圖如下:

39~32310累加器src保護位第3章匯編語言指令系統(tǒng)②

移位指令C0

帶測試位TC的循環(huán)左移ROLTC移位示意圖如下:

39~32310累加器src保護位第3章匯編語言指令系統(tǒng)②

移位指令TC0

C邏輯移位指令SFTLsrc,SHIFT的操作示意圖:

0﹤SHIFT≤15時

39~32310累加器src保護位第3章匯編語言指令系統(tǒng)②

移位指令0

C0

邏輯移位指令SFTLsrc,SHIFT的操作示意圖:

-16≤

SHIFT≤0時

39~32310累加器src保護位第3章匯編語言指令系統(tǒng)②

移位指令0

C0

第3章匯編語言指令系統(tǒng)②

移位指令邏輯移位指令SFTLsrc,SHIFT的操作示意圖:

SHIFT=0時C0

算術(shù)移位指令SFTAsrc,SHIFT的操作示意圖:

0﹤SHIFT≤15時

39

0累加器src第3章匯編語言指令系統(tǒng)②

移位指令C0

算術(shù)移位指令SFTAsrc,SHIFT的操作示意圖:

-16≤SHIFT≤0,且SXM=039

0累加器src第3章匯編語言指令系統(tǒng)②

移位指令0

C算術(shù)移位指令SFTAsrc,SHIFT的操作示意圖:

-16≤SHIFT≤0,且SXM=1

39累加器src0第3章匯編語言指令系統(tǒng)②

移位指令C

測試指令通常和條件轉(zhuǎn)移等指令結(jié)合,實現(xiàn)程序轉(zhuǎn)移,或用于檢測數(shù)據(jù)的正、負極性,數(shù)據(jù)的位狀態(tài)等。第3章匯編語言指令系統(tǒng)③

測試指令

測試指令操作字數(shù)周期數(shù)BITXmem,BITCTC=Xmem(15–BITC)測試Xmem中指定的某位11BITFSmem,#lkTC=(Smem&&#lk)測試Smem中指定的某些位22BITTSmemTC=Smem(15–T(3~0))測試由T指定的位11CMPMSmem,#lkTC=(Smem==#lk)比較Smem與長立即數(shù)是否相等22CMPRCC,ARxARx與AR0進行比較11

控制程序轉(zhuǎn)移類指令的功能是改變程序執(zhí)行的順序,可劃分為6類:

第3章匯編語言指令系統(tǒng)3.3.4控制程序轉(zhuǎn)移指令(P89)跳轉(zhuǎn)指令調(diào)用和返回指令中斷指令堆棧操作指令重復(fù)指令其它程序控制指令第3章匯編語言指令系統(tǒng)①跳轉(zhuǎn)指令跳轉(zhuǎn)指令分類指令操作字數(shù)周期數(shù)近程無條件轉(zhuǎn)移B[D]pmadPC=pmad(15~0)24/[2]BACC[D]srcPC=src(15~0)16/[4]遠程無條件轉(zhuǎn)移FB[D]extpmadPC=pmad(15~0),XPC=pmad(22~16)24/[2]FBACC[D]srcPC=src(15~0),XPC=src(22~16)16/[4]近程條件轉(zhuǎn)移BC[D]pmad,cond[,cond[,cond]]若條件(cond(s))滿足,則PC=pmad(15~0)25/3//[3]BANZ[D]pmad,Sind若(Sind≠0)則PC=pmad(15~0)24/2/

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論