學(xué)習(xí)技術(shù)課件西電章_第1頁
學(xué)習(xí)技術(shù)課件西電章_第2頁
學(xué)習(xí)技術(shù)課件西電章_第3頁
學(xué)習(xí)技術(shù)課件西電章_第4頁
學(xué)習(xí)技術(shù)課件西電章_第5頁
已閱讀5頁,還剩232頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

3.1.1指令的表示方法

1.指令的基本形式

與所有的微處理器助記符指令一樣,TMS320C54x的助記符指令也是由操作符和操作數(shù)兩部分組成的。在匯編前,操作符是用助記符表示的,指出指令應(yīng)完成何種操作;操作數(shù)用來描述該指令的操作對象,它可以是數(shù)據(jù)本身,也可以是指出如何獲取操作數(shù)的信息。助記符指令的基本形式為:

標(biāo)號,操作符,操作數(shù)1,操作數(shù)2,操作數(shù)3

其中,標(biāo)號是可選項,操作數(shù)可以沒有或有多個,其內(nèi)容可

以是立即數(shù)、寄存器、程序地址、數(shù)據(jù)地址、I/O地址等。TMS320C54x中源操作數(shù)一般在操作數(shù)1的位置,目的操作數(shù)則在操作數(shù)3的位置,指令執(zhí)行結(jié)果存放到目的操作數(shù)單元中,源操作數(shù)不變。例如:

LD#0FFH,A

上述指令的執(zhí)行結(jié)果是將立即數(shù)0FFH傳送至累加器A中。這里的LD為操作符,#0FFH為操作數(shù)1,累加器A為操作數(shù)2。

2.指令的數(shù)據(jù)類型

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

TMS320C54x數(shù)字信號處理器共有7種數(shù)據(jù)尋址方式,如表3-3所示。

1.立即尋址

立即尋址就是在指令中已經(jīng)包含有執(zhí)行指令所需的操作數(shù)(一個固定的立即數(shù))。立即尋址方式中的立即數(shù)有兩種數(shù)值形式,數(shù)值的位數(shù)為3、5、8或9位時為短立即數(shù);數(shù)值的位數(shù)為16位時是長立即數(shù)。立即數(shù)可以包含在單字節(jié)或雙字節(jié)指令中,短立即數(shù)在單字節(jié)指令中,長立即數(shù)在雙字節(jié)指令中。在立即尋址方式的指令中,在數(shù)字前面加一個“#”符號,表示此數(shù)為一個立即數(shù),否則會誤認(rèn)為是一個地址。

例如:用一個十六進(jìn)制數(shù)80H加載累加器A,可以寫成如下指令:

LD#80H,A ;執(zhí)行后,A=0080H如果將立即數(shù)10H先左移4位后,再加載累加器A,可以寫成如下指令:

LD#10H,4,A ;執(zhí)行后,A?=?0000?0100H

LD#32768,B ;執(zhí)行后,B?=?FFFF?8000H,狀態(tài)寄存器ST1中的

;SXM位等于1,數(shù)據(jù)進(jìn)入ALU之前進(jìn)行符號擴(kuò)展

如果沒有“#”符號,那么指令“LD80H,A”的執(zhí)行結(jié)果就變成把存儲器單元地址為80H中的內(nèi)容加載到累加器A中。如果(0080H)?=?0034H,那么指令執(zhí)行后A?=?0034H。

2.絕對尋址

絕對尋址有以下四種形式:

(1)數(shù)據(jù)存儲器地址單元(dmad)尋址:用程序標(biāo)號或數(shù)據(jù)來確定指令中所需要的數(shù)據(jù)空間地址。其指令如下:

MVDKSmem,dmad

MVDMdmad,MMR

MVKDdmad,Smem

MVMDMMR,dmad例如:

MVKDSAMPLE,*AR5;SAMPLE是一個符號常數(shù),

;表示一個數(shù)據(jù)存儲單元的地址。

;把數(shù)據(jù)空間SAMPLE標(biāo)注的地

;址單元中的數(shù)據(jù)傳送到由AR5

;所指的數(shù)據(jù)存儲單元中

(2)程序存儲器地址單元(pmad)尋址:用一個符號或一個具體的數(shù)來確定程序存儲器中的地址。其指令如下:

FIRS Xmem,Ymem,pmad

MACD Smem,pmad,src

MACP Smem,pmad,src

MVDP Smem,pmad

MVPD pmad,Smem例如:

MVPDTABLE,*AR7+;TABLE是一個地址標(biāo)號,代

;表一個程序存儲單元的地址。

;把用TABLE標(biāo)注的程序存儲

;器單元中的內(nèi)容傳送到AR7所

;指的數(shù)據(jù)存儲器單元

(3)端口地址(PA)尋址:用一個符號或一個常數(shù)來確定外部I/O端口地址。其指令如下:

PORTR PA,Smem

PORTW Smem,PA例如:

PORTRFIFO,*AR5;從FIFO端口讀入一個數(shù)據(jù),將

;其放入AR5寄存器所指的數(shù)據(jù)

;存儲單元中。FIFO是一個I/O端

;口的標(biāo)號

(4)?*(lk)尋址:16位符號常數(shù)所指的數(shù)據(jù)存儲單元(Smem)中的操作數(shù)。

例如:

STLA,*(SAMPLE);SAMPLE是一個16位符號常數(shù)

3.累加器尋址

有兩條指令可以用累加器尋址:

READA Smem ;把累加器A所確定的程序存儲單元中的內(nèi)容傳送到由

;Smem所指定的數(shù)據(jù)存儲單元中

WRITA Smem ;將Smem所指定的數(shù)據(jù)存儲單元中的一個數(shù)傳送到累

