【學(xué)習(xí)課件】第4章TMS320C54x的軟件開發(fā)與設(shè)計_第1頁
【學(xué)習(xí)課件】第4章TMS320C54x的軟件開發(fā)與設(shè)計_第2頁
【學(xué)習(xí)課件】第4章TMS320C54x的軟件開發(fā)與設(shè)計_第3頁
【學(xué)習(xí)課件】第4章TMS320C54x的軟件開發(fā)與設(shè)計_第4頁
【學(xué)習(xí)課件】第4章TMS320C54x的軟件開發(fā)與設(shè)計_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第4章 TMS320C54x的軟件開發(fā)與設(shè)計4.1 TMS320C54x軟件開發(fā)過程 4.2 匯編語言程序的編輯、匯編和鏈接過程 4.3 COFF的一般概念 編輯ppt4.1 TMS320C54x軟件開發(fā)過程 C54x的應(yīng)用軟件開發(fā)主要完成以下工作:(1) 選擇編程語言編寫源程序 C54x提供2種編程語言,即匯編語言和C/C+語言。 對于完成一般功能的代碼,這兩種語言都可使用,但對于一些運算量很大的關(guān)鍵代碼,最好采用匯編語言來完成,以提高程序的運算效率。(2) 選擇開發(fā)工具和環(huán)境 C54x提供了兩種開發(fā)環(huán)境。即非集成開發(fā)環(huán)境和集成開發(fā)環(huán)境CCS。 編輯pptTMS320的開發(fā)工具是一個軟件包,

2、其中包括:C優(yōu)化編譯器匯編器連接器歸檔器交叉引用列表器十六進(jìn)制轉(zhuǎn)換公用程序編輯pptC優(yōu)化編譯器(C Compile) TI 為其TMS320系列 DSP提供了一系列的 C 編譯器。將標(biāo)準(zhǔn) C 源文件編譯成為相應(yīng)片種的匯編語言源代碼文件。完全符合ANSI C標(biāo)準(zhǔn)帶有一個完整的運行支持庫使用多種先進(jìn)技術(shù)來優(yōu)化 C 源代碼,以產(chǎn)生高效匯編代碼。編輯ppt匯編器(Assembler) 將匯編語言的源程序文件匯編成為機器語言的目標(biāo)程序文件,其格式為COFF(公用目標(biāo)文件格式)。匯編語言源程序可以包括匯編語言指令(instruction)、匯編偽指令(assembler directives)和宏指令(

3、macro directives)編輯ppt連接器(Linker) 連接器的基本任務(wù)是將目標(biāo)文件連接在一起,產(chǎn)生可執(zhí)行模塊。連接器可以接受的輸入文件包括匯編器產(chǎn)生的COFF目標(biāo)文件、命令文件、庫文件、以及已部分連接好了的文件。它所產(chǎn)生的可執(zhí)行COFF目標(biāo)模塊可以裝入各種開發(fā)工具,或由TMS320器件來執(zhí)行編輯ppt歸檔器(Archiver) 歸檔器允許用戶將一組文件歸入一個檔案文件(庫)。例如,將若干個宏歸入一個宏庫,匯編器將搜索這個庫,并調(diào)用源文件中使用的宏。也可以用歸檔器將一組目標(biāo)文件收入一個目標(biāo)文件庫,連接器將連接庫內(nèi)的成員,并解決外部引用編輯ppt交叉引用列表器(Cross-Refer

4、ence Lister) 交叉引用列表器是一個查錯的工具。它接受已經(jīng)連接好的目標(biāo)文件作為輸入,產(chǎn)生一個交叉引用列表作為輸出。它列出符號、符號的定義、以及它們在已經(jīng)連接的源文件中的引用編輯ppt十六進(jìn)制轉(zhuǎn)換公用程序(Hex Conversion Utility)將COFF目標(biāo)文件轉(zhuǎn)換成為若干種標(biāo)準(zhǔn)的文件格式:ASCII-十六進(jìn)制Extended TektronixIntel MCS-86Motorola Exorciser編輯ppt編輯ppt全匯編編程:代碼效率高,可直接對硬件設(shè)置;代碼量較大,可讀性差。全C編程:提高軟件開發(fā)速度和可讀性,方便軟件移植;代碼效率較低,硬件控制不方便?;旌暇幊?混

5、合編程幾種方法:(1)獨立編寫C/C+程序和匯編程序,分開編譯或匯編形成各自的目標(biāo)模塊,再用鏈接器將C/C+模塊和匯編模塊鏈接起來。(2)在C/C+程序中直接內(nèi)嵌匯編語句。(3)將C程序編譯生成相應(yīng)的匯編程序,手工修改和優(yōu)化C編譯器生成的匯編代碼。編輯ppt混合編程說明: 變量和函數(shù)命名規(guī)則 無論是變量還是函數(shù),在C語言和匯編中均需要說明為全局的。在C語言中需要有準(zhǔn)確的函數(shù)原型說明。 在C語言中保持“自然”的命名,而在匯編語言中該名字需加一個下劃線作為前綴。 例:C語言部分:extern int product(int *x, int *y);extern int i;匯編部分:.global

