第三章 尋址方式與指令系統(tǒng)_第1頁
第三章 尋址方式與指令系統(tǒng)_第2頁
第三章 尋址方式與指令系統(tǒng)_第3頁
第三章 尋址方式與指令系統(tǒng)_第4頁
第三章 尋址方式與指令系統(tǒng)_第5頁
已閱讀5頁,還剩184頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章尋址方式與指令系統(tǒng)3.1尋址方式3.2C2xx的指令集3.3C2xx的偽指令3.4宏指令3.1尋址方式尋址方式:獲取操作數(shù)的方式。C2xx提供了三種尋址方式:1)立即尋址方式:指令中直接給出操作數(shù)。長立即尋址:操作數(shù)為16位。短立即尋址:操作數(shù)為8、9、13位。2)直接尋址方式:把指令字的低7位和數(shù)據(jù)頁指針(DP)的內(nèi)容連接起來,得到16位數(shù)據(jù)存儲單元地址。3)間接尋址方式:當(dāng)訪問數(shù)據(jù)存儲單元時,通過片上8個16位輔助寄存器來產(chǎn)生訪問地址。3.1尋址方式3.1.1立即尋址方式

立即尋址方式指令中直接給出操作數(shù),無須通過訪問數(shù)據(jù)存儲器來獲得。又包括:

1)短立即尋址:操作數(shù)為8、9、13位。指令一般為單字指令,操作數(shù)嵌在指令字的低位中。例如:RPT#99;

NOP;把NOP指令連續(xù)執(zhí)行100次

3.1尋址方式2)長立即尋址:操作數(shù)為16位。指令為雙字指令,操作數(shù)為第二個字。

例如:ADD#16384,2;(將立即數(shù)左移2位,再與累加器內(nèi)容相加)。3.1尋址方式3.1.2直接尋址方式

直接尋址用于數(shù)據(jù)存儲器的尋址。DSP把數(shù)據(jù)存儲器劃分為0-511共計512個數(shù)據(jù)頁,每個數(shù)據(jù)頁涵蓋128個存儲單元。共計全部64K數(shù)據(jù)存儲空間。使用兩個片內(nèi)器件來進行直接尋址,它們是:①狀態(tài)寄存器ST0:它的低9位提供數(shù)據(jù)頁指針(DP),用來指示數(shù)據(jù)頁。②指令寄存器:CPU在讀取指令時,指令代碼被裝入指令寄存器IR。其高8位提供操作指令代碼,低7位提供數(shù)據(jù)在數(shù)據(jù)頁內(nèi)部的頁內(nèi)偏移量。3.1尋址方式下面是IR的位布置圖:其中,Bit7表示尋址方式:0代表直接尋址,1代表間接尋址。實際的訪問地址是DP和頁內(nèi)偏移量合并而成的:因此,我們在使用直接尋址時,必須按如下步驟進行:①設(shè)置數(shù)據(jù)頁:將數(shù)據(jù)頁代碼裝入DP。如:

LDP#32;把DP設(shè)置為32。②指定偏移量:7位頁內(nèi)偏移量由指令操作數(shù)提供。如:

ADD#1h;把頁內(nèi)偏移量為1的內(nèi)容(頁內(nèi)第2單元)和累加器目前的內(nèi)容相加。8MSBs/指令代碼0或1/尋址方式7LSBs/頁內(nèi)偏移量數(shù)據(jù)頁指針/DP(9位)頁內(nèi)偏移量(7位)3.1尋址方式直接尋址方式的指令代碼和16位數(shù)據(jù)存儲器地址形成過程如下:3.1尋址方式例1:3.1尋址方式例2:3.1尋址方式3.1.3間接尋址方式(一)間接尋址概述X24X片內(nèi)有8個輔助寄存器AR0-AR7,提供了靈活強大的尋址能力。用戶通過當(dāng)前輔助寄存器的16位地址,可以訪問64K字的數(shù)據(jù)存儲器。AR、APR的值可以通過MAR指令(修改輔助寄存器和ARP值)或LST(把數(shù)據(jù)存儲器的值寫入ST0)來修改。也可以通過任何支持間接尋址的命令把修改ARP作為輔助操作來執(zhí)行。使用這8個寄存器進行尋址的方法,也叫做寄存器間接尋址。方法是通過程序裝載輔助寄存器指針(狀態(tài)寄存器ST0的高三位)ARP,給出輔助寄存器編號0-7,從而指向一個輔助寄存器——當(dāng)前輔助寄存器。當(dāng)前輔助寄存器中包含了要訪問(讀或?qū)懀┑臄?shù)據(jù)存儲單元的地址,根據(jù)指令要求讀或?qū)懸源_定送往DRAB或DWAB。當(dāng)指令使用當(dāng)前AR操作完成后,其值可以由ARAU按照無符號16位算術(shù)運算規(guī)則自動進行增減(1或其它整數(shù))。3.1尋址方式