;加器A確定的程序存儲器單元中對于上述兩條指令,如果前面有一條RPT重復(fù)指令,則累加器A能夠自動增量尋址,但累加器A的值不變。對大多數(shù)TMS320C54x而言,用累加器的低16位作為程序存儲器的地址。而對于TMS320C548來說,是用累加器的低23位作為程序存儲器的地址。

4.直接尋址

直接尋址就是在指令中包含有數(shù)據(jù)存儲器地址(dma)的低

7位,用這7位作為偏移地址,并與基地址值(數(shù)據(jù)頁指針DP的9位或堆棧指針SP的16位)組成一個16位的數(shù)據(jù)存儲器地址。

直接尋址分為數(shù)據(jù)頁指針直接尋址和堆棧指針直接尋址兩種。這兩種尋址方式可以在不改變DP或SP的情況下,隨機(jī)地尋找128個存儲單元中的任何一個單元地址。直接尋址的優(yōu)點(diǎn)是訪問方便快捷,每條指令只需要一個字。直接尋址的代碼格式如下:當(dāng)狀態(tài)寄存器ST1中的CPL位等于0時,ST0中的DP值

(9位地址)與指令中的7位地址一起形成16位數(shù)據(jù)存儲器地址,以O(shè)P為基準(zhǔn)的直接尋址如圖3-2所示。圖3-2以DP為基準(zhǔn)的直接尋址因為DP值的范圍是0~511,所以以DP為基準(zhǔn)的直接尋址把存儲器分成512頁;又因為7位dma值的范圍是0~127,所以每頁有128個可訪問的單元。也就是說,DP指向512頁中的一頁,dma就指向該頁中的特定單元。DP值可以由LD指令裝入,RESET指令將DP賦為0。DP不能通過上電進(jìn)行初始化,只有在程序中對它進(jìn)行初始化后,才能保證程序正常工作。當(dāng)ST1中的CPL位等于1時,將指令中的7位地址與16位堆棧指針SP相加,形成16位的數(shù)據(jù)存儲器地址,以SP為基準(zhǔn)的直接尋址方式如圖3-3所示。圖3-3以SP為基準(zhǔn)的直接尋址方式

(1)數(shù)據(jù)頁指針直接尋址:x=01FFH,y=0200H。

(2)堆棧指針直接尋址:SP=0010H。編程時直接尋址和立即尋址容易混淆。例如,ST1中的CPL=1,SP=0120H,指令“LDU34H,A”是一條直接尋址指令,表示將數(shù)據(jù)空間0120H?+?34H?=?0154H單元的內(nèi)容裝入累加器A。如果要裝入一個立即數(shù),立即數(shù)前一定要加“#”符號。值得注意的是,直接尋址時常數(shù)前面加符號“@”與不加是一樣的,但地址范圍必須是0~127。

5.間接尋址

在間接尋址中,64?K字?jǐn)?shù)據(jù)空間中的任意單元都可以通過一個輔助寄存器中的16位地址進(jìn)行訪問,同時可以預(yù)調(diào)整或修改輔助寄存器值,完成循環(huán)尋址和位碼倒序?qū)ぶ返忍厥夤δ?。TMS320C54x有8個16位輔助寄存器(AR0~AR7)、2個輔助寄存器算術(shù)運(yùn)算單元(ARAU0和ARAU1),它們與8個輔助寄存器一起完成16位無符號數(shù)算術(shù)運(yùn)算。間接尋址很靈活。它不僅能在單條指令中對存儲器讀/寫一個16位操作數(shù),還能在單條指令中讀兩個獨(dú)立的數(shù)據(jù)存儲

單元,讀/寫兩個順序的數(shù)據(jù)存儲單元,或者讀一個數(shù)據(jù)存儲單元的同時寫另一個數(shù)據(jù)存儲單元。

1)單數(shù)據(jù)存儲器操作數(shù)間接尋址

單數(shù)據(jù)存儲器操作數(shù)間接尋址指令的格式如下:

2~0位:3位輔助寄存器域,它定義了尋址所使用的輔助寄存器。ARP由狀態(tài)寄存器ST1中的兼容方式位CMPT來決定。

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

CMPT=1:兼容方式。

表3-4列出了16種單數(shù)據(jù)存儲器操作數(shù)的間接尋址類型。例如:

ST#1000H,*(0060H);把立即數(shù)1000H放到數(shù)據(jù)存儲器地址

;為0060H的單元中

STM#0060H,AR1;執(zhí)行后,AR1?=?0060H

STM#2,AR0;執(zhí)行后,AR0?=?0002H

LD*AR1+0,A;執(zhí)行后,累加器A?=?1000H,即

;0060H單元中的內(nèi)容;

;AR1=0062H

2)位碼倒序?qū)ぶ饭δ?/p>

位碼倒序?qū)ぶ诽岣吡藞?zhí)行速度,在FFT算法中,經(jīng)常要用到位碼倒序?qū)ぶ饭δ?。在這種尋址方式中,AR0存放的整數(shù)N是FFT點(diǎn)數(shù)的一半.一個輔助寄存器指向一個數(shù)據(jù)存放的物理單元,當(dāng)使用位倒序?qū)ぶ钒袮R0加到輔助寄存器中時,地址以位倒序的方式產(chǎn)生,即進(jìn)位是從左向右,而不是通常的從右向左。例如:AR0=0000?1010B,AR2=0110?0110B,如執(zhí)行?*AR2+0B尋址功能,也就是(01100110)+(0001010),結(jié)果AR2=0110?1101B。應(yīng)注意計算是采用進(jìn)位從左到右運(yùn)算的。以16點(diǎn)FFT為例,其運(yùn)算結(jié)果的順序為X(0)、X(8)、X(4)、…、X(15),如表3-5所示。

3)循環(huán)尋址