6、 _i.global _product編輯ppt混合編程說明: 變量訪問規(guī)則 C程序訪問由.bss定義的匯編變量: (1)匯編程序中,該變量名前要加下劃線“_”;(2)匯編程序中,用.global命令將其定義為全局變量;(3)在C程序中,將變量說明為外部變量C語言部分:extern int var;var=1;匯編部分:.bss _var, 1.global _var編輯ppt混合編程說明: 變量訪問規(guī)則 C程序訪問不在.bss中定義的匯編常量表: (1)匯編程序中,在該常量表前加一標(biāo)號(標(biāo)號前要加“_”);(2)匯編程序中,將該標(biāo)號定義為全局標(biāo)號;(3)在C程序中,以extern的形式對該標(biāo)

7、號聲明,并利用指針訪 問該常量表。C語言部分:extern int var;int *p=var;f=p1匯編部分:.global _var_var: .word 10 .word 20編輯ppt混合編程說明: 變量訪問規(guī)則 C程序訪問用.set定義的匯編時間常數(shù): (1)匯編程序中,在該常數(shù)名前 “_”;(2)匯編程序中,將該常數(shù)名定義為全局符號;(3)在C程序中,以extern的形式對該符號聲明,并用取地址運 算符“&”取該常量參與運算C語言部分:extern int shift;#define ad (int)(&shift);x=ad;匯編部分:_shift .set 3.global

8、 _shift編輯ppt混合編程說明: 變量訪問規(guī)則 匯編程序訪問用C程序中的變量或數(shù)組: (1)在匯編程序和C程序中,都將該變量或數(shù)組定義成外部屬性。(2)在匯編中定義該變量或數(shù)組時需在前加“_”;C語言部分:int speech_in160, speech_out160;main()匯編部分:.global _speech_in.global _speech_outld #_speech_in, b stlm b, ar2ld #_speech_out, astlm a, ar3ld #159, astlm a, brcnopnoprptb nextmvdd *ar2+, *ar3+nex

9、t: 編輯ppt混合編程說明: 程序調(diào)用規(guī)則 寄存器使用說明: (1)輔助寄存器AR1、AR6、AR7由被調(diào)用函數(shù)保護(hù),即可以在函數(shù)執(zhí)行過程中修改,但在函數(shù)返回時必須恢復(fù)。AR0、AR2、AR3、AR4、AR5可以自由使用,即在函數(shù)執(zhí)行過程中可以修改,而且不必恢復(fù)。(2)堆棧指針SP在函數(shù)調(diào)用時必須予以保護(hù),但其是自動保護(hù)的,即在返回時,壓入椎棧的內(nèi)容都將被全部彈出。(3)ARP在函數(shù)進(jìn)入和返回時,必須為0,即當(dāng)前輔助寄存器為AR0。函數(shù)執(zhí)行時可以是其它值。(4)在缺省的情況下,編譯器總是認(rèn)為OVM為0。因此,若在匯編程序中將OVM置為1,則在返回C環(huán)境時,必須將其恢復(fù)為0。(5)其它狀態(tài)位和

10、寄存器在子程序中可以任意使用,不必恢復(fù)。編輯ppt混合編程說明: 程序調(diào)用規(guī)則 參數(shù)傳遞說明: (1)函數(shù)調(diào)用前,將參數(shù)以逆序壓入運行堆棧,即最右邊的參數(shù)最先入棧,然后自右向左將參數(shù)依次入棧,最后是返回地址入棧。第一個參數(shù)(最左邊)放入累加器A中進(jìn)行傳遞。(2)函數(shù)調(diào)用結(jié)束后,將返回值置于累加器A中。編程實例以32位乘法運算為例。雖然用C/C+語言表達(dá)乘法運算較為方便和明了,但由于C/C+語言無法很好利用DSP匯編語言為實現(xiàn)各種乘法運算而提供的指令,使得C/C+程序效率低下。所以這里用匯編語言完成乘法運算,再用C/C+程序調(diào)用它。編輯ppt編程實例(續(xù))C語言主程序#include #incl