(二)7種間接尋址方式間接尋址方式的當(dāng)前AR所包含的地址使用結(jié)束后,要根據(jù)指令需求進行修改,為下一步操作做準備。系統(tǒng)提供了4種修改方法:①無增減(*)。對當(dāng)前輔助AR不做任何修改。②增加1或減少1(*+或*-)。對當(dāng)前輔助AR的值加或減1。③按照索引量增加或減少(*0+或*0-)。把AR0的值當(dāng)作索引量,從當(dāng)前AR中增加或減去AR0的索引量。④按照索引量增加或減少并反向進位(*BR0+或*BR0-)。把AR0的值當(dāng)作索引量,從當(dāng)前AR中增加或減去AR0的索引量,并在加減過程中進行反向進位。一般用于快速傅立葉變換(FFT)算法。Table.IndirectAddressingOperands3.1尋址方式(三)當(dāng)前輔助寄存器的修改所有指令都支持間接尋址,其中一些還可以在修改當(dāng)前輔助AR的同時,在第二操作數(shù)中聲明下一個當(dāng)前輔助寄存器。這些指令執(zhí)行時,將用一個新值裝載輔助寄存器指針ARP,而舊的ARP值將被裝入輔助寄存器指針緩沖器ARB(ST1高3位)。例:聲明當(dāng)前輔助寄存器的例子

MAR*,AR1;向ARP裝入1,使得AR1成為當(dāng)前輔助寄存器。

LT*+,AR2;把AR1的內(nèi)容裝入TREG,然后AR1增1;同時,對ARP裝入2,把AR2聲明為下一輔助寄存器。

MPY*;把AR2對應(yīng)數(shù)據(jù)單元的內(nèi)容和TREG的值相乘。3.1尋址方式(四)間接尋址的指令字格式間接尋址的指令字如下面格式:

各位含義如下:8MSB:位15至位8指示指令類型及數(shù)據(jù)移位有關(guān)的信息。1:直接/間接指示;ARU:輔助寄存器更新代碼;N:下一輔助寄存器指示;N=0,ARP的內(nèi)容不變,N=1,NAR的內(nèi)容加載到ARP;NAR:下一輔助寄存器3.1尋址方式Table.EffectsoftheARUCodeontheCurrentAuxiliaryRegisterTable.FieldBitsandNotationforIndirectAddressing3.1尋址方式舉例3.1尋址方式例:采用間接尋址的ADD指令A(yù)DD*+,8,AR4;當(dāng)前輔助寄存器指定數(shù)據(jù)單元的內(nèi)容左移8位,與累加器的內(nèi)容相加,然后當(dāng)前AR內(nèi)容增1。同時,聲明AR4為新的當(dāng)前AR(下一輔助寄存器)。例:采用間接尋址的ADD指令A(yù)DD*BRO+,8;當(dāng)前輔助寄存器指定數(shù)據(jù)單元的內(nèi)容左移8位,與累加器的內(nèi)容相加,然后當(dāng)前AR內(nèi)容加AR0,并反向進位。3.2C2xx的指令集TMS320C2xx系列DSP具有強大的指令集,按其功能可以分為六大類:(1)Accumulator(累加器指令),arithmetic(算術(shù)指令),andlogicinstructions(邏輯操作指令)等(2)Auxiliaryregister(輔助寄存器指令),datapagepointerinstructions(數(shù)據(jù)頁指針指令)(3)TREG(暫時寄存器),PREG(乘積寄存器),multiplyinstructions(乘法指令)(4)Branchinstructions(程序分支轉(zhuǎn)移指令)(5)Controlinstructions(控制指令)(6)I/Oandmemoryinstruction(I/O和存儲器指令)3.2C2xx的指令集一.匯編語言的一般格式X24X匯編程序一般格式如下:格式1——

標(biāo)號:指令操作數(shù)(1-3個);注釋格式2——*注釋標(biāo)號:指令操作數(shù)(1-3個)解釋如下:1.關(guān)于標(biāo)號:

1)標(biāo)號必須以字母或下劃線+字母開始;

2)標(biāo)號的第一個字符必須位于第一列;

3)標(biāo)號最多包含32個字符。3.2C2xx的指令集2.關(guān)于指令:

1)包括偽指令和匯編命令;

2)偽指令以實心點“.”開頭;

