版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章TMS320C54xDSP匯編指令5.1匯編程序格式5.2匯編表達(dá)式
5.3指令中的符號(hào)及縮寫5.4指令系統(tǒng)5.5可重復(fù)和不可重復(fù)執(zhí)行的指令5.6匯編偽指令匯編語(yǔ)言源程序文件包含三大匯編語(yǔ)言要素:匯編指令、匯編偽指令和宏命令,它們之間的有機(jī)組合可完成特定的程序功能。
匯編語(yǔ)言編程有助記符指令集和代數(shù)指令集兩種,但這兩種指令集不能混用。本章介紹助記符指令集,后續(xù)章節(jié)使用的也是助記符指令。DSP匯編源程序的后綴為.asm,就是assembler(匯編)的縮寫。
5.1匯編程序格式
助記符指令一般由以下四部分(字段)組成,其中有中括號(hào)([])的部分為可選項(xiàng)。
[標(biāo)號(hào)][:]助記符[操作數(shù),…][;注釋]助記符指令的書寫規(guī)則如下:
(1)所有包含偽指令的語(yǔ)句必須在一行內(nèi)列出;
(2)對(duì)于其他指令,如果某行的最后加了反斜杠(\),表示下一行是該行的繼續(xù);
(3)所有語(yǔ)句必須以標(biāo)號(hào)、空格或分號(hào)開始;
(4)標(biāo)號(hào)為可選項(xiàng),如果使用,必須從一行的第一列位置(行首)開始,標(biāo)號(hào)的冒號(hào)(:)為可選項(xiàng),不作為標(biāo)號(hào)的一部分;
(5)各字段之間必須用一個(gè)或多個(gè)空格分開,制表符Tab鍵等效于空格,而且能實(shí)現(xiàn)自動(dòng)對(duì)齊;
(6)注釋為可選項(xiàng),如果使用則以分號(hào)(;)開始。
以上除注釋可以使用中文字符外,其他均為英文字符。
1.標(biāo)號(hào)
標(biāo)號(hào)由A~Z、a~z、0~9、_和$等符號(hào)組成,區(qū)分大小寫,最長(zhǎng)可達(dá)32個(gè)字符,但第一個(gè)字符不能是數(shù)字。標(biāo)號(hào)后面可以帶冒號(hào)(:),但冒號(hào)不作為標(biāo)號(hào)的一部分。
如果使用標(biāo)號(hào),標(biāo)號(hào)的值就是段程序計(jì)數(shù)器(SPC)的當(dāng)前值,也就是該行代碼開始存儲(chǔ)的地址。
例5.1中是一段用匯編語(yǔ)言編寫的FIR濾波函數(shù)程序,其中_FIR是一個(gè)標(biāo)號(hào),表示這段代碼的入口地址。標(biāo)號(hào)_FIR以下劃線(_)開始,可以在C語(yǔ)言程序文件中進(jìn)行調(diào)用。因?yàn)镃文件的函數(shù)名經(jīng)編譯后,會(huì)自動(dòng)在函數(shù)名前加下劃線(_)。例5.1一段FIR濾波函數(shù)程序。
_FIR:
;保護(hù)子程序用到的輔助寄存器
FRAME
-1;FRAME用于開辟局部幀,保護(hù)主函數(shù)傳遞來的局部變量
PSHM
AR2
PSHM
AR3
PSHM
ST1;ST1含有SXM、FRCT、OVM等控制位
STM#_input_mix,input_mix_P
LD*input_mix_P,A;將當(dāng)前采樣值載入到A中
CALLfir;濾波結(jié)果也返回至A中
;恢復(fù)輔助寄存器和原來的運(yùn)算狀態(tài)
POPMST1
POPMAR3
POPMAR2
FRAME1
RET
2.助記符
助記符不能從一行的第一列開始書寫,否則被認(rèn)為是標(biāo)號(hào)。助記符中還包括偽指令或宏調(diào)用。
3.操作數(shù)
操作數(shù)字段是一個(gè)操作數(shù)列表,根據(jù)指令要求操作數(shù)可以有一個(gè)或多個(gè),也可能沒有操作數(shù)。操作數(shù)之間用逗號(hào)(,)隔開,它可以是常數(shù)、符號(hào)或符號(hào)表達(dá)式,其前綴規(guī)定如下所述。
前綴#:表示其后的操作數(shù)為立即數(shù)。
前綴*:表示其后的操作數(shù)為間接尋址。
ADD#123,B;將立即數(shù)123(十進(jìn)制)加到累加器B上
LD*AR1,A;將AR1所指向的單元內(nèi)容裝載到累加器
A中
各種數(shù)據(jù)的前后綴規(guī)定如下:
二進(jìn)制整數(shù),其后加B或b,最多16位,不足16位,其高位用0填充。
八進(jìn)制整數(shù),其后加Q或q,或者在其前面加數(shù)字0,最多6位,不足6位,其高位用符號(hào)位填充。十進(jìn)制整數(shù),由十進(jìn)制字符組成,范圍為-32768~65535。
十六進(jìn)制整數(shù),其后加H或h,或者在其前面加字符0x,必須以數(shù)字0~9開始,最多4位,不足4位,其高位用符號(hào)位填充。
浮點(diǎn)數(shù),IEEE-32bit格式,輸入格式如下:
[±][nnn.nnn]e[±nnn]數(shù)據(jù)范圍從1.175494e-38到3.40282346e38,除非寫成整
數(shù)形式,否則小數(shù)點(diǎn)不能省略。如3.e5合法,而3e5則非法,編譯器不能識(shí)別。nnn均為十進(jìn)制字符,指數(shù)為以10為底的
指數(shù)。
操作數(shù)可以使用以下符號(hào)來表示。
(1)用.global、.def和.ref定義的全局標(biāo)號(hào),用$或name?定義的局部標(biāo)號(hào)。全局標(biāo)號(hào)具有系統(tǒng)唯一性,不能重新定義;局部標(biāo)號(hào)只有局部意義,在同一個(gè)匯編程序中可重新定義和使用。
(2)用.set定義的符號(hào)常數(shù)。
(3)用.mmregs定義的映射寄存器符號(hào)。
(4)用.asg定義的替代符號(hào)等。
4.注釋
注釋可以從一行的任意列開始,除第一符號(hào)是分號(hào)(;)
外。注釋中可以使用ASCII字符、空格以及中文字符,建
議多加注釋,以增加程序的可讀性。
5.2匯編表達(dá)式
表達(dá)式是由運(yùn)算符組合起來的常數(shù)或符號(hào)構(gòu)成的,它的值必須是唯一或絕對(duì)的,有效值范圍為-32768~32767。表5.1列出了匯編表達(dá)式中可用的運(yùn)算符,C54x匯編器使用和C語(yǔ)言一樣的優(yōu)先級(jí)表示,用小括號(hào)(())可以改變優(yōu)先順序。
5.3指令中的符號(hào)及縮寫
在介紹C54x指令系統(tǒng)之前,應(yīng)先說明指令系統(tǒng)中使用的符號(hào)和縮寫,如表5.2所示。
5.4指令系統(tǒng)
TMS320C54x的指令集包含四種基本類型的操作,分別如下:
(1)加載和存儲(chǔ)指令,包括加載、存儲(chǔ)以及條件存儲(chǔ)和復(fù)合加載存儲(chǔ)的指令等。
(2)程序控制指令,包括分支轉(zhuǎn)移、調(diào)用、中斷、返回、重復(fù)等程序控制指令。
(3)算術(shù)運(yùn)算指令,包括加法、減法、乘法、乘累加、32位操作數(shù)運(yùn)算以及其他一些專用指令。
(4)邏輯運(yùn)算指令,包括與、或、異或、移位和測(cè)試指令等。5.4.1加載和存儲(chǔ)指令
C54x的加載和存儲(chǔ)指令包括加載指令、存儲(chǔ)指令、條件存儲(chǔ)指令和混合加載存儲(chǔ)指令,如表5.3所示。5.4.2程序控制指令
C54x的程序控制指令包括分支轉(zhuǎn)移指令、子程序調(diào)用指令、中斷指令、返回指令、重復(fù)指令、堆棧操作指令以及混合程序控制指令,如表5.4所示。5.4.3算術(shù)運(yùn)算指令
C54x的算術(shù)運(yùn)算指令包括加法指令、減法指令、乘法指令、乘累加和乘減指令、雙字/雙精度運(yùn)算指令以及專用指令,如表5.5所示。5.4.4邏輯運(yùn)算指令
C54x的邏輯運(yùn)算指令包括與指令、或指令、異或指令、移位指令以及測(cè)試指令,如表5.6所示。5.4.5并行操作指令
C54x的并行操作指令包括并行裝載和存儲(chǔ)指令、并行存儲(chǔ)加/減指令和并行存儲(chǔ)乘法指令,如表5.7所示。
5.5可重復(fù)和不可重復(fù)執(zhí)行的指令
5.5.1重復(fù)執(zhí)行時(shí)變成單周期的多周期指令
下列指令單獨(dú)執(zhí)行時(shí)為多周期執(zhí)行指令,執(zhí)行周期為2~5個(gè)周期不等。但當(dāng)用RPT重復(fù)執(zhí)行時(shí),在指令流水線下均變成單周期指令,同樣可以達(dá)到非常快的速度。
(1)濾波運(yùn)算類指令有FIRS、MACD和MACP。
(2)數(shù)據(jù)傳送類指令有MVDK、MVDM、MVDP、MVKD、MVMD、MVPD、READA和WRITA。5.5.2不可重復(fù)執(zhí)行的指令
下列指令不能建立指令流水線執(zhí)行過程,因而不能用RPT重復(fù)執(zhí)行,時(shí)間效率較低。
(1)運(yùn)算類指令有ADDM、ANDM、ORM、XORM和RND。
(2)加載存儲(chǔ)類指令有LDARP或DP、DST和MVMM。
(3)程序控制類指令基本不能重復(fù)執(zhí)行,不能重復(fù)執(zhí)行的程序控制指令分別如下。①分支轉(zhuǎn)移指令:B[D]、BACC[D]、BANZ[D]、BC[D]、FB[D]和FBACC[D];
②子程序調(diào)用指令:CALA[D]、CALL[D]、CC[D]、FCALA[D]和FCALL[D];
③中斷指令:INTR和TRAP;
④返回指令:FRET[D]、FRETE[D]、RC[D]、RET[D]、RETE[D]和RETF[D];⑤重復(fù)指令:RPT、RPTZ和RPTB[D];
⑥混合程序控制指令:IDLE、RESET、RSBX、SSBX和XC。
(4)其他不能重復(fù)執(zhí)行的指令是CMPR。
5.6匯編偽指令
匯編偽指令為程序提供數(shù)據(jù)并控制匯編過程,主要功
能有:
(1)變量定義、分配存儲(chǔ)空間,常量初始化;
(2)代碼段定義等操作;
(3)調(diào)用其他文件、條件匯編、提取宏等操作;
(4)調(diào)試信息、輸出列表等操作。5.6.1變量定義和常數(shù)初始化
有關(guān)變量定義及常數(shù)初始化的偽指令有:
.mmregs
定義存儲(chǔ)器映射寄存器(MMR)的符號(hào)。使用這條指令后,凡是存儲(chǔ)器映射寄存器都可直接使用此符號(hào),而不必逐一定義其地址。
.defsymbol1[,symbol2,…]在當(dāng)前文件中定義一個(gè)或多個(gè)符號(hào),可以被其他文件
引用。
.refsymbol1[,symbol2,…]
在當(dāng)前文件中引用其他文件中定義的一個(gè)或多個(gè)符號(hào)。.globalsymbol1[,symbol2,…]
定義一個(gè)或多個(gè)全局(外部)符號(hào),可以是C文件定義的
符號(hào)。
.intvalue1[,value2,…]初始化一個(gè)或多個(gè)16位整數(shù),其首地址由.int前面的標(biāo)號(hào)決定,個(gè)數(shù)由數(shù)據(jù)個(gè)數(shù)決定。如匯編偽指令:
K1:.int3,5,7
相當(dāng)于下面的C語(yǔ)言語(yǔ)句:
K1[3]=[3,5,7];
編譯器在編譯數(shù)據(jù)時(shí),一般是先編譯全部數(shù)據(jù),再將數(shù)據(jù)截短為16位的數(shù)據(jù),而不檢查數(shù)據(jù)超出范圍之類的錯(cuò)誤。數(shù)據(jù)本身的錯(cuò)誤由程序編寫人員負(fù)責(zé)處理。
.wordvalue1[,value2,…]
此偽指令的功能和用法與.int的功能和用法相同。
.floatvalue1[,value2,…]
初始化一個(gè)(段)浮點(diǎn)數(shù)。一個(gè)浮點(diǎn)數(shù)占用2個(gè)字的存儲(chǔ)單元,其存儲(chǔ)格式如圖5.1所示。圖5.1一個(gè)浮點(diǎn)數(shù)的存儲(chǔ)格式其中,s為一個(gè)1位符號(hào)域,e為8位有偏指數(shù),f為23位小數(shù),高16位在低地址,低16位在高地址,且自動(dòng)對(duì)齊偶字邊界,即低地址在偶地址上。假設(shè)數(shù)據(jù)段(.data)地址從0x100開始,如例5.2所示,則3.14從0x0102地址開始存儲(chǔ),0x0101單元空著。
.doublevalue1[,value2,…]
此偽指令的功能和用法與.float的功能和用法相同。
.longvalue1[,value2,…]
初始化一個(gè)或多個(gè)32位整數(shù),高16位在低地址(偶地址),低16位在高地址,且自動(dòng)對(duì)齊偶字邊界。
.string“string1”[,“string2”,…]
初始化一個(gè)或多個(gè)文本字符串。每個(gè)字符為8位數(shù)據(jù),但仍用一個(gè)字單元(16位)保存,高8位填充為0。
.charvalue1[,value2,…]
.bytevalue1[,value2,…]
初始化一個(gè)或多個(gè)字節(jié),用法同偽指令.string。
.set
將前面的標(biāo)號(hào)定義為符號(hào)常量,如:
K:
.set3//編譯時(shí)將K換成3
.asg定義替代符號(hào),編譯時(shí)將前面的字符串替代為后面的符號(hào)。如編譯以下兩行代碼:
.asg
AR1,DATA_P1//DATA_P1是AR1的別名
.asgAR1,DATA_P2//DATA_P2是AR1的別名
編譯器將DATA_P1和DATA_P2都替換成AR1,或者說,AR1可以有多個(gè)別名。
.align[sizeinwords]將SPC(段指針)調(diào)整到一個(gè)由sizeinwords(2的整數(shù)次冪)指定的字邊界,以滿足某些特殊尋址的要求。sizeinwords默認(rèn)為128字(頁(yè)邊界)。如在例5.2中,若在f1前面一行加上“.align”,則f1從0x180開始存儲(chǔ),
*(0x0180)=0x4048,*(0x0181)=0xF5C3。
.space[sizeinbits]
在當(dāng)前段保留size個(gè)比特存儲(chǔ)空間。若需要保留多少個(gè)字的空間,可將size定義為16的整數(shù)倍,如“.space4*16”。
.even
將SPC(段指針)調(diào)整到一個(gè)偶字邊界,它相當(dāng)于“.align2”偽指令。5.6.2段定義相關(guān)偽指令
.text
匯編到.text段(可執(zhí)行代碼段),.text段為系統(tǒng)默認(rèn)產(chǎn)生的程序段名。
.data
匯編到.data段(已初始化數(shù)據(jù)段),.data段為系統(tǒng)默認(rèn)產(chǎn)生的已初始化數(shù)據(jù)段名。
.bsssymbolsizeinwords[,[blockingflag][,alignmentflag]]
定義一個(gè)未初始化段,為symbol變量分配sizeinwords個(gè)字的存儲(chǔ)空間,可以指定分塊標(biāo)志(blockingflag)和存儲(chǔ)邊界(alignmentflag)。.bss段為系統(tǒng)默認(rèn)產(chǎn)生的未初始化數(shù)據(jù)段
名。如:
.bssbuffer,K_size,1,128
//為變量buffer分配K_size個(gè)存儲(chǔ)單元,1段,對(duì)齊128字邊界.sect“sectionname”定義已初始化命名段,匯編到sectionname的段,它的作用類似于.text和.data,為已初始化段。段名sectionname在編譯時(shí)僅前8個(gè)字符有效。
.usect“sectionname”,sizeinwords[,[blockingflag][,alignmentflag]]
定義未初始化命名段,匯編到sectionname的段,它的作用和使用類似于.bss,為未初始化段。
在行首可以有標(biāo)號(hào),以定義段的首地址。段名sectionname在編譯時(shí)僅前8個(gè)字符有效。5.6.3引用其他文件和條件匯編
.include“filename”
將指定文件復(fù)制到當(dāng)前位置,可以是程序、數(shù)據(jù)和符號(hào)定義等。在行首可以有標(biāo)號(hào),以定義段的首地址。如:
COFF_START:.include″coff\\LPF.inc″
//在當(dāng)前文件夾的coff子文件夾中
.if、.elseif、.else、endif
條件編譯,匯編器根據(jù)表達(dá)式的真假情況進(jìn)行編譯。
.end
結(jié)束匯編,編譯器忽略.end后面的代碼。5.6.4宏定義和宏引用
如果在程序當(dāng)中需要多次執(zhí)行某段程序的一個(gè)簡(jiǎn)短的程序代碼時(shí),可以把這段程序定義為宏,然后在需要時(shí)調(diào)用,以提高編程效率和執(zhí)行效率。
宏定義如下:
macname.macro[parameter1][,parameter2,…]…
[.mexit]
…
.endm[HT5]
其中,macname為宏名,放在行首,.mexit為宏退出,可選項(xiàng),.endm為結(jié)束宏定義。.mexit類似于C語(yǔ)言中的goto語(yǔ)句,其后面的代碼不執(zhí)行,直接跳轉(zhuǎn)到.endm處。如宏add3的定義如下:
.text
add3.macro p1,p2,p3,p//p=p1+p2+p3
LDp1,A
ADDp2,A
ADDp3,A
STLA,p
.endm當(dāng)執(zhí)行
add3a1,b1,c1,d1//d1=a1+b1+c1,變量不能用a、b表示,以免與累加器A、B名相混淆時(shí),匯編器執(zhí)行如下代碼:LD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版建筑工程泥工施工勞務(wù)合同
- 二手商品房買賣合同范本2024年版(買賣雙方權(quán)益保障)
- 二零二五版廣東教育機(jī)構(gòu)勞務(wù)派遣服務(wù)協(xié)議3篇
- 二零二五年建筑公司項(xiàng)目管理團(tuán)隊(duì)勞動(dòng)合同3篇
- 2025年房產(chǎn)社交媒體營(yíng)銷合同3篇
- 二零二五年文化旅游產(chǎn)業(yè)PPP項(xiàng)目特許經(jīng)營(yíng)合同3篇
- 二零二五年度高效復(fù)合肥生產(chǎn)與銷售合作框架協(xié)議3篇
- 個(gè)性化2024版民間資金借貸擔(dān)保協(xié)議版B版
- 二零二五版光纖熔接項(xiàng)目融資服務(wù)合同范本3篇
- 2025年人工智能技術(shù)研發(fā)與應(yīng)用銷售合同書3篇
- 割接方案的要點(diǎn)、難點(diǎn)及采取的相應(yīng)措施
- 2025年副護(hù)士長(zhǎng)競(jìng)聘演講稿(3篇)
- 福建省廈門市2023-2024學(xué)年高二上學(xué)期期末考試語(yǔ)文試題(解析版)
- 藥理治療中樞神經(jīng)系統(tǒng)退行性疾病藥.pptx
- 強(qiáng)三基反三違除隱患促安全百日專項(xiàng)行動(dòng)實(shí)施方案
- 新人教版七年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)專項(xiàng)訓(xùn)練大全
- 標(biāo)準(zhǔn)預(yù)防--ppt課件
- 壓力管道氬電聯(lián)焊作業(yè)指導(dǎo)書
- 審計(jì)資料封面(共6頁(yè))
- 加油站施工情況報(bào)告安裝
- 分子標(biāo)記及遺傳連鎖圖譜
評(píng)論
0/150
提交評(píng)論