11、ude int main() extern int *MPY32 (long X, long Y); /定義函數(shù)原型,返回指針值 int W4; /定義存放相乘結(jié)果的數(shù)組 int *P; int i; P=MPY32(0 x11112222, 0 x33334444); /函數(shù)調(diào)用/該指針指向數(shù)據(jù)存儲器中,存放相乘結(jié)果單元的首地址for(i=0; i16,低16位相乘的進(jìn)位MACSU *AR2-, *AR3+,A /A+=y1*x0MACSU *AR3-, *AR2, A /A+=x1*y0w0w1w2w3y0y1x0 x1AR2AR3AR4編輯ppt編程實例(續(xù))匯編程序STL A, *AR

12、4- /w1=ALD A, -16,A /A=A16MAC *AR2, *AR3,A /A+=x1*y1STL A, *AR4- /w2賦值STH A, *AR4 /w3賦值LD #w3,A /w3單元地址作為返回值,傳遞到ARET編輯ppt混合編程說明: 匯編語句嵌入規(guī)則 在C程序中直接內(nèi)嵌匯編語句。此種方法可以在C程序中實現(xiàn)C語言無法實現(xiàn)的一些硬件控制功能, 如修改寄存器值,或在編譯結(jié)果中添加注釋等。嵌入?yún)R編語句的方法比較簡單,只需在匯編語句的兩邊加上括號和雙引號,并且在括號前加上asm標(biāo)識符即可,即asm(“ 匯編語句”)。但需注意以下幾點:(1)括號中的匯編語句必須以標(biāo)號、空格、tab

13、 、分號開頭,這和通常的匯編編程的語法一樣。(2)不要在嵌入的匯編語句中使用修飾性匯編代碼.text、.data等。(3)插入跳轉(zhuǎn)語句和標(biāo)號會產(chǎn)生不可預(yù)測的結(jié)果。(4)匯編語句不要改變C程序中變量的值。asm(“ssbx xf”)asm(“*this is an assembly language comment”)練習(xí):用C實現(xiàn)循環(huán)延時,用嵌入式匯編語句對XF引腳置高低電平,實現(xiàn)方波發(fā)生器。編輯ppt4.2 匯編語言程序的編輯、匯編和鏈接過程 示意圖匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件. cmd鏈接命令文件. lst列表文件. map存儲器映像文件十六

14、進(jìn)制轉(zhuǎn)換程序HEX500- o- m- l編輯ppt4.2 匯編語言程序的編輯、匯編和鏈接過程 1. 編輯 利用各種文本編輯器,如筆記本、WORD、EDIT和TC等,可編寫匯編語言源程序。 2. 匯編 當(dāng)匯編語言源程序編寫好以后,可利用C54x的匯編器ASM500,對一個或多個源程序分別進(jìn)行匯編,并生成列表文件(.lst)和目標(biāo)文件(.obj)。 編輯ppt4.2 匯編語言程序的編輯、匯編和鏈接過程 2. 匯編 常用的匯編命令: asm500 %1 s l x 調(diào)用匯編器命令 源文件名 將程序所有定義的符號放在目標(biāo)文件的符號表中 生成一個列表文件.lst 生成一個交叉匯編表 編輯ppt4.2

15、匯編語言程序的編輯、匯編和鏈接過程 3. 鏈接 所謂鏈接,就是利用C54x的鏈接器LNK500,根據(jù)鏈接器命令文件(.cmd)對已匯編過的一個或多個目標(biāo)文件(.obj)進(jìn)行鏈接,生成輸出文件(.out)和存儲器映像文件(.map) 。 常用的匯編器命令: lnk500 %1.cmd lnk500: 調(diào)用鏈接器命令 %1.cmd: 鏈接命令文件名,該文件須指明目標(biāo)文件、輸入文件、輸出文件、鏈接選項和存儲器配置要求等。 編輯ppt4.3 COFF的一般概念 匯編器和鏈接器生成的目標(biāo)文件,是一個可以由C54x器件執(zhí)行的文件。這些目標(biāo)文件的格式稱之為公共目標(biāo)文件格式(COFF)。 在編寫匯編語言程序時

16、,COFF采用代碼段和數(shù)據(jù)段的形式,以便于模塊化的編程,使編程和管理變得更加方便。 這些代碼段和數(shù)據(jù)段簡稱為段。匯編器和鏈接器提供一些偽指令來建立和管理各種各樣的段。 編輯ppt4.3.1 COFF文件的基本單元 1. 段(sections) 是COFF文件中最重要的概念。每個目標(biāo)文件都分成若干段。 段是存儲器中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。一個目標(biāo)文件中的每個段都是分開的和各不相同的。 COFF目標(biāo)文件都包含以下3種形式的段: .text 段(文本段),通常包含可執(zhí)行代碼; .data 段(數(shù)據(jù)段),通常包含初始化數(shù)據(jù); .bss 段(保留空間段),通常為未初始化變量保留存儲空間。編輯ppt4

17、.3.1 COFF文件的基本單元 2. 段的基本類型 COFF目標(biāo)文件中的段有兩種基本類型。 初始化段 未初始化段(1) 初始化段 初始化段中包含有數(shù)據(jù)或程序代碼。主要有: .text段已初始化段; .data段已初始化段; .sect段已初始化段,由匯編器偽指令建立 的自定義段。 編輯ppt2. 段的基本類型 COFF目標(biāo)文件中的段有兩種基本類型。(2) 未初始化段 在存儲空間中,為未初始化數(shù)據(jù)保留存儲空間。它包括: .bss段未初始化段; .usect段未初始化段,由匯編命令建立的命 名段(自定義段)。編輯ppt4.3.1 COFF文件的基本單元 3. 段與目標(biāo)存儲器的對應(yīng)關(guān)系 匯編器的任

18、務(wù):在匯編過程中,根據(jù)匯編命令用適當(dāng)?shù)亩螌⒏鞑糠殖绦虼a和數(shù)據(jù)連在一起,構(gòu)成目標(biāo)文件。 鏈接器的任務(wù):就是分配存儲單元,將目標(biāo)文件中的段重新定位到目標(biāo)系統(tǒng)的存儲器中,這一過程稱為定位或分配。 編輯ppt3. 段與目標(biāo)存儲器的對應(yīng)關(guān)系目標(biāo)文件中的段與目標(biāo)存儲器之間的關(guān)系 目標(biāo)文件目標(biāo)存儲器.bss.data.textRAME2PROMROM編輯ppt4.3.2 匯編器對段的處理 匯編器對段的處理是通過段偽指令來區(qū)別各個段的,并將段名相同的語句匯編在一起。 匯編器有5條偽指令可識別匯編語言程序的各個部分: .bss .usect .text .data .sect定義未初始化段定義未初始化段定義已