3)匯編指令直接書寫,沒有特定標(biāo)記。3.關(guān)于操作數(shù):

1)操作數(shù)包含常數(shù)、符號或表達式。

2)操作數(shù)之間用逗號“,”隔開。

3)根據(jù)指令功能不同,操作數(shù)可能有1-3個。4.關(guān)于注釋:

1)注釋要用“;”或“*”號引出;

2)使用“;”號時,可以從任一列開始;而使用“*”號時,則必須從第一列開始。

3)注釋不是必須的,在編譯時將被忽略。3.2C2xx的指令集二.具體指令格式表述方法在查閱指令集時,必須弄懂通用的格式表述方法。以ADD為例,其格式有:3.2C2xx的指令集這里使用了諸如:dma、shift、ind、AR、k、lk、shift等符號。了解這些符號,有助于我們準確查閱手冊,掌握各類指令的用法。指令查詢代號見下表3.2C2xx的指令集比較常用符號的如:

k——8位立即數(shù),使用格式為#k;

lk——16位立即數(shù),使用格式為#lk;

ind——間接尋址,代表*、*+、*-等;

AR——輔助寄存器;

ARP——輔助寄存器指針;

C——進位位;

dma——數(shù)據(jù)存儲單元地址,如050Ah;間接尋址;

dst——目的地址;

pma——程序存儲器地址;

shift、shiftn——移位1-16位;等等。3.2C2xx的指令集三.匯編語言指令集下面給出指令的6種分類列表:Table1.Accumulator,Arithmetic,andLogicInstructionsTable1.Accumulator,Arithmetic,andLogicInstructions(Continued)Table1.Accumulator,Arithmetic,andLogicInstructions(Continued)Table1.Accumulator,Arithmetic,andLogicInstructions(Continued)Table2.AuxiliaryRegisterInstructionsTable3.TREG,PREG,andMultiplyInstructionsTable3.TREG,PREG,andMultiplyInstructions(Continued)Table4.BranchInstructionsTable5.ControlInstructionsTable5.ControlInstructions(Continued)Table6.I/OandMemoryInstructions3.2C2xx的指令集四、舉例ABS(AbsoluteValueofAccumulator)指令A(yù)DD(AddtoAccumulator)指令A(yù)DDC(AddtoAccumulatorWithCarry)指令A(yù)DDS(AddtoAccumulatorWithSignExtensionSuppressed)指令A(yù)DDT(AddtoAccumulatorWithShiftSpecifiedbyTREG)指令A(yù)DRK(AddShort-ImmediateValuetoAuxiliaryRegister)指令AND(ANDWithAccumulator)指令APAC(AddPREGtoAccumulator)指令B(BranchUnconditionally)指令BACC(BranchtoLocationSpecifiedbyAccumulator)指令BANZ(BranchonAuxiliaryRegisterNotZero)指令BCND(BranchConditionally)指令BIT(TestBit)指令BITT(TestBitSpecifiedbyTREG)指令BLDD(BlockMoveFromDataMemorytoDataMemory)指令BLPD(BlockMoveFromProgramMemorytoDataMemory)指令CALA(CallSubroutineatLocationSpecifiedbyAccumulator)指令CALL(CallUnconditionally)指令CC(CallConditionally)指令

CLRC(ClearControlBit)指令CMPL(ComplementAccumulator)指令CMPR(CompareAuxiliaryRegisterWithAR0)指令DMOV(DataMoveinDataMemory)指令I(lǐng)DLE(IdleUntilInterrupt)指令I(lǐng)N(InputDataFromPort)指令I(lǐng)NTR(SoftwareInterrupt)指令

LACC(LoadAccumulatorWithShift)指令LACL(LoadLowAccumulatorandClearHighAccumulator)指令LACT(LoadAccumulatorWithShiftSpecifiedbyTREG)指令LAR(LoadAuxiliaryRegister)指令LDP(LoadDataPagePointer)指令LPH(LoadProductRegisterHighWord)指令LST(LoadStatusRegister)指令LT(LoadTREG)指令LTA(LoadTREGandAccumulatePreviousProduct)指令LTD(LoadTREG,AccumulatePreviousProduct,andMoveData)指令LTP(LoadTREGandStorePREGinAccumulator)指令

