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ù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

目錄:

3.1C54x匯編語言指令集介紹

3.2尋址方式

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

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

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

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

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

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

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

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

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

義11C16

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

ST0中的進(jìn)位位13CC

2位條件碼(0CC3)14CMPT

ST1中的ARP修正方式位15CPL

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

D地址總線19DAR

DAB地址寄存器20dmad

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

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

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

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

E地址總線26EAR

EAB地址總線27extpmad

23位立即程序存儲(chǔ)器地址28FRCT

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

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

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

義31IFR中斷標(biāo)志寄存器32INTM

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

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

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

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

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

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

義41n

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

ST0中的累加器A溢出標(biāo)志44OVB

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

ST1中的溢出方式位49PA

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

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

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

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

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

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

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

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

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

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

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

義71T暫存器72TC

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

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

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

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

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

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

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

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

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

從左到右

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

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

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

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

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

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

立即尋址是指指令中的操作數(shù)是一個(gè)立即數(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絕對(duì)尋址第3章匯編語言指令系統(tǒng)絕對(duì)尋址是指指令中包含著操作數(shù)的地址。

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

I/O端口(PA)尋址

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

MVDKSmem,dmad

MVDMdmad,MMR

MVKDdmad,Smem

MVMDMMR,dmad

程序存儲(chǔ)器(pmad)尋址

FIRSXmem,Ymem,pmad

MACDSmem,pmad,src絕對(duì)尋址的地址,通常用一個(gè)在程序的初始化中指定的地址標(biāo)號(hào)或符號(hào)來指明該數(shù)據(jù)存儲(chǔ)器地址絕對(duì)尋址的地址,通常用一個(gè)在程序的初始化中指定的地址標(biāo)號(hào)或符號(hào)來指明該程序存儲(chǔ)器地址第3章匯編語言指令系統(tǒng)絕對(duì)尋址方式相關(guān)指令程序存儲(chǔ)器(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絕對(duì)尋址絕對(duì)尋址的地址,通常用一個(gè)在程序的初始化中指定的地址標(biāo)號(hào)或符號(hào)來指明該IO口地址LD*AR3,ALD*(BUFFER),B該指令的功能是指將標(biāo)號(hào)為BUFFER的數(shù)據(jù)存儲(chǔ)器單元的內(nèi)容送入累加器B.累加器尋址是將累加器A中的內(nèi)容(低16位)作為程序存儲(chǔ)器的地址,完成程序空間和數(shù)據(jù)空間的數(shù)據(jù)訪問的一種方式。

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

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

累加器尋址指令解釋READASmem

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

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

容送入A所指出的程序存儲(chǔ)器中

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

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

7

6~0

操作碼

I=0

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

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

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

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

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

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

單操作數(shù)間接尋址可以使用所有8個(gè)輔助寄存器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負(fù)責(zé)傳送數(shù)據(jù)存儲(chǔ)器地址CB、DB、EB負(fù)責(zé)傳送讀/寫數(shù)據(jù)循環(huán)緩沖區(qū)長度寄存器相對(duì)位置輔助寄存器指針輔助算術(shù)邏輯運(yùn)算單元第3章匯編語言指令系統(tǒng)3.2.5間接尋址單操作數(shù)尋址

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

操作句法功

能說

明*

ARx

地址=ARx

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

+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é)束后,用位倒序進(jìn)位的方法從ARx中減去AR0的值

*

ARx+0B

地址=ARx

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

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將一個(gè)16位帶符號(hào)數(shù)加到ARx,然后尋址*

ARx(lk)%

地址=Circ(ARx+lk)

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

(lk)

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

詳見P69表3-5第3章匯編語言指令系統(tǒng)3.2.5間接尋址(二個(gè)關(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)尋址目的:提高運(yùn)算速度算法如下:

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

BK;

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

if偏移量+步長

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

if偏移量+步長

<0;偏移量=偏移量+步長+BK。①地址指針可由低向高增值變化,當(dāng)增至最高地址時(shí),能夠自動(dòng)返回最低地址;②或由高減量變化,當(dāng)減至最低地址時(shí),可自動(dòng)返回最高地址。第3章匯編語言指令系統(tǒng)3.2.5間接尋址循環(huán)尋址(P70幾個(gè)關(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ù)存儲(chǔ)器地址

*

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

*

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

*

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

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

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

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

LDMMMR,dstMVDMdmad,MMRMVMDMMR,dmadMVMMMMRx,MMRy

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

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

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

PSHDSmem

PSHMMMRPOPDSmemPOPMMMR

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

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

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

加載指令存儲(chǔ)指令

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

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

加載指令

(LD)以累加器A或B為目標(biāo)操作數(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)當(dāng)SXM=0時(shí),進(jìn)行無符號(hào)數(shù)的加載第3章匯編語言指令系統(tǒng)

加載指令

指令執(zhí)行前

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

0200H95A6指令執(zhí)行后

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

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

加載指令

指令執(zhí)行前

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

0200H95A6指令執(zhí)行后

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

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

加載指令

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

加載指令

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

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

加載指令

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

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

加載指令

ASM00DP3

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

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

ASM14DP003

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

0180H1234為MMR賦值的指令

第3章匯編語言指令系統(tǒng)②存儲(chǔ)指令(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)②存儲(chǔ)指令

指令執(zhí)行前

A0012345678AR27315AR5(15h)3F69

指令執(zhí)行后

A0012345678AR20015AR55678

例3.15

STM#1357H,*AR4+

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

指令執(zhí)行前

AR00000AR48010指令執(zhí)行后

AR01357AR40011

例3.16

STM#2468H,60H

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

指令執(zhí)行前

0060H0000指令執(zhí)行后

0060H2468

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

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

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)②存儲(chǔ)指令

(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ù)的加載、存儲(chǔ)指令及數(shù)據(jù)存放格式

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

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

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

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

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

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

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

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

0100H00000101H0000指令執(zhí)行后

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

0100H6CAC

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

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

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

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

0100H00000101H0000指令執(zhí)行后

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

0100HBD90

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

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

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

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

0100H6CAC0101HBD90指令執(zhí)行后

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

0100H6CAC

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

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

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

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

0100H6CAC0101HBD90指令執(zhí)行后

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

0100H6CAC

0101HBD90

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

第3章匯編語言指令系統(tǒng)基本算術(shù)運(yùn)算指令加法指令操作字?jǐn)?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)減法指令操作字?jǐn)?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ù)運(yùn)算指令第3章匯編語言指令系統(tǒng)乘法指令操作字?jǐn)?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ù)運(yùn)算指令第3章匯編語言指令系統(tǒng)②