在卷積、相關(guān)和FIR濾波器等算法中,都需要在存儲器中設(shè)置一個循環(huán)緩沖器,它是一個滑動窗口,保存著最新的一批數(shù)據(jù)。當(dāng)新的數(shù)據(jù)到來時,緩沖器中最早的數(shù)據(jù)就會被新的數(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è)定。長度為R的緩沖器必須從N位地址的邊界開始(即循環(huán)緩沖器基地址的N個最低有效位必須為0),N應(yīng)滿足2N>R的最小整數(shù)。例如,長度R=127的循環(huán)緩沖區(qū)必須從二進(jìn)制地址XXXXXXXXX0000000B(N=7,27>127,該地址的最低7位為0)開始,同時必須

將R值加載到BK寄存器中。循環(huán)緩沖區(qū)的有效基地址(EFB)就是用戶選定的輔助寄存器(ARx)的低N位置0后所得到的值,循環(huán)緩沖區(qū)的的尾地址(EOB)是通過用BK的低N位代替ARx的低N位得到的。循環(huán)緩沖區(qū)的指針index就是ARx的低N位,step就是加到輔助寄存器或從輔助寄存器中減去的值。循環(huán)尋址的算法為

if0≤index+step≤BK;

index=index+step.

elseifindex+step≥BK;

index=index+step-BK.

elseifindex+step<0;

index=index+step+BK.例如,一個循環(huán)緩沖區(qū)大小BK=6=N,AR1=0060H,用?*AR1+%間接尋址。第一次尋址后,AR1?=?0061H;第二

次尋址后,AR1=0062H;……;第六次尋址后,AR1指向0066H,再按BK的值6取模,此時AR1又指向0060H單元

(前面5次按BK取模時,AR1的值不變)。

4)雙數(shù)據(jù)存儲器操作數(shù)尋址

雙數(shù)據(jù)存儲器操作數(shù)尋址用來完成兩個讀操作,或一個讀和一個并行存儲操作。采用這種方式的指令只有一個長字,并且只能以間接尋址的方式工作。用Xmem和Ymem來代表這兩個數(shù)據(jù)存儲器操作數(shù)。在完成兩個讀操作過程中,Xmem表示讀操作數(shù)(訪問D數(shù)據(jù)總線),Ymem表示讀操作數(shù)(訪問C數(shù)據(jù)總線);在進(jìn)行一個讀操作同時并行一個并行存儲操作的過程中,Xmem表示讀操作數(shù)(訪問D數(shù)據(jù)總線),Ymem表示一個寫(訪問E數(shù)據(jù)總線)操作數(shù)。如果源操作數(shù)和目的操作數(shù)指向同一個單元,則在并行存儲指令中(如ST||LD),讀在寫之前。如果一個雙操作指令(如ADD)指向同一輔助寄存器,并且這兩個操作數(shù)的尋址方式不同,那么就按Xmod域所確定的方式來尋址。

雙數(shù)據(jù)存儲器操作數(shù)間接尋址的指令格式如下:雙數(shù)據(jù)存儲器操作數(shù)間接尋址指令代碼的位說明如表

3-6所示。由指令的Xar或Yar域選擇的輔助寄存器如表3-7所示。雙數(shù)據(jù)存儲器操作數(shù)間接尋址類型如表3-8所示。

6.存儲器映像寄存器尋址

存儲器映像寄存器尋址是用來修改存儲器映像寄存器的,但不影響當(dāng)前數(shù)據(jù)頁指針DP或堆棧指針SP的值。由于DP和SP不需要改變,因此寫一個寄存器的開銷是最小的。存儲器映像寄存器尋址可以在直接尋址和間接尋址中使用。存儲器映像寄存器(MMR)地址的產(chǎn)生有兩種方法:

(1)在直接尋址方式下,不管當(dāng)前DP或SP的值為何值,

使數(shù)據(jù)寄存器地址的高9位(MSBs)強(qiáng)制置0,數(shù)據(jù)存儲器地址的低7位(LSBs)則來自于指令字。

(2)在間接尋址方式下,只使用當(dāng)前輔助寄存器的低7位作為數(shù)據(jù)存儲器地址的低7位,地址的高9位為0,指定的輔助寄存器的高9位在尋址后被強(qiáng)制置0。例如,AR1是用來指向一個存儲器映像寄存器的,如果AR1=FF25H,由于AR1的低7位是25H,所指的數(shù)據(jù)存儲器地址是0025H,定時器周期寄存器PDR的地址是25H,那么AR1指向了定時器周期寄存器,執(zhí)行后,AR1中的值為0025H。存儲器映像寄存器尋址如圖3-4所示。圖3-4存儲器映像寄存器尋址

對于存儲器映像寄存器尋址方式,無論當(dāng)前的DP或SP指向哪里,都可以直接訪問位于地址0000H~007FH的寄存器,這類指令的操作符的最后一個字母為M。

例如:

LDMMMR,A;將MMR寄存器放入A。MMR表示任何

;映像的寄存器名或地址號,如TCR

;(等效地址為0026H)存儲器映像寄存器尋址的指令只有8條,具體如下:

LDM MMR,dst

MVDM dmad,MMR

MVMD MMR,dmad

MVMM MMRx,MMRy

POPM MMR

PSHM MMR

STLM src,MMR

STM #lk,MMR雖然有些指令操作符的最后一個字母為M,但不是存儲

器映像寄存器尋址。例如,指令“ADDM#1,AR7”,雖然對MMR寄存器AR7操作,但受DP或SP的影響,屬直接尋址。當(dāng)高位地址由DP決定時,只有在DP?=?0時才是對AR7寄存器進(jìn)行操作,DP≠0時則是對指定數(shù)據(jù)頁中偏移量(低7位地址)為17H(AR7地址為17H)的存儲單元進(jìn)行直接尋址方式下的操作。

