版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《企業(yè)戰(zhàn)略管理》課件
- 新生引航共筑未來
- 學(xué)校三年級班主任工作總結(jié)5篇
- 2023年-2024年新員工入職安全教育培訓(xùn)試題附答案(突破訓(xùn)練)
- 大學(xué)畢業(yè)晚會策劃書合集15篇
- 2023年-2024年新入職員工安全教育培訓(xùn)試題附下載答案可打印
- 2024員工三級安全培訓(xùn)考試題(原創(chuàng)題)
- 保護環(huán)境的建議書(合集15篇)
- 農(nóng)產(chǎn)品供應(yīng)鏈改革
- 《工傷管理條例》課件
- 駕駛員勞務(wù)派遣投標(biāo)方案
- 高三一本“臨界生”動員會課件
- 家長會課件:四年級家長會語文老師課件
- 神經(jīng)生物學(xué)復(fù)習(xí)知識點
- YY 0306-2023熱輻射類治療設(shè)備通用技術(shù)要求
- 中醫(yī)內(nèi)科學(xué)考試題庫及參考答案
- 建筑工程典型安全質(zhì)量事故案例分析及事故防治概要(大量案例)
- 吉林大學(xué)模板(經(jīng)典)課件
- 國開創(chuàng)業(yè)基礎(chǔ)期末筆試復(fù)習(xí)(含答案)
- 2023年軍事理論知識考試題(附含答案)
- 國開電大2022年春季期末考試《園產(chǎn)品貯藏技術(shù)》試題(試卷代號2713)
評論
0/150
提交評論