19、初始化段定義已初始化段定義已初始化段編輯ppt4.3.2 匯編器對段的處理 未初始化段就是在C54x存儲器中保留空間,通常它們被定位在RAM區(qū)。在目標(biāo)文件中,這些段中沒有確切的內(nèi)容。 由這些段定義的空間僅作為臨時存儲空間,在程序運行時,可以利用這些存儲空間存放變量。 未初始化段分為默認(rèn)的和命名的兩種,分別由匯編器偽指令.bss和.usect產(chǎn)生。 1. 未初始化段 編輯ppt(1) .bss偽指令1. 未初始化段 用于在bss段中保留若干個空間。 格式: .bss 符號, 字?jǐn)?shù)符號對應(yīng)于保留的存儲空間第一個字的變量名稱。 可以讓其他段引用,也可以用.global命令定義為全 局符號。 字?jǐn)?shù)表示

20、在bss段或標(biāo)有名字的段中保留若干個存儲單元。 每調(diào)用一次.bss偽指令,匯編器在相應(yīng)的段保留更多的空間。 編輯ppt1. 未初始化段 (2) .usect偽指令 用于為指定的命名段保留若干個空間。 格式: 符號 .usect “段名”, 字?jǐn)?shù)段名程序員為未初始化的命名段定義的名字。 每調(diào)用一次.usect偽指令,匯編器在指定的命名段保留更多的空間。 編輯ppt4.3.2 匯編器對段的處理 已初始化段中包含有可執(zhí)行代碼或初始化數(shù)據(jù)。 這些段中的內(nèi)容都在目標(biāo)文件中,當(dāng)加載程序時再放到C54x的存儲器中。每個已初始化段都是可以重新定位的,并且可以引用其他段中所定義的符號。鏈接器在鏈接時會自動地處理

21、段間的相互引用。 已初始化段由.text、.data和.sect三個偽指令建立。2. 已初始化段 編輯ppt 已初始化命令的句法: 2. 已初始化段 .text 段起點 .data 段起點 .sect “段名”,段起點段起點是任選項。 若選用,它為段程序計數(shù)器SPC定義一個起始值。 若默認(rèn),則SPC從0開始。 編輯ppt4.3.2 匯編器對段的處理 當(dāng)匯編器遇到.text或.data或.sect命令時,將停止對當(dāng)前段的匯編(相當(dāng)于一條結(jié)束當(dāng)前段匯編的命令),然后將緊接著的程序代碼或數(shù)據(jù)匯編到指定的段中,直到再遇到另一條.text、.data或.sect命令為止。 當(dāng)匯編器遇到.bss或.use

22、ct命令時,并不結(jié)束當(dāng)前段的匯編,只是暫時從當(dāng)前段脫離出來,并開始對新的段進(jìn)行匯編。 .bss和.usect命令可以出現(xiàn)在一個已初始化段的任何位置,而不會對它的內(nèi)容發(fā)生影響。 編輯ppt4.3.2 匯編器對段的處理 命名段由用戶指定,與默認(rèn)的.text,.data和.bss段的使用相同,但它們被分開匯編。 假如一部分可執(zhí)行代碼(例如初始化程序)不希望和.text段分配在一起,可將它們匯編進(jìn)一個命名段,這樣就可定位在與.text不同的地方。也可將初始化的數(shù)據(jù)匯編到與.data段不同的地方,或者將未初始化的變量保留在與.bss段不同的位置。 可用.usect和.sect兩個偽指令產(chǎn)生命名段。3.

23、命名段(自定義段) 編輯ppt .usect偽指令產(chǎn)生類似.bss的段,為變量在RAM中保留存儲空間。 .sect偽指令產(chǎn)生類似.text和.data的段,可以包含代碼或數(shù)據(jù)。3. 命名段 產(chǎn)生命名段偽指令格式: 符號 .usect “段名”,字?jǐn)?shù) .sect “段名” 可以產(chǎn)生多達(dá)32767個不同的命名段。段名可長達(dá)200個字符。 編輯ppt 每次用一個新名字調(diào)用這些偽指令時,就產(chǎn)生一個新的命名段。 若用已有的段名調(diào)用這些偽指令,則匯編器就將代碼或數(shù)據(jù)(或保留空間)匯編進(jìn)相應(yīng)名稱的段中。 不同的偽指令不能使用相同的段名。即不能用.usect創(chuàng)建了命名段,然后又用.sect創(chuàng)建一個相同名字的段