7.堆棧尋址

系統(tǒng)堆棧用來在中斷或調(diào)用子程序期間自動存放程序計數(shù)器,也能用來存放用戶當(dāng)前的程序環(huán)境或傳遞數(shù)據(jù)值。處理器使用一個16位存儲器映像寄存器的一個堆棧指針(SP)來尋址堆棧,SP始終指向存放在堆棧中的最后一個單元。當(dāng)調(diào)用一個子程序或一個中斷響應(yīng)發(fā)生時,PC會被自動壓棧,堆棧指針SP指向存放最后一個數(shù)據(jù)的堆棧單元;返回時,返回地址從堆棧中彈出并裝入PC。使用堆棧尋址方式訪問堆棧的指令共有4條:

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

PSHM:把一個存儲器映像寄存器的值壓入堆棧。

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

POPM:把一個存儲器映像寄存器的值彈出堆棧。堆棧存放數(shù)據(jù)是從高地址向低地址進(jìn)行的。壓入堆棧時,先減小SP值,再將數(shù)據(jù)壓入堆棧;彈出堆棧時,先從堆棧彈出數(shù)據(jù),再增加SP值。

圖3-5說明了壓入堆棧操作對堆棧指針(SP)的影響。圖3-5堆棧操作對堆棧指針的影響3.1.3程序轉(zhuǎn)移地址尋址方式

指令是按順序存放在存儲器中的,而程序執(zhí)行順序是由程序計數(shù)器(PC)的內(nèi)容來決定的。當(dāng)C54x程序執(zhí)行分支轉(zhuǎn)移、調(diào)用與返回、條件操作、單條指令或塊指令重復(fù)操作、硬件中斷和復(fù)位時,需脫離程序的正常順序執(zhí)行,而將一個不是順序增加的地址加載到PC,就可改變程序執(zhí)行順序。對于C548等具有外部擴(kuò)展程序存儲器的芯片來說,可通過程序計數(shù)器擴(kuò)展寄存器(XPC)來訪問程序存儲器的各個頁。下面以無條件分支轉(zhuǎn)移指令為例說明程序存儲器地址是如何生成并加載到程序計數(shù)器的。指令的匯編語言格式為:

B pmad ;PC=pmad(15-0)

BACCsrc;PC=src(15-0)

FBextpmad;PC=pmad(15-0),

;XPC=pmad(22-16)

FBACC src;PC=src(15-0),XPC=src(22-16)

3.2TMS320C54x的指令系統(tǒng)

TMS320C54x指令系統(tǒng)按功能可以分成四種基本類型:

算術(shù)運(yùn)算指令;

邏輯運(yùn)算指令;

程序控制指令;

加載和存儲指令。3.2.1指令系統(tǒng)概述

1.指令系統(tǒng)中規(guī)定的符號與縮寫

TMS320C54x指令系統(tǒng)中規(guī)定了許多符號與縮寫,在介紹指令系統(tǒng)之前應(yīng)有所了解。為了便于學(xué)習(xí)和使用,在表3-9和表3-10中列出了指令系統(tǒng)和操作碼中的符號和縮寫,以備查用。

2.指令系統(tǒng)中的記號和運(yùn)算符

指令系統(tǒng)中所用的記號如表3-11所示。指令系統(tǒng)中所用的運(yùn)算符號如表3-12所示。3.2.2指令系統(tǒng)分類

TMS320C54x的指令一共有129條,由于操作數(shù)的尋址方式不同,以至于派生出205條指令。TMS320C54x指令系統(tǒng)的分類有兩種方法,一是按指令執(zhí)行時所需的周期分類;一是按指令的功能分類。按指令的功能可分為四類:算術(shù)運(yùn)算指令、邏輯運(yùn)算指令、程序控制指令以及加載和存儲指令。

1.算術(shù)運(yùn)算指令

算術(shù)運(yùn)算指令用于完成加、減、乘、除等算術(shù)運(yùn)算,可分為加法指令、減法指令、乘法指令、乘加指令、乘減指令、雙操作數(shù)指令和專用指令。其中,大部分指令只需要一個指令周期,只有個別指令需要2~3個指令周期。

1)加法指令

指令中表示整數(shù)時,有有符號數(shù)和無符號數(shù)兩種格式。TMS320C54x提供了多條用于加法的指令,如ADD、ADDC、ADDM和ADDS,加法指令的說明如表3-13所示。影響指令執(zhí)行的狀態(tài)位有符號擴(kuò)展位SXM、溢出方式位OVM和進(jìn)位標(biāo)志位C(ADDC指令);執(zhí)行指令后產(chǎn)生的狀態(tài)位有進(jìn)位標(biāo)志位C、累加器溢出標(biāo)志位OVdst或OVsrc或OVA。

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

【例1】ADD*AR3+,14,A說明:(AR3)左移14位等于0005400000H,0005400000H+A→A=0005401200H。

【例2】ADDA,-8,B說明:A右移8位為0000054012H,加上B,得出B=0000055812H,無進(jìn)位,C=0。

【例3】ADD#4568H,8,A,B說明:4568H左移8位為00456800H,加上A,得出B=0000457A00H,無進(jìn)位,C=0。

【例4】ADD*AR2+,*AR2-,A說明:(AR2)左移16位,加上(AR2)左移16位,得出A=0028000000H,AR2+1→AR2。這里,雙操作指令指向同一輔助寄存器AR2,并且這兩操作數(shù)的尋址方式不同,那么就按第一個操作數(shù)所確定的方式來尋址。

【例5】ADDC*+AR2(5),A;不受SXM位影響說明:尋址前AR2=0100H+5,(AR2)+A+1→A=0000000045H,無進(jìn)位,C=0。