特殊運(yùn)算指令特殊運(yùn)算指令操作字?jǐn)?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=帶符號(hào)數(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)②

特殊運(yùn)算指令特殊運(yùn)算指令功能字?jǐn)?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ù)運(yùn)算指令雙字指令操作字?jǐn)?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ù)運(yùn)算指令雙字指令操作字?jǐn)?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對(duì)常用的乘累加指令的分析:

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

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

指令MACDSmem,pmad,src

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

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

乘累加和乘累減指令指令操作字?jǐn)?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)④

乘累加和乘累減指令指令操作字?jǐn)?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)④

乘累加和乘累減指令指令操作字?jǐn)?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邏輯運(yùn)算指令包括:第3章匯編語言指令系統(tǒng)3.3.3邏輯運(yùn)算指令布爾型指令移位指令測試指令

第3章匯編語言指令系統(tǒng)布爾型指令與指令操作字?jǐn)?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)或指令操作字?jǐn)?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)異或指令操作字?jǐn)?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帶進(jìn)位位C的循環(huán)左移ROLTCsrc帶測試位TC的循環(huán)左移RORsrc帶進(jìn)位位C的循環(huán)右移SFTAsrc,SHIFT[,dst]

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

src(31)=src(30)則

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

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

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

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

移位指令C0

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

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

移位指令C0

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

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

移位指令TC0

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

0﹤SHIFT≤15時(shí)

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

移位指令0

C0

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

-16≤

SHIFT≤0時(shí)

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

移位指令0

C0

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

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

SHIFT=0時(shí)C0

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

0﹤SHIFT≤15時(shí)

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é)合,實(shí)現(xiàn)程序轉(zhuǎn)移,或用于檢測數(shù)據(jù)的正、負(fù)極性,數(shù)據(jù)的位狀態(tài)等。第3章匯編語言指令系統(tǒng)③

測試指令

測試指令操作字?jǐn)?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進(jìn)行比較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)指令分類指令操作字?jǐn)?shù)周期數(shù)近程無條件轉(zhuǎn)移B[D]pmadPC=pmad(15~0)24/[2]BACC[D]srcPC=src(15~0)16/[4]遠(yuǎn)程無條件轉(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論