24、。 3. 命名段 編輯ppt4.3.2 匯編器對段的處理 子段是較大段中的小段。對于子段,匯編器可以單獨為其分配存儲單元,或者在相同的基段名下與其他段組合在一起。 子段結(jié)構(gòu)可用來對存儲器空間進(jìn)行更緊湊的控制,可以使存儲器空間分配更加緊密。 4. 子段 子段命名格式: 基段名: 子段名 子段名前為基段名,隨后為冒號,最后為子段名。 編輯ppt4.3.2 匯編器對段的處理 匯編器為每個段都安排了一個單獨的程序計數(shù)器稱之為段程序計數(shù)器SPC。 SPC表示在程序段或數(shù)據(jù)段內(nèi)當(dāng)前的地址。開始時匯編器將每個SPC置0。當(dāng)匯編器將程序代碼或數(shù)據(jù)加到段內(nèi)時,增加相應(yīng)的SPC值。若再繼續(xù)對某個段匯編,則相應(yīng)的S

25、PC就在先前的數(shù)值上繼續(xù)增加。 5. 段程序計數(shù)器SPC 編輯ppt【例4.3.1】段命令應(yīng)用舉例。 匯編語言源程序: .datacoeff .word 044h,055h,066h .bss buffer,8 prt .word 0456h .textadd: LD 0Dh,A aloop:SUB #1,A BC aloop,AGEQ .dataivals .word 0CCh,0DDh,0EEh ;初始化數(shù)據(jù)段 ;3組數(shù)據(jù)放入.data段 ;在.bss段保留8個單元 ;0456h放入.data段 ;初始化文本段 共計5個字 ;初始化數(shù)據(jù)段 ;3組數(shù)據(jù)放入.data段編輯ppt匯編語言源程序

26、:var2 .usect “newvars”,2 inbuf .usect “newvars”,8 .text mpy: LD 0Ah,B mloop: MPY #0Ah,B BC mloop,BNOV .sect “vectors” .word 044h,088h ;建立newvars命名段,保留2個單元 ;在newvars段保留8個單元 ;初始化文本段 共計5個字 ;建立vectors命名段 ;2組數(shù)據(jù)放入vectors命名段編輯ppt經(jīng)匯編后,得列表文件(部分): 2 *3 * 匯編一個初始化表到.data段 *4 *5 0000 .data6 0000 0044 coeff .word

27、 044h,055h,066h 0001 0055 0002 00667 *8 * 在.bss段中為變量保留空間 *9 *10 0000 .bss buffer,811 *12 * 仍然在.data 段中 *13 *14 0003 0456 prt .word 0456h源程序的行號 段程序計數(shù)器目標(biāo)代碼匯編語言源程序編輯ppt源程序的行號 段程序計數(shù)器目標(biāo)代碼匯編語言源程序15 *16 * 匯編代碼到.text段 *17 *18 0000 .text19 0000 100d add: LD 0Dh,A20 0001 f010 aloop: SUB #1, A 0002 0001 21 000

28、3 f842 BC aloop,AGEQ 0004 0001 22 *23 * 匯編另一個初始化表到.data 段 * 24 *25 0004 .data 26 0004 00cc ivals .word 0CCh,0DDh,0EEh 0005 00dd 0006 00ee27 *28 * 為更多的變量定義另一個段 *29 *30 0000 var2 .usect “newvars”,2 31 0001 inbuf .usect “newvars”,8 編輯ppt32 *33 * 匯編更多代碼到.text段 *34 *35 0005 .text 36 0005 110a mpy: LD 0Ah

29、,B 37 0006 f166 mloop MPY #0Ah,B 0007 000a 38 0008 f868 BC mloop,BNOV 0009 0006 39 *40 * 為中斷向量.vectors定義一個自定義段 * 41 *42 0000 .sect “vectors” 43 0000 0044 .word 044h,088h 0001 0088 源程序的行號 段程序計數(shù)器目標(biāo)代碼匯編語言源程序編輯ppt 匯編語言源程序經(jīng)過匯編后,共建立了5個段: .text段文本段,段內(nèi)有6條共10個字可執(zhí) 行的程序代碼。 .data段已初始化的數(shù)據(jù)段,段內(nèi)有7 個字的數(shù)據(jù)。 vectors段用.

30、sect命令生成的命名段, 段內(nèi)有2個字的初始化數(shù)據(jù)。 .bss段未初始化的數(shù)據(jù)段,在存儲器中 為變量保留8個存儲單元。 newvars段用.usect命令建立的命名段, 為變量保留10個存儲單元。 編輯ppt【例】比較.byte,.int,.long,.word和.string偽指令。 源程序: .byte 0AAh,0BBh .word 0CCCh .long 0EEEEFFFFh .int 0DDDDh .string “help” .byte:將一個或多個8位值放入當(dāng)前段的連續(xù)字中。 15 0 15 00,1 0 0 A A 0 0 B B .word:將一個或多個16位值放入當(dāng)前段的

31、連續(xù)字中。2 0 C C C .long:將32位值放入當(dāng)前段的2個連續(xù)的字中,先存最高有效位。3,4 E E E E F F F F .int:將一個或多個16位值放入當(dāng)前段的連續(xù)的字中。5 D D D D .string:將一個或多個字符串中的8位字符放入當(dāng)前段中。he6,7 0 0 6 8 0 0 6 5lp8,9 0 0 6 C 0 0 7 01初始化常數(shù)的偽指令4.3.3 匯編器常用偽指令 編輯ppt列表文件:1 000000 00aa .byte 0AAh,0BBh 000001 00bb2 000002 0ccc .word 0CCCh3 000003 eeee .long 0E

