版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第4章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)4.1 TMS320C54x軟件開發(fā)過程 4.2 匯編語言程序的編輯、匯編和鏈接過程 4.3 COFF的一般概念 編輯ppt4.1 TMS320C54x軟件開發(fā)過程 C54x的應(yīng)用軟件開發(fā)主要完成以下工作:(1) 選擇編程語言編寫源程序 C54x提供2種編程語言,即匯編語言和C/C+語言。 對(duì)于完成一般功能的代碼,這兩種語言都可使用,但對(duì)于一些運(yùn)算量很大的關(guān)鍵代碼,最好采用匯編語言來完成,以提高程序的運(yùn)算效率。(2) 選擇開發(fā)工具和環(huán)境 C54x提供了兩種開發(fā)環(huán)境。即非集成開發(fā)環(huán)境和集成開發(fā)環(huán)境CCS。 編輯pptTMS320的開發(fā)工具是一個(gè)軟件包,
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)帶有一個(gè)完整的運(yùn)行支持庫使用多種先進(jìn)技術(shù)來優(yōu)化 C 源代碼,以產(chǎn)生高效匯編代碼。編輯ppt匯編器(Assembler) 將匯編語言的源程序文件匯編成為機(jī)器語言的目標(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) 歸檔器允許用戶將一組文件歸入一個(gè)檔案文件(庫)。例如,將若干個(gè)宏歸入一個(gè)宏庫,匯編器將搜索這個(gè)庫,并調(diào)用源文件中使用的宏。也可以用歸檔器將一組目標(biāo)文件收入一個(gè)目標(biāo)文件庫,連接器將連接庫內(nèi)的成員,并解決外部引用編輯ppt交叉引用列表器(Cross-Refer
4、ence Lister) 交叉引用列表器是一個(gè)查錯(cuò)的工具。它接受已經(jīng)連接好的目標(biāo)文件作為輸入,產(chǎn)生一個(gè)交叉引用列表作為輸出。它列出符號(hào)、符號(hào)的定義、以及它們?cè)谝呀?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全匯編編程:代碼效率高,可直接對(duì)硬件設(shè)置;代碼量較大,可讀性差。全C編程:提高軟件開發(fā)速度和可讀性,方便軟件移植;代碼效率較低,硬件控制不方便。混合編程 混
5、合編程幾種方法:(1)獨(dú)立編寫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語言中保持“自然”的命名,而在匯編語言中該名字需加一個(gè)下劃線作為前綴。 例: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)號(hào)(標(biāo)號(hào)前要加“_”);(2)匯編程序中,將該標(biāo)號(hào)定義為全局標(biāo)號(hào);(3)在C程序中,以extern的形式對(duì)該標(biāo)
7、號(hào)聲明,并利用指針訪 問該常量表。C語言部分:extern int var;int *p=var;f=p1匯編部分:.global _var_var: .word 10 .word 20編輯ppt混合編程說明: 變量訪問規(guī)則 C程序訪問用.set定義的匯編時(shí)間常數(shù): (1)匯編程序中,在該常數(shù)名前 “_”;(2)匯編程序中,將該常數(shù)名定義為全局符號(hào);(3)在C程序中,以extern的形式對(duì)該符號(hào)聲明,并用取地址運(yùn) 算符“&”取該常量參與運(yùn)算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ù)組時(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ù)返回時(shí)必須恢復(fù)。AR0、AR2、AR3、AR4、AR5可以自由使用,即在函數(shù)執(zhí)行過程中可以修改,而且不必恢復(fù)。(2)堆棧指針SP在函數(shù)調(diào)用時(shí)必須予以保護(hù),但其是自動(dòng)保護(hù)的,即在返回時(shí),壓入椎棧的內(nèi)容都將被全部彈出。(3)ARP在函數(shù)進(jìn)入和返回時(shí),必須為0,即當(dāng)前輔助寄存器為AR0。函數(shù)執(zhí)行時(shí)可以是其它值。(4)在缺省的情況下,編譯器總是認(rèn)為OVM為0。因此,若在匯編程序中將OVM置為1,則在返回C環(huán)境時(shí),必須將其恢復(fù)為0。(5)其它狀態(tài)位和
10、寄存器在子程序中可以任意使用,不必恢復(fù)。編輯ppt混合編程說明: 程序調(diào)用規(guī)則 參數(shù)傳遞說明: (1)函數(shù)調(diào)用前,將參數(shù)以逆序壓入運(yùn)行堆棧,即最右邊的參數(shù)最先入棧,然后自右向左將參數(shù)依次入棧,最后是返回地址入棧。第一個(gè)參數(shù)(最左邊)放入累加器A中進(jìn)行傳遞。(2)函數(shù)調(diào)用結(jié)束后,將返回值置于累加器A中。編程實(shí)例以32位乘法運(yùn)算為例。雖然用C/C+語言表達(dá)乘法運(yùn)算較為方便和明了,但由于C/C+語言無法很好利用DSP匯編語言為實(shí)現(xiàn)各種乘法運(yùn)算而提供的指令,使得C/C+程序效率低下。所以這里用匯編語言完成乘法運(yùn)算,再用C/C+程序調(diào)用它。編輯ppt編程實(shí)例(續(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ù)存儲(chǔ)器中,存放相乘結(jié)果單元的首地址for(i=0; i16,低16位相乘的進(jìn)位MACSU *AR2-, *AR3+,A /A+=y1*x0MACSU *AR3-, *AR2, A /A+=x1*y0w0w1w2w3y0y1x0 x1AR2AR3AR4編輯ppt編程實(shí)例(續(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程序中實(shí)現(xiàn)C語言無法實(shí)現(xiàn)的一些硬件控制功能, 如修改寄存器值,或在編譯結(jié)果中添加注釋等。嵌入?yún)R編語句的方法比較簡(jiǎn)單,只需在匯編語句的兩邊加上括號(hào)和雙引號(hào),并且在括號(hào)前加上asm標(biāo)識(shí)符即可,即asm(“ 匯編語句”)。但需注意以下幾點(diǎn):(1)括號(hào)中的匯編語句必須以標(biāo)號(hào)、空格、tab
13、 、分號(hào)開頭,這和通常的匯編編程的語法一樣。(2)不要在嵌入的匯編語句中使用修飾性匯編代碼.text、.data等。(3)插入跳轉(zhuǎn)語句和標(biāo)號(hào)會(huì)產(chǎn)生不可預(yù)測(cè)的結(jié)果。(4)匯編語句不要改變C程序中變量的值。asm(“ssbx xf”)asm(“*this is an assembly language comment”)練習(xí):用C實(shí)現(xiàn)循環(huán)延時(shí),用嵌入式匯編語句對(duì)XF引腳置高低電平,實(shí)現(xiàn)方波發(fā)生器。編輯ppt4.2 匯編語言程序的編輯、匯編和鏈接過程 示意圖匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件. cmd鏈接命令文件. lst列表文件. map存儲(chǔ)器映像文件十六
14、進(jìn)制轉(zhuǎn)換程序HEX500- o- m- l編輯ppt4.2 匯編語言程序的編輯、匯編和鏈接過程 1. 編輯 利用各種文本編輯器,如筆記本、WORD、EDIT和TC等,可編寫匯編語言源程序。 2. 匯編 當(dāng)匯編語言源程序編寫好以后,可利用C54x的匯編器ASM500,對(duì)一個(gè)或多個(gè)源程序分別進(jìn)行匯編,并生成列表文件(.lst)和目標(biāo)文件(.obj)。 編輯ppt4.2 匯編語言程序的編輯、匯編和鏈接過程 2. 匯編 常用的匯編命令: asm500 %1 s l x 調(diào)用匯編器命令 源文件名 將程序所有定義的符號(hào)放在目標(biāo)文件的符號(hào)表中 生成一個(gè)列表文件.lst 生成一個(gè)交叉匯編表 編輯ppt4.2
15、匯編語言程序的編輯、匯編和鏈接過程 3. 鏈接 所謂鏈接,就是利用C54x的鏈接器LNK500,根據(jù)鏈接器命令文件(.cmd)對(duì)已匯編過的一個(gè)或多個(gè)目標(biāo)文件(.obj)進(jìn)行鏈接,生成輸出文件(.out)和存儲(chǔ)器映像文件(.map) 。 常用的匯編器命令: lnk500 %1.cmd lnk500: 調(diào)用鏈接器命令 %1.cmd: 鏈接命令文件名,該文件須指明目標(biāo)文件、輸入文件、輸出文件、鏈接選項(xiàng)和存儲(chǔ)器配置要求等。 編輯ppt4.3 COFF的一般概念 匯編器和鏈接器生成的目標(biāo)文件,是一個(gè)可以由C54x器件執(zhí)行的文件。這些目標(biāo)文件的格式稱之為公共目標(biāo)文件格式(COFF)。 在編寫匯編語言程序時(shí)
16、,COFF采用代碼段和數(shù)據(jù)段的形式,以便于模塊化的編程,使編程和管理變得更加方便。 這些代碼段和數(shù)據(jù)段簡(jiǎn)稱為段。匯編器和鏈接器提供一些偽指令來建立和管理各種各樣的段。 編輯ppt4.3.1 COFF文件的基本單元 1. 段(sections) 是COFF文件中最重要的概念。每個(gè)目標(biāo)文件都分成若干段。 段是存儲(chǔ)器中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。一個(gè)目標(biāo)文件中的每個(gè)段都是分開的和各不相同的。 COFF目標(biāo)文件都包含以下3種形式的段: .text 段(文本段),通常包含可執(zhí)行代碼; .data 段(數(shù)據(jù)段),通常包含初始化數(shù)據(jù); .bss 段(保留空間段),通常為未初始化變量保留存儲(chǔ)空間。編輯ppt4
17、.3.1 COFF文件的基本單元 2. 段的基本類型 COFF目標(biāo)文件中的段有兩種基本類型。 初始化段 未初始化段(1) 初始化段 初始化段中包含有數(shù)據(jù)或程序代碼。主要有: .text段已初始化段; .data段已初始化段; .sect段已初始化段,由匯編器偽指令建立 的自定義段。 編輯ppt2. 段的基本類型 COFF目標(biāo)文件中的段有兩種基本類型。(2) 未初始化段 在存儲(chǔ)空間中,為未初始化數(shù)據(jù)保留存儲(chǔ)空間。它包括: .bss段未初始化段; .usect段未初始化段,由匯編命令建立的命 名段(自定義段)。編輯ppt4.3.1 COFF文件的基本單元 3. 段與目標(biāo)存儲(chǔ)器的對(duì)應(yīng)關(guān)系 匯編器的任
18、務(wù):在匯編過程中,根據(jù)匯編命令用適當(dāng)?shù)亩螌⒏鞑糠殖绦虼a和數(shù)據(jù)連在一起,構(gòu)成目標(biāo)文件。 鏈接器的任務(wù):就是分配存儲(chǔ)單元,將目標(biāo)文件中的段重新定位到目標(biāo)系統(tǒng)的存儲(chǔ)器中,這一過程稱為定位或分配。 編輯ppt3. 段與目標(biāo)存儲(chǔ)器的對(duì)應(yīng)關(guān)系目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器之間的關(guān)系 目標(biāo)文件目標(biāo)存儲(chǔ)器.bss.data.textRAME2PROMROM編輯ppt4.3.2 匯編器對(duì)段的處理 匯編器對(duì)段的處理是通過段偽指令來區(qū)別各個(gè)段的,并將段名相同的語句匯編在一起。 匯編器有5條偽指令可識(shí)別匯編語言程序的各個(gè)部分: .bss .usect .text .data .sect定義未初始化段定義未初始化段定義已
19、初始化段定義已初始化段定義已初始化段編輯ppt4.3.2 匯編器對(duì)段的處理 未初始化段就是在C54x存儲(chǔ)器中保留空間,通常它們被定位在RAM區(qū)。在目標(biāo)文件中,這些段中沒有確切的內(nèi)容。 由這些段定義的空間僅作為臨時(shí)存儲(chǔ)空間,在程序運(yùn)行時(shí),可以利用這些存儲(chǔ)空間存放變量。 未初始化段分為默認(rèn)的和命名的兩種,分別由匯編器偽指令.bss和.usect產(chǎn)生。 1. 未初始化段 編輯ppt(1) .bss偽指令1. 未初始化段 用于在bss段中保留若干個(gè)空間。 格式: .bss 符號(hào), 字?jǐn)?shù)符號(hào)對(duì)應(yīng)于保留的存儲(chǔ)空間第一個(gè)字的變量名稱。 可以讓其他段引用,也可以用.global命令定義為全 局符號(hào)。 字?jǐn)?shù)表示
20、在bss段或標(biāo)有名字的段中保留若干個(gè)存儲(chǔ)單元。 每調(diào)用一次.bss偽指令,匯編器在相應(yīng)的段保留更多的空間。 編輯ppt1. 未初始化段 (2) .usect偽指令 用于為指定的命名段保留若干個(gè)空間。 格式: 符號(hào) .usect “段名”, 字?jǐn)?shù)段名程序員為未初始化的命名段定義的名字。 每調(diào)用一次.usect偽指令,匯編器在指定的命名段保留更多的空間。 編輯ppt4.3.2 匯編器對(duì)段的處理 已初始化段中包含有可執(zhí)行代碼或初始化數(shù)據(jù)。 這些段中的內(nèi)容都在目標(biāo)文件中,當(dāng)加載程序時(shí)再放到C54x的存儲(chǔ)器中。每個(gè)已初始化段都是可以重新定位的,并且可以引用其他段中所定義的符號(hào)。鏈接器在鏈接時(shí)會(huì)自動(dòng)地處理
21、段間的相互引用。 已初始化段由.text、.data和.sect三個(gè)偽指令建立。2. 已初始化段 編輯ppt 已初始化命令的句法: 2. 已初始化段 .text 段起點(diǎn) .data 段起點(diǎn) .sect “段名”,段起點(diǎn)段起點(diǎn)是任選項(xiàng)。 若選用,它為段程序計(jì)數(shù)器SPC定義一個(gè)起始值。 若默認(rèn),則SPC從0開始。 編輯ppt4.3.2 匯編器對(duì)段的處理 當(dāng)匯編器遇到.text或.data或.sect命令時(shí),將停止對(duì)當(dāng)前段的匯編(相當(dāng)于一條結(jié)束當(dāng)前段匯編的命令),然后將緊接著的程序代碼或數(shù)據(jù)匯編到指定的段中,直到再遇到另一條.text、.data或.sect命令為止。 當(dāng)匯編器遇到.bss或.use
22、ct命令時(shí),并不結(jié)束當(dāng)前段的匯編,只是暫時(shí)從當(dāng)前段脫離出來,并開始對(duì)新的段進(jìn)行匯編。 .bss和.usect命令可以出現(xiàn)在一個(gè)已初始化段的任何位置,而不會(huì)對(duì)它的內(nèi)容發(fā)生影響。 編輯ppt4.3.2 匯編器對(duì)段的處理 命名段由用戶指定,與默認(rèn)的.text,.data和.bss段的使用相同,但它們被分開匯編。 假如一部分可執(zhí)行代碼(例如初始化程序)不希望和.text段分配在一起,可將它們匯編進(jìn)一個(gè)命名段,這樣就可定位在與.text不同的地方。也可將初始化的數(shù)據(jù)匯編到與.data段不同的地方,或者將未初始化的變量保留在與.bss段不同的位置。 可用.usect和.sect兩個(gè)偽指令產(chǎn)生命名段。3.
23、命名段(自定義段) 編輯ppt .usect偽指令產(chǎn)生類似.bss的段,為變量在RAM中保留存儲(chǔ)空間。 .sect偽指令產(chǎn)生類似.text和.data的段,可以包含代碼或數(shù)據(jù)。3. 命名段 產(chǎn)生命名段偽指令格式: 符號(hào) .usect “段名”,字?jǐn)?shù) .sect “段名” 可以產(chǎn)生多達(dá)32767個(gè)不同的命名段。段名可長達(dá)200個(gè)字符。 編輯ppt 每次用一個(gè)新名字調(diào)用這些偽指令時(shí),就產(chǎn)生一個(gè)新的命名段。 若用已有的段名調(diào)用這些偽指令,則匯編器就將代碼或數(shù)據(jù)(或保留空間)匯編進(jìn)相應(yīng)名稱的段中。 不同的偽指令不能使用相同的段名。即不能用.usect創(chuàng)建了命名段,然后又用.sect創(chuàng)建一個(gè)相同名字的段
24、。 3. 命名段 編輯ppt4.3.2 匯編器對(duì)段的處理 子段是較大段中的小段。對(duì)于子段,匯編器可以單獨(dú)為其分配存儲(chǔ)單元,或者在相同的基段名下與其他段組合在一起。 子段結(jié)構(gòu)可用來對(duì)存儲(chǔ)器空間進(jìn)行更緊湊的控制,可以使存儲(chǔ)器空間分配更加緊密。 4. 子段 子段命名格式: 基段名: 子段名 子段名前為基段名,隨后為冒號(hào),最后為子段名。 編輯ppt4.3.2 匯編器對(duì)段的處理 匯編器為每個(gè)段都安排了一個(gè)單獨(dú)的程序計(jì)數(shù)器稱之為段程序計(jì)數(shù)器SPC。 SPC表示在程序段或數(shù)據(jù)段內(nèi)當(dāng)前的地址。開始時(shí)匯編器將每個(gè)SPC置0。當(dāng)匯編器將程序代碼或數(shù)據(jù)加到段內(nèi)時(shí),增加相應(yīng)的SPC值。若再繼續(xù)對(duì)某個(gè)段匯編,則相應(yīng)的S
25、PC就在先前的數(shù)值上繼續(xù)增加。 5. 段程序計(jì)數(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個(gè)單元 ;0456h放入.data段 ;初始化文本段 共計(jì)5個(gè)字 ;初始化數(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個(gè)單元 ;在newvars段保留8個(gè)單元 ;初始化文本段 共計(jì)5個(gè)字 ;建立vectors命名段 ;2組數(shù)據(jù)放入vectors命名段編輯ppt經(jīng)匯編后,得列表文件(部分): 2 *3 * 匯編一個(gè)初始化表到.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源程序的行號(hào) 段程序計(jì)數(shù)器目標(biāo)代碼匯編語言源程序編輯ppt源程序的行號(hào) 段程序計(jì)數(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 * 匯編另一個(gè)初始化表到.data 段 * 24 *25 0004 .data 26 0004 00cc ivals .word 0CCh,0DDh,0EEh 0005 00dd 0006 00ee27 *28 * 為更多的變量定義另一個(gè)段 *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定義一個(gè)自定義段 * 41 *42 0000 .sect “vectors” 43 0000 0044 .word 044h,088h 0001 0088 源程序的行號(hào) 段程序計(jì)數(shù)器目標(biāo)代碼匯編語言源程序編輯ppt 匯編語言源程序經(jīng)過匯編后,共建立了5個(gè)段: .text段文本段,段內(nèi)有6條共10個(gè)字可執(zhí) 行的程序代碼。 .data段已初始化的數(shù)據(jù)段,段內(nèi)有7 個(gè)字的數(shù)據(jù)。 vectors段用.
30、sect命令生成的命名段, 段內(nèi)有2個(gè)字的初始化數(shù)據(jù)。 .bss段未初始化的數(shù)據(jù)段,在存儲(chǔ)器中 為變量保留8個(gè)存儲(chǔ)單元。 newvars段用.usect命令建立的命名段, 為變量保留10個(gè)存儲(chǔ)單元。 編輯ppt【例】比較.byte,.int,.long,.word和.string偽指令。 源程序: .byte 0AAh,0BBh .word 0CCCh .long 0EEEEFFFFh .int 0DDDDh .string “help” .byte:將一個(gè)或多個(gè)8位值放入當(dāng)前段的連續(xù)字中。 15 0 15 00,1 0 0 A A 0 0 B B .word:將一個(gè)或多個(gè)16位值放入當(dāng)前段的
31、連續(xù)字中。2 0 C C C .long:將32位值放入當(dāng)前段的2個(gè)連續(xù)的字中,先存最高有效位。3,4 E E E E F F F F .int:將一個(gè)或多個(gè)16位值放入當(dāng)前段的連續(xù)的字中。5 D D D D .string:將一個(gè)或多個(gè)字符串中的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偽指令: 功能:將單個(gè)數(shù)值放進(jìn)當(dāng)前字的指定位域中。 采用.field偽指令,可以將多個(gè)字段或域打包成單個(gè)字,直到字被填滿為止,匯編器不增加SPC。 指令格式: . field value ,size in bits 單個(gè)數(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組成一個(gè)字,不改變SPC。占用兩個(gè)字, SPC+2。占用兩個(gè)字, SPC+2。編輯ppt COFF文件中有一個(gè)符號(hào)表,主要用來存儲(chǔ)程序中有關(guān)符號(hào)的信息。鏈接器在執(zhí)行程序定位時(shí),要使用符號(hào)表提供的信息,而調(diào)試工具也要使用該表來提供符號(hào)調(diào)試。 外部符號(hào):是指在一個(gè)模塊中定義、而在另一個(gè)模塊中引用的符號(hào)。它可以用偽指令.def、.ref或.global來定義。 .def在當(dāng)前模塊中定義,并可在別的模塊中使用的符號(hào); .ref 在當(dāng)前模塊中使用,但在別的模塊中定義的符號(hào); .global可以是上面的任何一種情況。 2定義和引用外部符號(hào)的偽指令4.3.3 匯編器常用
37、偽指令 編輯ppt【例】說明代碼段中外部符號(hào)的定義。 .def x .ref y x: ADD #56h,A B y ;定義x ;引用y 4.3.3 匯編器常用偽指令 編輯ppt4.3.4 鏈接器對(duì)段的處理 鏈接器是開發(fā)C54x器件必不可少的開發(fā)工具之一,它對(duì)段處理時(shí)有2個(gè)主要任務(wù): 將一個(gè)或多個(gè)COFF目標(biāo)文件中的各種段作為鏈接器的輸入,經(jīng)鏈接后在一個(gè)執(zhí)行的COFF輸出模塊中建立各個(gè)輸出段; 在程序裝入時(shí)對(duì)其重新定位,為各個(gè)輸出段選定存儲(chǔ)器地址。 編輯ppt 鏈接器由鏈接命令文件提供的鏈接信息。 在鏈接命令文件中,可使用MEMORY和SECTIONS偽指令,為實(shí)際應(yīng)用指定存儲(chǔ)器結(jié)構(gòu)和地址的映
38、射。 MEMORY用來指定目標(biāo)存儲(chǔ)器結(jié)構(gòu)。 SECTIONS用來控制段的構(gòu)成與地址分配。 4.3.4 鏈接器對(duì)段的處理 編輯ppt4.3.5 MEMORY指令 MEMORY指令用來規(guī)定目標(biāo)存儲(chǔ)器的結(jié)構(gòu)。 在實(shí)際的應(yīng)用中,目標(biāo)系統(tǒng)所配置的存儲(chǔ)器是各不相同的,通過MEMORY指令,可以進(jìn)行各種各樣的存儲(chǔ)器配置。 MEMORY指令的句法: MEMORY PAGE0:name 1(attr):origin=constant, length=constant; PAGEn:name n(attr):origin=constant, length=constant; 指令字存儲(chǔ)區(qū)間說明語句書寫方式: 用大
39、寫MEMORY指令字開始; 由大括號(hào)括起來的存儲(chǔ)器區(qū)間說明。存儲(chǔ)區(qū)間:存儲(chǔ)頁面區(qū)間名稱區(qū)間屬性起始地址區(qū)間長度編輯ppt4.3.5 MEMORY指令 存儲(chǔ)區(qū)間說明語句: PAGE: 指定存儲(chǔ)器空間頁面,最多為255頁, 取決于目標(biāo)存儲(chǔ)器的配置。 每一個(gè)PAGE代表一個(gè)完全獨(dú)立的地址空間。 通常,PAGE 0用于程序存儲(chǔ)器; PAGE 1用于數(shù)據(jù)存儲(chǔ)器。 若沒有規(guī)定PAGE,則鏈接器默認(rèn)為PAGE 0。 編輯ppt4.3.5 MEMORY指令 存儲(chǔ)區(qū)間說明語句: name: 存儲(chǔ)器區(qū)間名稱??捎捎米帜浮?、.、_ 等組成。 存儲(chǔ)器區(qū)間為內(nèi)部記號(hào),因此不需要保留在輸出文件或者符號(hào)表中。 不同PAG
40、E上的存儲(chǔ)器區(qū)間可以取相同的名字,但在同一PAGE內(nèi)的名字不能相同,且不許重疊配置。 編輯ppt4.3.5 MEMORY指令 存儲(chǔ)區(qū)間說明語句: attr: 為任選項(xiàng),用來為命名的存儲(chǔ)器區(qū)間規(guī) 定14個(gè)屬性。 當(dāng)對(duì)輸出段定位時(shí),可利用屬性限制輸出段分配到一定的存儲(chǔ)區(qū)間。 屬性選項(xiàng)共有4項(xiàng): R 規(guī)定可以對(duì)存儲(chǔ)器執(zhí)行讀操作。 W 規(guī)定可以對(duì)存儲(chǔ)器執(zhí)行寫操作。 X 規(guī)定存儲(chǔ)器可以裝入可執(zhí)行的程序代碼。 I 規(guī)定可以對(duì)存儲(chǔ)器進(jìn)行初始化。 任何一個(gè)沒有規(guī)定屬性的存儲(chǔ)器(包括所有默認(rèn)方式的存儲(chǔ)器)都有全部4項(xiàng)屬性。 編輯ppt4.3.5 MEMORY指令 存儲(chǔ)區(qū)間說明語句: origin: 用來指定存儲(chǔ)
41、區(qū)間的起始地址,可簡(jiǎn) 寫為org或o。其值以字為單位,可以 用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。 Length: 用來指定存儲(chǔ)器空間的長度,可簡(jiǎn)寫 為len或l,其值以字為單位,可以用 十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。 編輯ppt【例】用MEMORY偽指令編寫連接命令文件。要求: 程序存儲(chǔ)器:4K字ROM,起始地址為C00h,取名為ROM。 數(shù)據(jù)存儲(chǔ)器: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 兩個(gè)輸入文件一個(gè)輸出文件 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、存儲(chǔ)器00000h0FFFFh00C00h1000h01C00hROMPAGE 1: SCR: org=60h, len=20h數(shù)據(jù)存儲(chǔ)器00000h0FFFFh00060h0007Fh20hSCR CHIP:org=80h, len=200h00080h200h0027FhCHIP編輯ppt4.3.6 SECTIONS指令 用來控制段的構(gòu)成與地址分配。指令功能: 說明如何將輸入段組合成輸出段; 在可執(zhí)行程序中定義輸出段; 規(guī)定輸出段在存儲(chǔ)器中的存放位置; 允許重新命名輸出段。1. SECTIONS指令語法 編輯pptSECTIONS指令的句法: SECTIONS name:property,
44、 property, property, name:property, property, property, name:property, property, property, 指令字輸出段說明語句 段名:定義輸出段的名稱。 屬性:定義該段的內(nèi)容和存儲(chǔ)器的分配。段名1. SECTIONS指令語法屬性屬性屬性編輯ppt1. SECTIONS指令語法 段屬性用來定義輸出段的內(nèi)容和存儲(chǔ)地址的分配。包括的內(nèi)容如下: 裝入存儲(chǔ)器分配 運(yùn)行存儲(chǔ)器分配 輸入段 編輯ppt1. SECTIONS指令語法 裝入存儲(chǔ)器分配 用于定義段裝入時(shí)的存儲(chǔ)器地址。語法格式: load=allocation 或 allo
45、cation 或 allocation allocation: 關(guān)于段地址的說明,即給段分配存儲(chǔ) 單元。 編輯ppt1. SECTIONS指令語法 裝入存儲(chǔ)器分配例如: .text: load=0 x1000 .text: loadROM .bss: load(RW) .text: PAGE 0 將.text段定位到一個(gè)特定的地址。 將.text段定位到命名為ROM的存儲(chǔ)區(qū)。 將.bss段定位到屬性為R、W的存儲(chǔ)區(qū)。將.text段定位到PAGE 0。編輯ppt1. SECTIONS指令語法 裝入存儲(chǔ)器分配 若用到一個(gè)以上參數(shù),可以將它們排成一行。 例如: .text: ROM (PAGE 0
46、) 。 編輯ppt1. SECTIONS指令語法 運(yùn)行存儲(chǔ)器分配 用于定義段運(yùn)行時(shí)的存儲(chǔ)器地址。語法格式: run=allocation 或 run allocation 編輯ppt1. SECTIONS指令語法 鏈接器為段在目標(biāo)存儲(chǔ)器中分配兩個(gè)地址: 加載的地址由裝入存儲(chǔ)器分配完成 執(zhí)行程序的地址由運(yùn)行存儲(chǔ)器分配完成 通常,這兩個(gè)地址是相同的。 若要想把程序的加載和運(yùn)行分開,先將程序加載到ROM,然后在RAM中運(yùn)行,則用SECTIONS命令讓鏈接器對(duì)這個(gè)段定位兩次即可。 例如: .fir: load=ROM,run=RAM 編輯ppt1. SECTIONS指令語法 輸入段 用于定義組成輸出段
47、的輸入段。語法格式:out_section:input_sections 在SECTIONS命令中如果不列出輸入文件的輸入段的段名,則默認(rèn)把同名段鏈接成一個(gè)輸出段。 例如: SECTIONS .text: .data: .bss 鏈接時(shí):在輸入文件中的所有.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 兩個(gè)輸入文件鏈接命令選項(xiàng)指令字輸出段說明語句編輯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 輸出段加載地址運(yùn)行地址.textROMRAM 800h.conROM.bssRAM.v
50、ecROM FF80.dataRAM 700h.vec段由輸入文件中的.int1和.int2兩個(gè)輸入段構(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 輸出段加載地址運(yùn)行地址.textROMRAM 800h.conROM.bssRAM.ve
51、cROM FF80.dataRAM 700h ROM RAM00h.text.con.bss.vec.dataFF80h運(yùn)行時(shí)800h.text.text.text700h編輯ppt4.3.7 MEMORY和SECTIONS命令的默認(rèn)使用 如果沒有利用MEMORY和SECTIONS命令,鏈接器就按默認(rèn)算法來定位輸出段。 將所有的.text輸入段鏈接成一個(gè).text輸出段,并配置到PAGE 0上的存儲(chǔ)器; 將所有的.data輸入段組合成.data輸出段,定位到PAGE 0上的存儲(chǔ)器; 編輯ppt 所有的.bss輸入段則組合成一個(gè).bss輸出段,并由鏈接器定位到配置為PAGE 1上的存儲(chǔ)器。 如果
52、輸入文件中包含有已初始化的命名段,則鏈接器將它們定位到程序存儲(chǔ)器,緊隨.data段之后。 如果輸入文件中包括有未初始化的命名段,則鏈接器將它們定位到數(shù)據(jù)存儲(chǔ)器,并緊隨.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 多個(gè)文件的鏈接實(shí)例 下面以example.asm源程序?yàn)槔瑢?fù)位向量列為一個(gè)單獨(dú)的文件,對(duì)兩個(gè)目標(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個(gè)字的空間 .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個(gè)等待狀態(tài) STM #STACK+10h,SP ;設(shè)置堆棧指針 STM #a,AR1 ;AR1指向a RPT #7 ;移動(dòng)8個(gè)數(shù)據(jù) MVPD table,*AR1+ ;從程序存儲(chǔ)器到數(shù)據(jù)存儲(chǔ)器 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) 對(duì)源文件匯編(4) 編寫鏈接命令文件 編寫的命令文件用來鏈接兩個(gè)目標(biāo)文件(輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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版酒店紅酒供貨合同
- 2025年度新能源汽車充電樁運(yùn)營管理合同重點(diǎn)條款探討3篇
- 2024政府機(jī)關(guān)綠化工程采購合同范本二零二四2篇
- 二零二五版合同能源服務(wù)與節(jié)能產(chǎn)品推廣協(xié)議模板3篇
- 2025年度智能場(chǎng)館場(chǎng)地租賃合同范本3篇
- 2024自建房施工合同包工包料合同
- 二零二四年度35kv架空線路施工工程設(shè)計(jì)與施工協(xié)調(diào)合同
- 2025年度金融機(jī)構(gòu)外匯借款合同模板12篇
- 勞動(dòng)合同編號(hào):XX-2025年度-001
- 2025年智能燃?xì)獗硗茝V與應(yīng)用居民供氣合同3篇
- 2023年湖北省武漢市高考數(shù)學(xué)一模試卷及答案解析
- 城市軌道交通的網(wǎng)絡(luò)安全與數(shù)據(jù)保護(hù)
- 英國足球文化課件
- 《行政職業(yè)能力測(cè)驗(yàn)》2023年公務(wù)員考試新疆維吾爾新疆生產(chǎn)建設(shè)兵團(tuán)可克達(dá)拉市預(yù)測(cè)試題含解析
- 醫(yī)院投訴案例分析及處理要點(diǎn)
- 燙傷的安全知識(shí)講座
- 工程變更、工程量簽證、結(jié)算以及零星項(xiàng)目預(yù)算程序?qū)嵤┘?xì)則(試行)
- 練習(xí)20連加連減
- 五四制青島版數(shù)學(xué)五年級(jí)上冊(cè)期末測(cè)試題及答案(共3套)
- 員工內(nèi)部崗位調(diào)換申請(qǐng)表
- 商法題庫(含答案)
評(píng)論
0/150
提交評(píng)論