【例6】ADDM#123BH,*AR4+;該指令不能循環(huán)執(zhí)行說明:(AR4)+123BH=0014H+123BH=124FH→(0100H),AR4+1→AR4。

【例7】ADDM#0F088H,*AR2+說明:如果執(zhí)行前SXM=1,OVM=0,則執(zhí)行后0F088HH=708FH→(0105H),OVA=1,C=1;如果執(zhí)行前SXM=1,OVM=1,則結(jié)果不可能為正,故為負(fù)的最大值8000H→(0105H),OVA=1C=1。

【例8】ADDS*AR2-,B;無論SXM為何值,都不進(jìn)行符號擴(kuò)展說明:無符號數(shù)0F001H+B→B=000000F004H。

2)減法指令

TMS320C54x中減法指令有許多,如SUB、SUBB、SUBC和SUBS,減法指令的說明如表3-14所示。其中,SUBS是無符號數(shù)的減法運(yùn)算,SUBB是帶借位的減法運(yùn)算,而SUBC是含條件的移位減。在TMS320C54x中,沒有專門的除法指令,要實(shí)現(xiàn)除法運(yùn)算一般有兩種方法:一種方法是用乘法進(jìn)行,如要除以某個數(shù),可以先求出該數(shù)的倒數(shù),再乘以其倒數(shù);另一種方法是用SUBC指令,再重復(fù)16次減法運(yùn)算,可實(shí)現(xiàn)兩個無符號數(shù)的除法運(yùn)算。減法指令中的狀態(tài)位與加法指令中的基本相同。

【例9】SUB#12345,8,A,B說明:12345=3039H,A-3039H左移8位→B=FFFFCFD900H,有借位,C=0。

【例10】LD#8,DP ;使頁面指針DP=8

LD#0006H,A ;加載A累加器

SSBXC ;置借位位C為1

SUBB@5,A ;完成帶借位的減法運(yùn)算。數(shù)據(jù)地

;址=0405H,為直接尋址說明:本例應(yīng)用了直接尋址,數(shù)據(jù)地址由DP的高9位加上SUBB指令中操作數(shù)5的低7位組成,其結(jié)果為0405H。指令執(zhí)行A-(0405H)-0→A=FFFFFFFFFEH,有借位,C=0。

【例11】利用SUBC完成整除法,41H÷7H=9H,余數(shù)

是2H。

LD

#0041H,B;將被除數(shù)41H裝入累加器B的低16位

STM

#0100H,AR2;寄存器AR2=0100H

STM

#0110H,AR3;寄存器AR3=0110H

ST

#0007H,*AR2;設(shè)置AR2寄存器的內(nèi)容,(AR2)=0007H

RPT

#15;重復(fù)SUBC指令15+1次

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

STL B,*AR3+;將商(累加器B的低16位)存入變量

;AR3所指地址的數(shù)據(jù)單元,AR3+

;1→AR3

STHB,*AR3;將余數(shù)(累加器B的高16位)存入變量

;AR3所指地址的數(shù)據(jù)單元

SUBC指令重復(fù)執(zhí)行前和最后一條指令執(zhí)行完后各寄存器的狀態(tài)如下:注意:除數(shù)和被除數(shù)在這條指令中都假設(shè)為正,SXM將影響該操作,即如果SXM?=?1,則除數(shù)的最高位必須為0;如果SXM?=?0,則任何一個16位除數(shù)值都可以。src中的除數(shù)必須初始化為正(31位為0),且在移位后也必須保持為正。在TMS320C54x中實(shí)現(xiàn)16位除法運(yùn)算分兩種情況:一種是|被除數(shù)|≥|除數(shù)|,其商為整數(shù);一種是?|被除數(shù)|<|除數(shù)|,其商為小數(shù)。實(shí)現(xiàn)16位小數(shù)除法與實(shí)現(xiàn)整數(shù)除法基本一樣,也是使用SUBC指令來完成的。由于SUBC指令僅對無符號數(shù)進(jìn)行操作,因此在執(zhí)行SUBC指令之前,必須先對被除數(shù)和除數(shù)取絕對值。商的符號可以利用乘法操作確定,最后通過條件執(zhí)行指令給商加上適當(dāng)?shù)姆枴?/p>

【例12】商為整數(shù)的除法:0.44÷(-0.22)=-2的程序段。

.bss num,1

.bss den,1

.bss quot,1

.data

table: .word 44*32768/100

.word -22*32768/100

.textstart: STM #num,AR1 ;把被除數(shù)的地址送入AR1中

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

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

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

MPYA @num ;利用乘法操作確定商的符號

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

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

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

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

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。

【例13】商為小數(shù)的除法:44÷(-176)=-0.25的程序段。

.bss num,1

.bss den,1

.bss quot,1

.data

table: .word 44

.word-176

.text

start: 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,@quot

done: B done

.end

結(jié)果y=E000H=-0.25。

3)乘法指令

TMS320C54x中有大量的乘法運(yùn)算指令,其結(jié)果都是32位,放在A或B累加器中,乘法指令的說明如表3-15所示。乘數(shù)在TMS320C54x的乘法指令中的使用很靈活,可以是T寄存器、立即數(shù)、存儲單元以及A或B累加器的高16位。如果是無符號數(shù)相乘,則使用一條專用于無符號數(shù)相乘的指令,即MPYU指令,其他指令都是有符號數(shù)的乘法。在TMS320C54x中,小數(shù)的乘法與整數(shù)乘法基本相同,由于是兩個有符號小數(shù)相乘,其結(jié)果的小數(shù)點(diǎn)的位置在次高位的后面,出現(xiàn)了冗余符號位,因此必須左移一位,才能得到正確結(jié)果。TMS320C54x提供了一個狀態(tài)位FRCT,如果將其設(shè)為1(用SSBXFRCT指令設(shè)置),則在乘法器將結(jié)果傳送至累加器時會自動地左移一位,從而消除冗余符號位。兩個小數(shù)相乘時,乘積總是“向右增長”。這種情況下,16位數(shù)的乘積為32位,如果精度允許,可以只存放高16位,將低16位丟棄,只取16位結(jié)果,這樣保存結(jié)果所使用的資源較少?!纠?4】實(shí)現(xiàn)整數(shù)乘法。