32、EEEFFFFh 000004 ffff4 000005 dddd .int 0DDDDh5 000006 0068 .string “help” 000007 0065 000008 006c 000009 00704.3.3 匯編器常用偽指令 編輯ppt1初始化常數(shù)的偽指令.field偽指令: 功能:將單個數(shù)值放進(jìn)當(dāng)前字的指定位域中。 采用.field偽指令,可以將多個字段或域打包成單個字,直到字被填滿為止,匯編器不增加SPC。 指令格式: . field value ,size in bits 單個數(shù)值當(dāng)前字的指定位域4.3.3 匯編器常用偽指令 編輯ppt1初始化常數(shù)的偽指令 .fie

33、ld偽指令的使用。 源程序: .field 5,3 .field 9,6 .field 16,5 .field 01234h,20 .field 01234h,32 .field 5,3 .field 9,6 .field 16,5 .field 01234h,20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 01 0 11 0 10 0 1 0 0 10 0 1 0 0 11 0 0 0 01 0 0 0 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 1

34、5 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00123h0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 10 0 0 0 0 0 0 1 0 0 1 0 0 0 1 14h0 1 0 00 1 0 0 .field 01234h,320 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00 0 0 1 0 0 1 0 0 0 1 1 0 1 0 00 0 0 1 0 0 1 0 0

35、0 1 1 0 1 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0A000hA480hA4C0h0123h4000h0000h1234h4.3.3 匯編器常用偽指令 編輯ppt【例】 .field偽指令的使用。 匯編后的列表文件: 4 000000 A000 .field 5,3 5 000000 A480 .field 9,6 6 000000 A4C0 .field 16,5 7 000001 0123 .field 01234h,20 000002 4000 8 000003 0000 .field 01

36、234h,32 000004 1234組成一個字,不改變SPC。占用兩個字, SPC+2。占用兩個字, SPC+2。編輯ppt COFF文件中有一個符號表,主要用來存儲程序中有關(guān)符號的信息。鏈接器在執(zhí)行程序定位時,要使用符號表提供的信息,而調(diào)試工具也要使用該表來提供符號調(diào)試。 外部符號:是指在一個模塊中定義、而在另一個模塊中引用的符號。它可以用偽指令.def、.ref或.global來定義。 .def在當(dāng)前模塊中定義,并可在別的模塊中使用的符號; .ref 在當(dāng)前模塊中使用,但在別的模塊中定義的符號; .global可以是上面的任何一種情況。 2定義和引用外部符號的偽指令4.3.3 匯編器常用

37、偽指令 編輯ppt【例】說明代碼段中外部符號的定義。 .def x .ref y x: ADD #56h,A B y ;定義x ;引用y 4.3.3 匯編器常用偽指令 編輯ppt4.3.4 鏈接器對段的處理 鏈接器是開發(fā)C54x器件必不可少的開發(fā)工具之一,它對段處理時有2個主要任務(wù): 將一個或多個COFF目標(biāo)文件中的各種段作為鏈接器的輸入,經(jīng)鏈接后在一個執(zhí)行的COFF輸出模塊中建立各個輸出段; 在程序裝入時對其重新定位,為各個輸出段選定存儲器地址。 編輯ppt 鏈接器由鏈接命令文件提供的鏈接信息。 在鏈接命令文件中,可使用MEMORY和SECTIONS偽指令,為實際應(yīng)用指定存儲器結(jié)構(gòu)和地址的映

38、射。 MEMORY用來指定目標(biāo)存儲器結(jié)構(gòu)。 SECTIONS用來控制段的構(gòu)成與地址分配。 4.3.4 鏈接器對段的處理 編輯ppt4.3.5 MEMORY指令 MEMORY指令用來規(guī)定目標(biāo)存儲器的結(jié)構(gòu)。 在實際的應(yīng)用中,目標(biāo)系統(tǒng)所配置的存儲器是各不相同的,通過MEMORY指令,可以進(jìn)行各種各樣的存儲器配置。 MEMORY指令的句法: MEMORY PAGE0:name 1(attr):origin=constant, length=constant; PAGEn:name n(attr):origin=constant, length=constant; 指令字存儲區(qū)間說明語句書寫方式: 用大

39、寫MEMORY指令字開始; 由大括號括起來的存儲器區(qū)間說明。存儲區(qū)間:存儲頁面區(qū)間名稱區(qū)間屬性起始地址區(qū)間長度編輯ppt4.3.5 MEMORY指令 存儲區(qū)間說明語句: PAGE: 指定存儲器空間頁面,最多為255頁, 取決于目標(biāo)存儲器的配置。 每一個PAGE代表一個完全獨立的地址空間。 通常,PAGE 0用于程序存儲器; PAGE 1用于數(shù)據(jù)存儲器。 若沒有規(guī)定PAGE,則鏈接器默認(rèn)為PAGE 0。 編輯ppt4.3.5 MEMORY指令 存儲區(qū)間說明語句: name: 存儲器區(qū)間名稱??捎捎米帜浮?、.、_ 等組成。 存儲器區(qū)間為內(nèi)部記號,因此不需要保留在輸出文件或者符號表中。 不同PAG

