版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
2024年3月21日DSP原理及應用1第5章TMS320C54xDSP的匯編語言程序設計5.1匯編語言程序編寫方法
5.2
匯編語言的指令系統(tǒng)5.3
TMS320C54xDSP匯編語言的編輯、匯編與鏈接過程5.4匯編器5.5鏈接器2024年3月21日DSP原理及應用25.1匯編語言程序編寫方法
TMS320C54x匯編語言源程序由指令性語句、偽指令語句和宏指令語句構成。指令性語句:能產(chǎn)生相應的機器代碼偽指令語句:不生成代碼,在程序匯編時起指示作用,如定義變量等宏指令語句:有獨立功能的一段程序代碼2024年3月21日DSP原理及應用35.1.1
匯編語言源程序格式匯編語言源程序中的每一行通常包含4個局部:標號區(qū)、助記符區(qū)、操作數(shù)區(qū)和注釋區(qū)。
[標號][:]
助記符
[操作數(shù)]
[;注釋]指令語法格式:
【例1】
助記符指令源語句舉例。
NANHUA
.set
1
;符號NANHUA=1
Begin:
LD
#NANHUA,AR1
;將1加載到AR1
標號助記符操作數(shù)注釋1.標號
所有匯編指令和大多數(shù)匯編偽指令都可以選用標號,供本程序或其它程序調(diào)用。①標號必須從語句的第1列寫起,其后的冒號“:”可任選;②標號為任選項,假設不使用標號,那么語句的第一列必須是空格、星號或分號;③標號是由字母、數(shù)字以及下劃線和美元符號等組成,最多可達32個字符;④標號分大小寫,且第一個字符不能是數(shù)字。2024年3月21日DSP原理及應用42.助記符
助記符用來表示指令所完成的操作,可以是匯編語言指令、匯編偽指令、宏偽指令。助記符指令:一般用大寫,不能從第一列開始;
匯編偽指令:用來為程序提供數(shù)據(jù)和控制匯編進程。以句號“.”開始,且用小寫;宏偽指令:用來定義一段程序,以便宏調(diào)用來調(diào)用這段程序。以句號“.”開始,且用小寫;
2024年3月21日DSP原理及應用53.操作數(shù)操作數(shù)是指指令中參與操作的數(shù)值或匯編偽指令定義的內(nèi)容,緊跟在助記符的后面,由一個或多個空格分開。
操作數(shù)之間必須用逗號“,”分隔;
操作數(shù)可以是常數(shù)、符號或表達式;
操作數(shù)中的常數(shù)、符號或表達式可用來作為地址、立即數(shù)或間接地址;2024年3月21日DSP原理及應用64.注釋
用來說明指令功能的文字,便于用戶閱讀。
注釋可位于句首或句尾,位于句首時,以“*”或“;”開始,位于句尾時,以分號“;”開始。
注釋可單獨一行或數(shù)行;
注釋是任選項。
2024年3月21日DSP原理及應用75.1.2
匯編語言中的常數(shù)和字符串匯編器可支持7種類型的常數(shù)〔常量〕。數(shù)據(jù)類型舉例說明二進制1110001b或1110001B八進制226q或572Q十進制1234或+1234或-11234缺省型十六進制0A40h或0A40H或0xA40浮點數(shù)1.623e-23僅用于C語言字符‘D’字符串“thisisastring”2024年3月21日DSP原理及應用8
匯編程序中的符號用于標號、常數(shù)和替代字符。由字母、數(shù)字以及下劃線和美元符號〔A~Z,a~z,0~9,_和$〕等組成;符號名最多可長達200個字符;在符號中,第1位不能是數(shù)字,并且符號中不能含空格。符號區(qū)分大小寫。2024年3月21日DSP原理及應用95.1.2
匯編語言中的符號表達式可以是常數(shù)、符號,或者是由算術運算符分開的一系列常數(shù)和符號。
有效表達式的值:-32
768~32
767影響表達式的主要因素:
①圓括號()。圓括號內(nèi)的表達式最先計算;
不能用大括號{}或中括號[]代替圓括號()。
②優(yōu)先級?!疌54x匯編器使用與C語言相似的優(yōu)先級,優(yōu)先級高的先計算;
③
從左到右運算。具有相同的優(yōu)先級,按從左到右的順序計算。如,16/8*2=4表達式2024年3月21日DSP原理及應用10序號符號運算操作求值順序1+-~!取正、取負、按位求補、邏輯負
從右至左2*/%乘法、除法、求模從左至右3+-加法、減法從左至右4^指數(shù)
從左到右
5<<>>左移、右移從左至右6<<=小于、小于等于從左至右7>>=大于、大于等于從左至右8!==不等于、等于從左至右9&按位與運算從左至右10∧
按位異或運算從左至右11|按位或運算從左至右表中運算符的優(yōu)先級是從上到下,同級是從左到右。2024年3月21日DSP原理及應用11
匯編時執(zhí)行了算術操作以后,匯編器檢查上溢和下溢的條件。當出現(xiàn)上溢或下溢時,匯編器會發(fā)出一個值被截斷了的警告。
匯編器不檢查乘法的溢出狀態(tài)。條件表達式
匯編器支持關系運算符,可以用于任何表達式。
=
等于==等于!=不等于
>=大于或等于<=小于或等于
>
大于<
小于
表達式溢出
條件表達式為真時其值為1,否那么為0。表達式兩邊的操作數(shù)類型必須相同表達式的合法性
有效定義的表達式是指表達式中的符號或匯編時間常數(shù)在表達式之前就已經(jīng)被定義。有效定義的表達式的計算必須是絕對的。【例2】無效定義的表達式。
.globalYbadsym1.setYbadsym2.set50h+Ybadsym3.set50h
+
ZZ.set60h;定義Y為全局外部符號;Y在當前文件中未定義
;無效的表達式;無效的表達式,Z還未定義;定義Z,但應在表達式使用之前2024年3月21日DSP原理及應用13【例3】
有效定義的表達式。.datalabel1.word0.word1.word2label2.word3X.set50hgoodsym1.setl00h
+
Xgoodsym2.set$goodsym3.setlabel1goodsym4.setlabel2-label1;將16位值0,1,2放入標號為
label1的當前段連續(xù)字中;有效定義的表達式;引用已定義的所有局部標號;有效定義的表達式;定義X的值;將3放入標號為label2的字中2024年3月21日DSP原理及應用145.2匯編語言的指令系統(tǒng)兩種指令系統(tǒng):代數(shù)指令系統(tǒng):以表達式的形式書寫匯編指令系統(tǒng):以助記符為根底匯編指令系統(tǒng),共129條指令,由于操作數(shù)尋址方式不同,派生有205條指令。按指令功能分類:算術運算指令、邏輯運算指令、程序控制指令、加載和存儲指令。5.2.1指令系統(tǒng)中的符號和縮寫表5.3指令系統(tǒng)中的符號和縮寫返回首頁返回本節(jié)5.2.2算術運算指令C54x的算術運算指令包括加法指令、減法指令、乘法指令、乘累加指令與乘法減法指令、雙字/雙精度運算指令及專用指令。
指令中表示整數(shù)時,有有符號數(shù)和無符號數(shù)兩種格式。TMS320C54x提供了多條用于加法的指令,如ADD、ADDC、ADDM和ADDS,具體說明見表5.51)加法指令ADD指令有10種句法。如果目的累加器dst被指定,那么結果存放在dst中;如果沒有被指定,那么結果存放在源累加器src中。移位操作數(shù)的范圍為-16≤SHIFT≤15,0≤SHFT≤15。正數(shù)為左移位,左移位低位添0,高位受SXM位影響。如果SXM=1,那么高位進行符號擴展;如果SXM=0,那么高位清零。負數(shù)為右移位,受SXM位影響。如果SXM=1,那么高位進行符號擴展;如果SXM=0,那么高位清零。表5.5加法指令2)減法指令TMS320C54x中減法指令有許多,如SUB、SUBB、SUBC和SUBS,具體說明見表5.6。其中,SUBS是無符號數(shù)的減法運算,SUBB是帶借位的減法運算,而SUBC是含條件的移位減。在TMS320C54x中,沒有專門的除法指令,要實現(xiàn)除法運算一般有兩種方法:一種方法是用乘法進行,如要除以某個數(shù),可以先求出該數(shù)的倒數(shù),再乘以其倒數(shù);另一種方法是用SUBC指令,再重復16次減法運算,可實現(xiàn)兩個無符號數(shù)的除法運算。減法指令中狀態(tài)位與加法指令中的根本相同。表5.6減法指令3)乘法指令TMS320C54x中有大量的乘法運算指令,其結果都是32位,放在A或B累加器中。乘數(shù)在TMS320C54x的乘法指令中的使用很靈活,可以是T存放器、立即數(shù)、存儲單元以及A或B累加器的高16位。如果是無符號數(shù)相乘,那么使用一條專用于無符號數(shù)相乘的指令,即MPYU指令,其他指令都是有符號數(shù)的乘法。表5.7乘法指令【例10】實現(xiàn)整數(shù)乘法。LD #0050H,B ;將0050H裝入累加器ASTM#0200H,AR2 ;AR2=0200HST#0006H,*AR2 ;(0200H)=0006HRSBXFRCT ;清FRCT標志位,準備整數(shù)乘LD #2H,DP ;DP=002HLD *AR2,T;將AR2中的內(nèi)容0006H裝入T存放器MPY #-1,B ;完成0006H與-1相乘,結果放入B累加器(32位),;B=FFFFFFFFFCH4)乘加和乘減指令
乘加指令完成一個乘法運算,將乘積再與源累加器的內(nèi)容相加。指令中使用R后綴的,其運算結果要進行湊整。乘減指令完成從累加器B或源累加器src或目的累加器dst中減去T存放器或一個操作數(shù)與另一個操作數(shù)的乘積,結果存放在累加器B或dst或src中。表4-5是對乘加、乘減指令的說明。表5.8乘加和乘減指令【例11】MAC#345H,A,B
指令執(zhí)行前
指令執(zhí)行后A0000001000HA0000001000HB0000000000HB00000D2400HT0400HT0400HFRCT0FRCT0【例12】MAC#345H,A,B
指令執(zhí)行前
指令執(zhí)行后A0000001000HA0000001000HB0000000000HB00001A3800HT0400HT0400HFRCT1FRCT1【例13】MACR*AR3+,*AR4+,A,B
指令執(zhí)行前
指令執(zhí)行后A0000001000HA0000001000HB0000000004HB000C4C0000HT0008HT5678HFRCT1FRCT1AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲器
0100H5678H0100H5678H0200H1234H0200H1234H【例14】MACSU*AR3+,*AR4+,A
指令執(zhí)行前
指令執(zhí)行后A0000001000HA0009A0AA84HT0008HT8765HFRCT0FRCT0AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲器
0100H8765H0100H8765H0200H1234H0200H1234H
【例15】MAS*AR3+,*AR4+,A,B
指令執(zhí)行前
指令執(zhí)行后A0000001000HA0000001000HB0000000004HBFFF3B40F40HT0008HT5678HFRCT1FRCT1AR30100HAR30101HAR40200HAR40201H數(shù)據(jù)存儲器
0100H5678H0100H5678H0200H1234H0200H1234H表5.10雙精度〔32位操作數(shù)〕指令表5.11專用指令返回本節(jié)5.2.3邏輯運算指令邏輯指令包括與、或、異或〔按位〕、移位和測試指令。表5.12與邏輯運算指令表5.13或邏輯運算指令表5.14異或邏輯運算指令表5.15移位邏輯運算指令表5.16測試指令返回本節(jié)5.2.4程序控制指令程序控制指令包括分支轉(zhuǎn)移指令、子程序調(diào)用指令、中斷指令、返回指令、重復指令、堆棧操作指令及混合程序控制指令,分別如表4-13、表4-14、表4-15、表4-16、表4-17、表4-18及表4-19所示。表5.17分支轉(zhuǎn)移指令表5.18子程序調(diào)用指令表5.19中斷指令表5.20返回指令表5.21重復指令表5.22堆棧操作指令表5.23混合程序控制指令返回本節(jié)5.2.5加載和存儲指令加載和存儲指令包括加載指令、存儲指令、條件存儲指令、并行加載和存儲指令、并行加載和乘法指令、并行存儲和加/減法指令、混合加載和存儲指令。加載指令是將存儲器內(nèi)容或立即數(shù)賦給目的存放器;存儲指令是把源操作數(shù)或立即數(shù)存入存儲器或存放器。表5.24加載指令表5.25存儲指令表5.26條件存儲指令并行加載和存儲指令并行加載和乘法指令并行存儲和加/減法指令并行存儲和乘法指令混合加載和存儲指令〔數(shù)據(jù)塊傳送指令〕返回本節(jié)2024年3月21日642024年3月21日645.3匯編語言程序的編輯、匯編和鏈接過程
匯編
當匯編語言源程序編寫好以后,可利用’C54x的匯編器,對一個或多個源程序分別進行匯編,并生成列表文件(.lst)和目標文件(.obj)。
鏈接
所謂鏈接,就是利用’C54x的鏈接器,根據(jù)鏈接器命令文件(d)對已匯編過的一個或多個目標文件(.obj)進行鏈接,生成輸出文件(.out)和存儲器映像文件(.map)。2024年3月21日65匯編語言程序的編輯、匯編和鏈接過程匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標文件.out輸出文件.cmd鏈接命令文件.lst列表文件.map存儲器映像文件十六進制轉(zhuǎn)換程序HEX500-
o-
m-
l匯編器(Assembler)將匯編語言源文件匯編成機器語言COFF的目標文件。匯編器的功能如下:●將匯編語言源程序匯編成一個可重新定位的目標文件(.obj文件)?!窀鶕?jù)需要,可以生成一個列表文件(.lst文件)。●根據(jù)需要,可以在列表文件后面附加一張交叉引用表。●將程序代碼分成假設干段,為每個目標代碼段設置一個SPC(段程序計數(shù)器)?!穸x和引用全局符號。●匯編條件程序塊。●支持宏功能,允許定義宏命令。5.4匯編器2024年3月21日67COFF的一般概念
匯編器建立的目標文件格式稱之為公共目標文件格式(COFF)。
在編寫匯編語言程序時,COFF采用代碼段和數(shù)據(jù)段的形式,以便于模塊化的編程,使編程和管理變得更加方便。
段——是存儲器中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。一個目標文件中的每個段都是分開的和各不相同的。所有的COFF文件都包含三個形式的段:.text文本段.data數(shù)據(jù)段.bss保存空間段2024年3月21日DSP原理及應用68段與目標存儲器的對應關系
匯編器的任務:在匯編過程中,根據(jù)匯編命令用適當?shù)亩螌⒏骶植砍绦虼a和數(shù)據(jù)連在一起,構成目標文件。鏈接器的任務:就是分配存儲單元,將目標文件中的段重新定位到目標系統(tǒng)的存儲器中,這一過程稱為定位或分配。2024年3月21日692024年3月21日69目標文件中的段與目標存儲器之間的關系目標文件目標存儲器.bss.data.textRAME2PROMROM2024年3月21日70匯編器對段的處理
匯編器為每個段都安排了一個單獨的程序計數(shù)器稱之為段程序計數(shù)器SPC。SPC表示在程序代碼或數(shù)據(jù)段內(nèi)當前的地址。開始時匯編器將每個SPC置0。當匯編器將程序代碼或數(shù)據(jù)加到段內(nèi)時,增加相應的SPC值。假設再繼續(xù)對某個段匯編,那么相應的SPC就在先前的數(shù)值上繼續(xù)增加。鏈接器在鏈接時要對每個段進行重新定位。2024年3月21日715.5
鏈接器鏈接器的主要任務是根據(jù)鏈接命令文件(d),將一個或多個COFF目標文件鏈接起來,生成存儲器映像文件(.map)和可執(zhí)行的輸出文件(.out)。
在鏈接過程中,鏈接器將各個目標文件合并,并完成以下工作:●
將各個段配置到目標系統(tǒng)的存儲器。
●
對各個符號和段進行重新定位,并給它們指定一個最終的地址。
●
解決輸入文件之間未定義的外部引用。2024年3月21日72
鏈接器是開發(fā)’C54x器件必不可少的開發(fā)工具之一,它對段處理時有2個主要任務:①
將輸入段組合生成輸出段,即將多個.obj文件中的同名段合并成一個輸出段,也可將不同名的段合并產(chǎn)生一個輸出段;
②將輸出段定位到實際的存儲空間中。
鏈接器對段的處理1.缺省的存儲器分配鏈接器可對多個目標文件進行鏈接。假設鏈接文件中不使用MEMORY和SECTIONS命令,那么為默認方式。每個目標文件都有.text,.data、.bss段和命名段。假設采用默認鏈接,鏈接器將對多個目標文件中的各個段進行組合,形成各自的對應段,并將各個段配置到所指定的存儲器中,形成可執(zhí)行的目標模塊。在默認的方式下,鏈接器將從存儲器的0080h開始,對組合后的各段進行存儲器配置。2024年3月21日74
鏈接器有2條偽指令支持上述任務:
●MEMORY偽指令——用來定義目標系統(tǒng)的存儲器配置空間,包括對存儲器各局部命名,以及規(guī)定它們的起始地址和長度?!馭ECTIONS偽指令——用來指定鏈接器將輸入段組合成輸出段方式,以及輸出段在存儲器中的位置,也可用于指定子段。假設未使用偽指令,那么鏈接器將使用目標處理器默認的方法將段放入存儲空間。2.
將段放入存儲器空間2024年3月21日75
鏈接器命令文件的編寫與使用鏈接命令文件用來為鏈接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度特高壓變壓器采購合同范本3篇
- 2025年度玫瑰精油神經(jīng)酸膠囊產(chǎn)品市場拓展合同4篇
- 二零二五版園林景觀設計公司勞務合同模板下載2篇
- 2025年度臨時市場營銷活動執(zhí)行合同模板4篇
- 二零二五年度酒店餐飲部特色菜品創(chuàng)新研發(fā)合同3篇
- 2025年度兒童健康體檢與干預服務合同4篇
- 2025年水電站經(jīng)營權承包與水力發(fā)電設備租賃合同3篇
- 二零二五年度房產(chǎn)抵押貸款合同4篇
- 二零二五年度集裝箱式教室租賃合同3篇
- 2025年度溫泉度假村經(jīng)營管理合同范本4篇
- 山東省濰坊市2024-2025學年高三上學期期末 地理試題(無答案)
- 勞動法培訓課件
- 2024年建筑施工安全工作計劃(3篇)
- 2024屆九省聯(lián)考英語試題(含答案解析、MP3及錄音稿)
- 倉庫消防知識安全培訓
- 從事專業(yè)與所學專業(yè)不一致專業(yè)技術人員申報職稱崗位任職合格證明附件6
- 我國房屋建筑模板技術的研究綜述
- 人教版小學三年級上冊數(shù)學豎式筆算練習題
- 航天科工集團在線測評題
- 山東省濰坊新2025屆高三語文第一學期期末經(jīng)典試題含解析
- 醫(yī)院三基考核試題(康復理療科)
評論
0/150
提交評論