LD#0030H,A;將0030H裝入累加器A

STM#0100H,AR2;AR2?=?0100H

ST#2000H,*AR2;(AR2)?=?2000H

RSBXFRCT;清FTCT標(biāo)志位,準(zhǔn)備整數(shù)乘

LD#2,DP;DP?=?002H

LD0,T;將AR2中的內(nèi)容2000H裝入T寄存器

MPY#-2,A;完成2000H與0FFFEH相乘,結(jié)果放入A

;累加器(32位),A=FFFFFFC000H

說明:立即數(shù)lk(-32768≤lk≤32767)在進(jìn)入算術(shù)運(yùn)算單元ALU之前進(jìn)行符號擴(kuò)展。

【例15】實(shí)現(xiàn)小數(shù)乘法。

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

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

MPYAtemp2 ;完成temp2與累加器A的高16位相乘,

;結(jié)果放入B累加器,并將temp2裝入T寄

;存器

STHtemp3 ;將乘積結(jié)果的高16位存入變量temp3

4)乘加指令

乘加指令完成一個乘法運(yùn)算,將乘積再與源累加器的內(nèi)容相加。指令中使用R后綴的,其運(yùn)算結(jié)果要進(jìn)行湊整。表3-16是對乘加指令的說明。

【例16】MAC#345H,A,B說明:?FRCT=0,執(zhí)行整數(shù)乘法后再累加。A+T×0345H=1000HH×0345H=000D2400H→B。

【例17】MAC#345H,A,B說明:FRCT=1,執(zhí)行小數(shù)的乘法,系統(tǒng)自動將乘積結(jié)果左移1位,以消除多余的符號位之后再加。

【例18】MAC*AR3+,*AR4+,A,B說明:FRCT=1,執(zhí)行小數(shù)的乘法后再累加。A+(AR3)×(AR4)=1000HH×1234H=0C4C10C0H→B,T=(AR3),AR3+1→AR3,AR4+1→AR4。

【例19】MACR*AR3+,*AR4+,A,B說明:指令后有R為帶舍入的乘累加,目的累加器B的結(jié)果進(jìn)行湊整運(yùn)算,即結(jié)果加上215(8000H),低16位清零。

【例20】MACAT,A,B說明:A+T×A(31~16)=12340000HH×1234H=12CF4BA0H→B。

【例21】MACAT,B,B說明:當(dāng)源累加器和目的累加器都為B時,B+T×A(31~16)→B,結(jié)果B=009D4BA0H。

【例22】MACD*AR2-,COEFFS,A說明:A+(AR2)×(COEFFS)=00770000HH×1234H=007D0B44H→A,T=(AR2)=0055H,帶延時的操作數(shù)(AR2+1)=(AR2)=0055H,AR2-1=00FFH→AR2。

【例23】MACSU*AR3+,*AR4+,A說明:A+uns(AR3)×(AR4)=1000HH×1234H=09A0AA84H→A,T=8765H。

【例24】編寫計算Z64=X32*Y32的程序段。

32位乘法的程序段如下:

STM #x0,AR2

STM #y0,AR3

LD *AR2,T ;T=x0

MPYU *AR3+,A ;A=uns(x0)*uns(y0)

STL A,@z0 ;z0=uns(x0)*uns(y0)

LD A,-16,A ;A=A>>16

MACSU *AR2+,*AR3-,A ;A+=y1*uns(x0)

MACSU *AR3+,*AR2,A ;A+=x1*uns(y0)

STL A,@z1 ;z1=A

LD A,-16,A ;A=A>>

16

MAC *AR2,*AR3,A ;A+=x1*y1

STL A,@z2 ;z2=AL

STH A,@z3 ;z3=AH

5)乘減指令

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

【例25】MAS*AR3+,*AR4+,A,B說明:A-(AR3)×(AR4)=1000H-5678H×1234H=F3B40F40H→B,T=5678H。

【例26】MASR*AR3+,*AR4+,A,B說明:指令后如加R后綴,指令就會對結(jié)果進(jìn)行湊整計算。本例中對目的累加器B的結(jié)果進(jìn)行了湊整。

【例27】編制計算y=0.1*0.8+(-0.2)*0.6+(-0.3)*(-0.9)程序段。

.bss x,3

.bss a,3

.bss y,1

.data

table: .word 1*32768/10,-2*32768/10,-3*32768/10

.word 8*32768/10,6*32768/10,-9*32768/10

.text

start:STM #table,AR1;AR1指向程序地址table

STM #x,AR2 ;AR2指向x

STM #5,AR0

LD #0,A

loop: LD *AR1+,A ;從程序存儲單元向數(shù)據(jù)存儲單元傳

;送6個數(shù)據(jù)

STL A,*AR2+

BANZ loop,*AR0-;AR0?≠?0,執(zhí)行標(biāo)號loop,否則執(zhí)

;行下一條指令

SSBX FRCT

CALLSUM

end: B end

SUM: 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ù)指令中有一個操作數(shù)Lmem是長數(shù)據(jù)存儲操作數(shù),該指令為雙長字(32位)的指令。如DADD指令,它在C16的控制下完成一個32位的加法運(yùn)算或兩個16位的加法運(yùn)算。當(dāng)C16=0時,指令以雙精度(32位)方式執(zhí)行;當(dāng)C16=1時,指令以雙16位方式執(zhí)行。表3-18是對雙操作數(shù)指令的說明。