40、E上的存儲器區(qū)間可以取相同的名字,但在同一PAGE內(nèi)的名字不能相同,且不許重疊配置。 編輯ppt4.3.5 MEMORY指令 存儲區(qū)間說明語句: attr: 為任選項,用來為命名的存儲器區(qū)間規(guī) 定14個屬性。 當(dāng)對輸出段定位時,可利用屬性限制輸出段分配到一定的存儲區(qū)間。 屬性選項共有4項: R 規(guī)定可以對存儲器執(zhí)行讀操作。 W 規(guī)定可以對存儲器執(zhí)行寫操作。 X 規(guī)定存儲器可以裝入可執(zhí)行的程序代碼。 I 規(guī)定可以對存儲器進(jìn)行初始化。 任何一個沒有規(guī)定屬性的存儲器(包括所有默認(rèn)方式的存儲器)都有全部4項屬性。 編輯ppt4.3.5 MEMORY指令 存儲區(qū)間說明語句: origin: 用來指定存儲

41、區(qū)間的起始地址,可簡 寫為org或o。其值以字為單位,可以 用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。 Length: 用來指定存儲器空間的長度,可簡寫 為len或l,其值以字為單位,可以用 十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。 編輯ppt【例】用MEMORY偽指令編寫連接命令文件。要求: 程序存儲器:4K字ROM,起始地址為C00h,取名為ROM。 數(shù)據(jù)存儲器:32字RAM,起始地址為60h,取名為SCR。 512字RAM,起始地址為80h,取名為CHIP。 file1.obj fiel2.obj -o Prog.out MEMORY PAGE 0: ROM: origin=C00h, length=1

42、000h PAGE 1: SCR: origin=60h, length=20h CHIP: origin=80h, length=200h 兩個輸入文件一個輸出文件 Prog.out指令字頁面名稱區(qū)間名稱起始地址區(qū)間長度編輯ppt【例4.5.2】用MEMORY偽指令編寫連接命令文件。file1.obj fiel2.obj -o Prog.out MEMORYPAGE 0: ROM: org=C00h, len=1000hPAGE 1: SCR: org=60h, len=20h CHIP:org=80h, len=200h PAGE 0: ROM: org=C00h, len=1000h程序

43、存儲器00000h0FFFFh00C00h1000h01C00hROMPAGE 1: SCR: org=60h, len=20h數(shù)據(jù)存儲器00000h0FFFFh00060h0007Fh20hSCR CHIP:org=80h, len=200h00080h200h0027FhCHIP編輯ppt4.3.6 SECTIONS指令 用來控制段的構(gòu)成與地址分配。指令功能: 說明如何將輸入段組合成輸出段; 在可執(zhí)行程序中定義輸出段; 規(guī)定輸出段在存儲器中的存放位置; 允許重新命名輸出段。1. SECTIONS指令語法 編輯pptSECTIONS指令的句法: SECTIONS name:property,

44、 property, property, name:property, property, property, name:property, property, property, 指令字輸出段說明語句 段名:定義輸出段的名稱。 屬性:定義該段的內(nèi)容和存儲器的分配。段名1. SECTIONS指令語法屬性屬性屬性編輯ppt1. SECTIONS指令語法 段屬性用來定義輸出段的內(nèi)容和存儲地址的分配。包括的內(nèi)容如下: 裝入存儲器分配 運行存儲器分配 輸入段 編輯ppt1. SECTIONS指令語法 裝入存儲器分配 用于定義段裝入時的存儲器地址。語法格式: load=allocation 或 allo

45、cation 或 allocation allocation: 關(guān)于段地址的說明,即給段分配存儲 單元。 編輯ppt1. SECTIONS指令語法 裝入存儲器分配例如: .text: load=0 x1000 .text: loadROM .bss: load(RW) .text: PAGE 0 將.text段定位到一個特定的地址。 將.text段定位到命名為ROM的存儲區(qū)。 將.bss段定位到屬性為R、W的存儲區(qū)。將.text段定位到PAGE 0。編輯ppt1. SECTIONS指令語法 裝入存儲器分配 若用到一個以上參數(shù),可以將它們排成一行。 例如: .text: ROM (PAGE 0

46、) 。 編輯ppt1. SECTIONS指令語法 運行存儲器分配 用于定義段運行時的存儲器地址。語法格式: run=allocation 或 run allocation 編輯ppt1. SECTIONS指令語法 鏈接器為段在目標(biāo)存儲器中分配兩個地址: 加載的地址由裝入存儲器分配完成 執(zhí)行程序的地址由運行存儲器分配完成 通常,這兩個地址是相同的。 若要想把程序的加載和運行分開,先將程序加載到ROM,然后在RAM中運行,則用SECTIONS命令讓鏈接器對這個段定位兩次即可。 例如: .fir: load=ROM,run=RAM 編輯ppt1. SECTIONS指令語法 輸入段 用于定義組成輸出段