LTS(LoadTREGandSubtractPreviousProduct)指令MAC(MultiplyandAccumulate)指令MACD(MultiplyandAccumulateWithDataMove)指令MAR(ModifyAuxiliaryRegister)指令MPY(Multiply)指令MPYA(MultiplyandAccumulatePreviousProduct)指令MPYS(MultiplyandSubtractPreviousProduct)指令MPYU(MultiplyUnsigned)指令NEG(NegateAccumulator)指令NMI(NonmaskableInterrupt)指令NOP(NoOperation)指令NORM(NormalizeContentsofAccumulator)指令OR(ORWithAccumulator)指令OUT(OutputDatatoPort)PAC(LoadAccumulatorWithProductRegister)指令POP(PopTopofStacktoLowAccumulator)指令POPD(PopTopofStacktoDataMemory)指令PSHD(PushData-MemoryValueOntoStack)指令PUSH(PushLowAccumulatorOntoStack)RET(ReturnFromSubroutine)指令RETC(ReturnConditionally)指令ROL(RotateAccumulatorLeft)指令ROR(RotateAccumulatorRight)指令RPT(RepeatNextInstruction)指令SACH(StoreHighAccumulatorWithShift)指令SACL(StoreLowAccumulatorWithShift)指令SAR(StoreAuxiliaryRegister)指令SBRK(SubtractShort-ImmediateValueFromAuxiliaryRegister)指令SETC(SetControlBit)指令SFL(ShiftAccumulatorLeft)指令SFR(ShiftAccumulatorRight)指令SPAC(SubtractPREGFromAccumulator)指令SPH(StoreHighPREG)指令SPL(StoreLowPREG)指令SPLK(StoreLong-ImmediateValuetoDataMemory)指令SPM(SetPREGOutputShiftMode)指令SQRA(SquareValueandAccumulatePreviousProduct)指令SQRS(SquareValueandSubtractPreviousProduct)指令

SST(StoreStatusRegister)指令

SUB(SubtractFromAccumulator)指令SUBB(SubtractFromAccumulatorWithBorrow)指令SUBC(ConditionalSubtract)指令SUBS(SubtractFromAccumulatorWithSignExtensionSuppressed)指令SUBT(SubtractFromAccumulatorWithShiftSpecifiedbyTREG)指令TBLR(TableRead)指令TBLW(TableWrite)指令TRAP(SoftwareInterrupt)指令XOR(ExclusiveORWithAccumulator)指令ZALR(ZeroLowAccumulatorandLoadHighAccumulatorWithRounding)指令3.3C2xx的偽指令偽指令是指示性語句,一般不產(chǎn)生指令代碼,它在匯編過程中與匯編程序“通信”,說明源程序的起止、分段情況、安排各類信息的存儲結(jié)構(gòu)以及有關(guān)的變量說明等。具體實現(xiàn)以下任務(wù):⑴將數(shù)據(jù)和代碼匯編進特定的段;⑵為初始化的變量保留存儲器空間;⑶展開列表的形式;⑷匯編條件塊;⑸定義全局變量;⑹指定匯編器可以獲得宏的定義庫;⑺檢查符號調(diào)試信息。3.3C2xx的偽指令

一、初始化段與未初始化段開發(fā)系統(tǒng)默認的匯編語言以段(section)為基本單元,一個程序包括若干段,每個段又由若干語句構(gòu)成。段又包括:1)初始化段:可以是程序代碼、程序中用到的常量、數(shù)據(jù)表等信息。初始化段在程序下載時需要寫入數(shù)據(jù)和代碼。2)未初始化段:用于存儲變量。程序下載時無須進行寫代碼和數(shù)據(jù)的操作,只是預(yù)留空間用于程序運行時存儲變量值。3.3C2xx的偽指令

段的名稱和屬性可以用戶來定義,如果不定義,系統(tǒng)默認為如下三個段:1)程序代碼段:.text,通常用于包含可執(zhí)行程序代碼。2)初始化數(shù)據(jù)段:.data,通常用于包含已初始化的數(shù)據(jù)。3)未初始化數(shù)據(jù)段:.bss,通常用于為未初始化的變量保留空間。用戶可以用如下兩條偽指令來定義特定段:1).sect:自定義初始化段,格式為:[symbol].sect“section_name”其中,Symbol:符號地址;Section_name:段名。2).usect:自定義未初始化段,格式為:[symbol].usect“section_name”,Length其中,Symbol:符號地址;Section_name:段名;length:段的長度(字數(shù),如8),這個長度還可以是二維數(shù)組(如12*6)。3.3C2xx的偽指令三、常用偽指令

偽指令是用于編譯的輔助指令,它們不會最終生成目標(biāo)代碼。X2XX使用了下面的常用偽指令:語法說明.bss

Symbol,size在.bss段中,為變量保留size字節(jié)的空間。.data將初始化數(shù)據(jù)匯編到.data段。.text將可執(zhí)行代碼匯編到.text段。[symbol].usect

“sect

溫馨提示

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

評論

0/150

提交評論