【例28】DADD*AR3-,A,B說明:C16=1,B的高16位等于AR3的高16位加上A的高16位;B的低16位等于AR3的低16位加上A的低16位。執(zhí)行后,AR3減2。

【例29】編寫計算W64=X64+Y64的程序段。

X、Y、W均為64位數(shù),它們都由兩個32位的長字組成。低32位相加,可用長字指令完成,產(chǎn)生進(jìn)位。由于沒有長字帶進(jìn)位加指令,因此只能用16位帶進(jìn)位指令A(yù)DDC。

7)專用指令

在TMS320C54x中,許多專用指令用來完成一些特殊的操作,這樣不僅可以大大提高編寫程序的速度,縮短程序的長度,還避免了匯編中為實(shí)現(xiàn)一種功能而需要多條語句的弊端,減少了指令執(zhí)行的周期。表3-19是對專用指令的說明。

【例30】ABDST*AR3+,*AR4+說明:B=B+|A(31~16)|=00005433H,(AR3)-(AR4)=FFABH,結(jié)果左移16位→A。

【例31】FIRS*AR3+,*AR4+,COEFFS說明:B=B+A(31~16)

1234H=0008?762CH,(AR3)+(AR4)=00FFH,結(jié)果左移16位→A。

2.邏輯指令

按照功能的不同可將邏輯指令分為5組,即與指令(AND)、或指令(OR)、異或指令(XOR)、移位指令(ROL)和測試指令(BITF)。根據(jù)操作數(shù)的不同,指令的執(zhí)行需要1~2個指令周期。前三組指令與計算機(jī)匯編語言中的邏輯指令一樣,是按位進(jìn)行操作的。

1)與邏輯運(yùn)算指令

表3-20是對與邏輯運(yùn)算指令的說明。

2)或邏輯運(yùn)算指令

表3-21是對或邏輯運(yùn)算指令的說明。

3)異或邏輯運(yùn)算指令

表3-22是對異或邏輯運(yùn)算指令的說明。

4)移位指令

表3-23是對移位指令的說明。

【例32】SFTAA,-8,B說明:SXM=1,累加器A右移8位→B,C=A(7)=0。

【例33】SFTAA,-8,B說明:SXM=0,累加器B的39~32位等于0。

【例34】SFTLA,-8,B說明:邏輯右移8位,因為SHIFT=-8<0,C=A((-SHIFT)-1)位即累加器A的第7位,B(39~(31+(SHIFT+1)))位清零,B=A(31~0)右移8位。

【例35】SFTLB,+5說明:邏輯左移5位,因為SHIFT=5>0,C=B(31-(SHIFT-1))位即累加器A的第27位,B的((SHIFT-1)~0)清零,B=B((31-SHIFT)~0)左移5位,B(39~32)位清零。

5)測試指令

測試指令可以測試操作數(shù)的指定位的值,也可以比較兩個操作數(shù)是否相等。這些指令的執(zhí)行需要1~2個指令周期。表

3-24是對測試指令的說明?!纠?6】BIT*AR2+,12說明:測試(*AR2)中的第3位的值,然后將結(jié)果→TC標(biāo)志位,結(jié)果TC=1。

【例37】CMPR2,AR4說明:比較寄存器AR4和AR0,因當(dāng)CC=2、AR4>AR0時,TC=1,而7FFFH<FFFFH,故TC=0。

3.程序控制指令

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

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

分支轉(zhuǎn)移指令可以改變程序指針PC,使程序從一個地址跳轉(zhuǎn)到另一個地址。分支轉(zhuǎn)移指令分有條件轉(zhuǎn)移和無條件轉(zhuǎn)移兩種。指令后綴有D的指令是延遲轉(zhuǎn)移,指令執(zhí)行時先執(zhí)行緊跟的下一條指令,緊接著延遲轉(zhuǎn)移指令的兩條單字指令和一條雙字指令。延遲轉(zhuǎn)移可以減少轉(zhuǎn)移指令的執(zhí)行時間,但程序的可讀性變差。后綴有D的分支轉(zhuǎn)移指令的說明如表3-26所示。

【例38】用AR2作為循環(huán)計數(shù)器,設(shè)初值為4,共執(zhí)行5次加法運(yùn)算。

LOOP: ADD*AR1+,A

BANZLOOP,*AR2-

【例39】BC3000H,AGT,AOV

【例40】FBACCA說明:按累加器A規(guī)定的地址遠(yuǎn)程分支轉(zhuǎn)移。調(diào)用指令為非延時指令,PC+1→TOS;指令后綴帶D時,是延遲調(diào)用,緊接著指令的兩條單字指令和一條雙字指令先被取出執(zhí)行,此時PC+3→TOS。對于CC[D]指令,當(dāng)滿足確定的條件時,PC+2→TOS,pmad→PC,否則,PC+2→PC;如果是延遲調(diào)用,該指令后的兩個字指令先被取出執(zhí)行,被測試條件不會受影響,PC+4→TOS。表3-27是對延遲調(diào)用指令的說明。

【例41】CALAA說明:SP=SP-1,PC+1→(SP)=0026H,A(15~0)→PC=3000H。

【例42】CALADB

ANDM4444H,*AR1+說明:具有延遲的指令。執(zhí)行過程為SP=SP-1,PC+3→(SP)=0028H,B(15~0)→PC。

3)中斷指令

當(dāng)有中斷發(fā)生時,INTM位置1,屏蔽所有可屏蔽中斷,并設(shè)置中斷標(biāo)志寄存器IFR中相應(yīng)的中斷標(biāo)志位。中斷向量地址是由處理器工作方式狀態(tài)寄存器PMST中的中斷向量指針I(yè)PTR(9位)和左移兩位后的中斷向量序號(中斷向量序號為0~31,左移兩位后變?yōu)?位)組成的。中斷向量地址的形成如圖