47、的輸入段。語法格式:out_section:input_sections 在SECTIONS命令中如果不列出輸入文件的輸入段的段名,則默認(rèn)把同名段鏈接成一個輸出段。 例如: SECTIONS .text: .data: .bss 鏈接時:在輸入文件中的所有.text段鏈接成.text輸出段所有.data段鏈接成.data輸出段所有.bss段鏈接成.bss輸出段編輯ppt1. SECTIONS指令語法 用文件名和段名來規(guī)定輸入段。 SECTIONS .text: /*創(chuàng)建 .text 輸出段*/ f1.obj(.text) /*鏈接來自f1.obj文件中的.text 段*/ f2.obj(sec

48、1) /*鏈接來自f2.obj文件中的sec1 段*/ f3.obj /*鏈接來自f3.obj文件中的所有段*/ f4.obj(.text,sec2) /*鏈接f4.obj文件中的.text 段和sec2段*/ 編輯ppt4.3.6 SECTIONS指令 2. SECTIONS指令的使用 【例4.5.3】SECTIONS指令的使用。 file1.obj file2.obj -o Prog.out SECTIONS .text: load=ROM,run=800h .con: load=ROM .bss: load=RAM .vec: load=FF80h t1.obj(.int1) t2.ob

49、j(.int2) .data: load=700h 兩個輸入文件鏈接命令選項指令字輸出段說明語句編輯ppt2. SECTIONS指令的使用 【例4.5.3】SECTIONS指令的使用。 file1.obj file2.obj -o Prog.out SECTIONS .text: load=ROM,run=800h .con: load=ROM .bss: load=RAM .vec: load=FF80h file1.obj(.int1) file2.obj(.int2) .data: load=700h 輸出段加載地址運行地址.textROMRAM 800h.conROM.bssRAM.v

50、ecROM FF80.dataRAM 700h.vec段由輸入文件中的.int1和.int2兩個輸入段構(gòu)成編輯ppt2. SECTIONS指令的使用 【例4.5.3】SECTIONS指令的使用。 file1.obj file2.obj -o Prog.out SECTIONS .text: load=ROM,run=800h .con: load=ROM .bss: load=RAM .vec: load=FF80h t1.obj(.int1) t2.obj(.int2) .data: load=700h 輸出段加載地址運行地址.textROMRAM 800h.conROM.bssRAM.ve

51、cROM FF80.dataRAM 700h ROM RAM00h.text.con.bss.vec.dataFF80h運行時800h.text.text.text700h編輯ppt4.3.7 MEMORY和SECTIONS命令的默認(rèn)使用 如果沒有利用MEMORY和SECTIONS命令,鏈接器就按默認(rèn)算法來定位輸出段。 將所有的.text輸入段鏈接成一個.text輸出段,并配置到PAGE 0上的存儲器; 將所有的.data輸入段組合成.data輸出段,定位到PAGE 0上的存儲器; 編輯ppt 所有的.bss輸入段則組合成一個.bss輸出段,并由鏈接器定位到配置為PAGE 1上的存儲器。 如果

52、輸入文件中包含有已初始化的命名段,則鏈接器將它們定位到程序存儲器,緊隨.data段之后。 如果輸入文件中包括有未初始化的命名段,則鏈接器將它們定位到數(shù)據(jù)存儲器,并緊隨.bss段之后。 4.3.7 MEMORY和SECTIONS命令的默認(rèn)使用 編輯ppt MEMORY PAGE 0:PROG: origin=0 x0080, length=0 xFF00 PAGE 1:DATA: origin=0 x0080, length=0 xFF80 SECTIONS .text: PAGE=0 .data: PAGE=0 .cinit: PAGE=0 .bss: PAGE=1 4.3.7 MEMORY和

53、SECTIONS命令的默認(rèn)使用 編輯ppt4.3.8 多個文件的鏈接實例 下面以example.asm源程序為例,將復(fù)位向量列為一個單獨的文件,對兩個目標(biāo)文件進(jìn)行鏈接。(1) 編寫復(fù)位向量文件 vectors.asm文件清單: .title vectors.asm .ref start .sect .vectors B start .end 編輯ppt(2) 編寫源程序 文件清單: .title example.asm .mmregsSTACK .usect STACK,10h ;為堆棧指定空間 .bss a,4;為變量分配9個字的空間 .bss x,4 .bss y,1 .def start

54、 .datatable: .word 1,2,3,4;變量初始化 .word 8,6,4,2 .text編輯ppt(2) 編寫源程序 start: STM #0,SWWSR ;插入0個等待狀態(tài) STM #STACK+10h,SP ;設(shè)置堆棧指針 STM #a,AR1 ;AR1指向a RPT #7 ;移動8個數(shù)據(jù) MVPD table,*AR1+ ;從程序存儲器到數(shù)據(jù)存儲器 CALL SUM ;調(diào)用SUM子程序end: B endSUM: STM #a,AR3 ;子程序執(zhí)行 STM #x,AR4 RPTZ A,# 3 MAC *AR3+,*AR4+,A STL A,y RET .end 編輯ppt(3) 對源文件匯編(4) 編寫鏈接命令文件 編寫的命令文件用來鏈接兩個目標(biāo)文件(輸

溫馨提示

  • 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

提交評論