3-6所示。表3-28是對中斷指令的說明。圖3-6中斷向量地址的形成

【例43】INTR3說明:SP=SP-1,PC+1→(SP)=0026H,中斷向量指針I(yè)PTR為PMST寄存器的15~7位,PC=IPTR+K<<2=FF8CH,INTM=1。

4)返回指令

返回指令用于在執(zhí)行完調(diào)用程序段或中斷服務(wù)程序后,使程序返回到調(diào)用指令或中斷發(fā)生的地方以繼續(xù)執(zhí)行。表3-29是對返回指令的說明。

【例44】FRETE說明:TOS→XPC=006EH,SP=SP+1,TOS→PC=0110H,SP=SP+1,INTM=0。

5)重復(fù)指令

重復(fù)指令能使DSP重復(fù)執(zhí)行一條指令或一段指令。在執(zhí)行RPT或RPTZ期間,對和所有可屏蔽中斷都不響應(yīng)。在執(zhí)行RPTB指令前,必須把循環(huán)次數(shù)置入BRC寄存器中。在塊重

復(fù)執(zhí)行期間,可以響應(yīng)中斷。表3-30是對重復(fù)指令的說明。

【例45】RPT#?99;循環(huán)執(zhí)行NOP指令100次,

;RC=63H,單字指令

NOP

RPT#?999 ;將緊跟在RPT后面的下一條指令

;循環(huán)執(zhí)行1000次,雙字指令

6)堆棧操作指令

堆棧操作指令可以對堆棧進(jìn)行壓入和彈出操作,操作數(shù)可以是立即數(shù)、數(shù)據(jù)存儲器單元Smem或存儲器映像寄存器MMR。表3-31是對堆棧操作指令的說明。

7)其他程序控制指令

表3-32是對其他程序控制指令的說明。

【例46】XC1,ALEQ ;條件ALEQ指A≤0

MAR*AR1+

ADDA,8

如果A≤0,執(zhí)行下面一條“MAR?*AR1+”指令,XC指令執(zhí)行后AR1=AR1+1,否則執(zhí)行一條NOP指令,再執(zhí)行“ADDA,8”指令。

4.加載和存儲指令

1)加載指令

加載指令用于將數(shù)據(jù)存儲單元中的數(shù)據(jù)、立即數(shù)或源累加器的值裝入目的累加器、暫時寄存器T等,即給目的累加器、暫時寄存器T等賦值。表3-33是對加載指令的說明。

【例47】給累加器A加載一個雙16位長字。

STM#0100H,AR2

DLD*AR2+,A說明:AR2=0100H(偶地址),低地址(0100H)→A的高位,高地址(0101H)→A的低位。

【例48】LD*AR1,A說明:SXM=1,(AR1)=(0100H)→A時,要進(jìn)行符號位的擴(kuò)展,A=FFFFFFFFDCH。

【例49】LDMAR1,A說明:存儲器映像寄存器加載累加器,AR1→A的低位,其余位置0,A=0000000124H。

【例50】LDM*AR1,A說明:無論AR1的15~8位為何值,先清零,再取AR1作為地址進(jìn)行尋址。

【例51】LDM0060H,B說明:數(shù)據(jù)存儲器單元(0060H)→B的低位,其余位置0,B=000000FFDCH。

2)存儲指令

存儲指令用于將源累加器、立即數(shù)、暫時寄存器T或狀態(tài)轉(zhuǎn)移寄存器TRN的值保存到數(shù)據(jù)存儲單元或存儲器映像寄存器中。表3-34是對存儲指令的說明。

【例52】DSTB,*AR1+說明:AR1=0100H(偶地址),B的高位→低地址(0100H),B的低位→高地址(0101H)。

【例53】DSTB,*AR1-說明:AR1=0101H(奇地址),B的高位→高地址(0101H),B的低位→低地址(0100H)。

【例54】ST#0FFFFH,0說明:直接尋址地址由DP的9位(000000100B)與Smem的低7位(0000000B)組成,即為0200H。

【例55】STT,*AR7-說明:T→(AR7)=4231H,AR7=AR7-1=0332H。

【例56】STM#0FFFFH,IMR【例57】STM#8765H,*AR7+說明:無論AR7的15~8位為何值,先清零,再取AR7作為地址進(jìn)行尋址。立即數(shù)8765H→(0033H),AR7=0033H+1=0034H。

3)條件存儲指令

條件存儲指令是在條件滿足的情況下,將源累加器、T寄存器或塊重復(fù)計數(shù)器BRC的值存儲在數(shù)據(jù)存儲單元中。表3-35是對條件存儲指令的說明。

【例58】SRCCD*AR5-,AGT說明:A=0070FFFFFFH>0,塊重復(fù)計數(shù)器BRC→(AR5)=1234H,AR5=AR5-1=0211H。

【例59】SACCDA,*AR3+0,ALT說明:A=FFFE004321H<0,(AR3)=A<<(ASM-16),即A右移15位→(AR3)=FC00H,AR3=AR3+AR0=0214H。

4)其他加載和存儲指令

其他加載和存儲指令可以實(shí)現(xiàn)兩個數(shù)據(jù)存儲單元間數(shù)據(jù)的傳送,兩個存儲器映像寄存器單元間數(shù)據(jù)的傳送等,不受狀態(tài)位影響。表3-36是對其他加載和存儲指令的說明。

【例60】MVDD*AR3+,*AR5+說明:數(shù)據(jù)存儲器內(nèi)部傳送數(shù)據(jù),(AR3)→(AR5)=5555H。

【例61】MVDK*AR3

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論