第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)_第1頁
第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)_第2頁
第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)_第3頁
第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)_第4頁
第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023年2月6日DSP原理及應(yīng)用1內(nèi)容提要

可編程DSP芯片開發(fā)需要一套完整的軟、硬件開發(fā)工具。通??煞殖纱a生成工具和代碼調(diào)試工具兩大類。

本章主要介紹代碼生成工具,包括:匯編語言程序的編輯、匯編、鏈接過程,COFF段的一般概念,匯編器、鏈接器對段的處理方法,鏈接器對程序的重新定位、程序裝入等。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用25.1

匯編語言程序的編輯、匯編、鏈接過程5.2COFF的一般概念第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)√2023年2月6日DSP原理及應(yīng)用3第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)5.1匯編語言程序的編輯、匯編、鏈接過程

匯編語言源程序可以在任何一種文本編輯器中進行。如:WORD、EDIT、TC等。

當(dāng)匯編語言源程序編寫完成后,必須經(jīng)過匯編和鏈接后才能運行。

2023年2月6日DSP原理及應(yīng)用4匯編語言程序的編輯、匯編、鏈接過程示意圖匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件.cmd鏈接命令文件.lst列表文件.map存儲器映像文件十六進制轉(zhuǎn)換程序HEX500-

o-

m-

l第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用55.1匯編語言程序的編輯、匯編、鏈接過程1.

編輯

利用各種文本編輯器,如WORD、EDIT和TC等,可編寫匯編語言源程序。

2.

匯編當(dāng)匯編語言源程序編寫好以后,可利用’C54x的匯編器ASM500,對一個或多個源程序分別進行匯編,并生成列表文件(.lst)和目標(biāo)文件(.obj)。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用65.1匯編語言程序的編輯、匯編、鏈接過程2.

匯編常用的匯編命令:

asm500%1-s-1-x調(diào)用匯編器命令

源文件名

將程序所有定義的符號放在目標(biāo)文件的符號表中

生成一個列表文件.lst

生成一個交叉匯編表

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用75.1匯編語言程序的編輯、匯編、鏈接過程3.

鏈接所謂鏈接,就是利用’C54x的鏈接器LNK500,根據(jù)鏈接器命令文件(.cmd)對已匯編過的一個或多個目標(biāo)文件(.obj)進行鏈接,生成輸出文件(.out)和存儲器映像文件(.map)。

常用的匯編器命令:

lnk500%1.cmdlnk500:

調(diào)用鏈接器命令

%1.cmd:

鏈接命令文件名,該文件須指明目標(biāo)文件、輸入文件、輸出文件、鏈接選項和存儲器配置要求等。第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用85.1匯編語言程序的編輯、匯編、鏈接過程4.

調(diào)試對輸出文件(.out)

調(diào)試主要采用以下手段:(1)利用軟件仿真器進行調(diào)試

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)(2)利用硬件仿真器進行調(diào)試

(3)利用評價模塊進行調(diào)試

2023年2月6日DSP原理及應(yīng)用95.1匯編語言程序的編輯、匯編、鏈接過程4.

調(diào)試

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用105.1匯編語言程序的編輯、匯編、鏈接過程5.

固化用戶程序第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用115.1

匯編語言程序的編輯、匯編、鏈接過程5.2COFF的一般概念第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)√2023年2月6日DSP原理及應(yīng)用125.2

COFF的一般概念

匯編器和鏈接器生成的目標(biāo)文件,是一個可以由’C54x器件執(zhí)行的文件。這些目標(biāo)文件的格式稱之為公共目標(biāo)文件格式(CommonObjectFileFormat,COFF)。

在編寫匯編語言程序時,COFF采用代碼段和數(shù)據(jù)段的形式,以便于模塊化的編程,使編程和管理變得更加方便。

這些代碼段和數(shù)據(jù)段簡稱為段。匯編器和鏈接器提供一些偽指令來建立和管理各種各樣的段。

了解COFF段的一般概念,有助于理解匯編語言程序的編輯、匯編和鏈接過程。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用135.2

COFF的一般概念5.2.1

COFF文件的基本單元

COFF文件有3種類型:COFF0、COFF1、COFF2。

每種類型的COFF文件,其標(biāo)題格式都有所不同,但數(shù)據(jù)部分是相同的。

鏈接器能夠讀/寫所有類型的COFF文件,默認時鏈接器生成的是COFF2文件,采用-vn鏈接選項可以選擇不同類型的COFF文件。

’C54x匯編器和C編譯器產(chǎn)生的是COFF2文件。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用145.2.1

COFF文件的基本單元

1.

段(sections)

“段”是COFF文件中最重要的概念。每個目標(biāo)文件都分成若干段,每個段都是分開且各不相同的。

段——存儲器圖中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。所有的COFF目標(biāo)文件都包含以下3種形式的段:

.text

段(文本段),通常包含可執(zhí)行代碼;.data

段(數(shù)據(jù)段),通常包含初始化數(shù)據(jù);.bss

段(保留空間段),通常為未初始化變量保留存儲空間。第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用155.2.1

COFF文件的基本單元

1.

段(sections)

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用165.2.1

COFF文件的基本單元

2.

段的基本類型

COFF目標(biāo)文件中的段有兩種基本類型:

初始化段(Initializedsections)

未初始化段(Uninitializedsections)(1)

初始化段初始化段中包含有數(shù)據(jù)或程序代碼。主要包括:

.text段——已初始化段;

.data段——已初始化段;.sect段——已初始化段,由匯編器偽指令建立的自定義段。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用175.2.1

COFF文件的基本單元

2.

段的基本類型

COFF目標(biāo)文件中的段有兩種基本類型。(2)

未初始化段

在存儲空間中,為未初始化數(shù)據(jù)保留存儲空間。主要包括:

.bss段——未初始化段;.usect段——未初始化段,由匯編命令建立的命名段(自定義段)。第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用185.2.1

COFF文件的基本單元

3.

段與目標(biāo)存儲器的對應(yīng)關(guān)系

匯編器的任務(wù):在匯編過程中,根據(jù)匯編命令用適當(dāng)?shù)亩螌⒏鞑糠殖绦虼a和數(shù)據(jù)連在一起,構(gòu)成目標(biāo)文件。

鏈接器的任務(wù):即分配存儲單元,將目標(biāo)文件中的段重新定位到目標(biāo)系統(tǒng)的存儲器中,這一過程稱為定位或分配。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用193.

段與目標(biāo)存儲器的對應(yīng)關(guān)系目標(biāo)文件中的段與目標(biāo)存儲器之間的關(guān)系

目標(biāo)文件目標(biāo)存儲器.bss.data.textRAME2PROMROM第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用205.2.2

匯編器對段的處理

匯編器對段的處理是通過段偽指令來區(qū)別各個段的,并將段名相同的語句匯編在一起。

匯編器有5條偽指令可識別匯編語言程序的各個部分:

.bss

.usect

.text

.data

.sect——定義未初始化段——定義未初始化段——定義已初始化段——定義已初始化段——定義已初始化段第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用215.2.2

匯編器對段的處理

未初始化段就是在’C54x存儲器中的保留空間,通常將它們定位在RAM區(qū)。

在目標(biāo)文件中,這些段中沒有確切的內(nèi)容。

由這些段定義的空間僅作為臨時存儲空間,在程序運行時,可以利用這些存儲空間存放變量。

未初始化段分為默認的和命名的兩種,分別由匯編器偽指令.bss和.usect產(chǎn)生。1.未初始化段

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用22(1).bss偽指令1.未初始化段

用于在bss段中保留若干個空間。

格式:

.bss

符號,字數(shù)符號——對應(yīng)于保留的存儲空間第一個字的變量名稱??梢宰屍渌我?,也可以用.global命令定義為全局符號。

字數(shù)——表示在bss段或標(biāo)有名字的段中保留若干個存儲單元。

每調(diào)用一次.bss偽指令,匯編器在相應(yīng)的段保留更多的空間。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用231.未初始化段

(2).usect偽指令

用于為指定的命名段保留若干個空間。

格式:符號.usect

“段名”,字數(shù)段名——程序員為未初始化的命名段定義的名字。

每調(diào)用一次.usect偽指令,匯編器在指定的命名段保留更多的空間。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用245.2.2

匯編器對段的處理

已初始化段中包含有可執(zhí)行代碼或初始化數(shù)據(jù)。

這些段中的內(nèi)容都在目標(biāo)文件中,當(dāng)加載程序時再放到’C54x的存儲器中。

每個已初始化段都是可以重新定位的,并且可以引用其他段中所定義的符號。

鏈接器在鏈接時會自動地處理段間的相互引用。

已初始化段由.text、.data和.sect三個偽指令建立。2.

已初始化段第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用25已初始化命令的句法:

2.

已初始化段

.text[段起點]

.data[段起點]

.sect

“段名”[,段起點]段起點——任選項;若選用,它為段程序計數(shù)器SPC定義一個起始值;若默認,則SPC從0開始。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用26

當(dāng)匯編器遇到.text或.data或.sect命令時,將停止對當(dāng)前段的匯編(相當(dāng)于一條結(jié)束當(dāng)前段匯編的命令),然后將緊接著的程序代碼或數(shù)據(jù)匯編到指定的段中,直到再遇到另一條.text、.data或.sect命令為止。

當(dāng)匯編器遇到.bss或.usect命令時,并不結(jié)束當(dāng)前段的匯編,只是暫時從當(dāng)前段脫離出來,并開始對新的段進行匯編。.bss和.usect命令可以出現(xiàn)在一個已初始化段的任何位置,而不會對它的內(nèi)容發(fā)生影響。第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2.

已初始化段2023年2月6日DSP原理及應(yīng)用27第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2.

已初始化段2023年2月6日DSP原理及應(yīng)用285.2.2

匯編器對段的處理

命名段由用戶指定,與默認的.text,.data和.bss段的使用相同,但它們被分開匯編。例如,重復(fù)使用.text段建成單個.text段,在鏈接時,這個.text段被作為單個單元定位。3.

命名段(自定義段)第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用29

假如不希望一部分可執(zhí)行代碼(例如初始化程序)和.text段分配在一起,可將它們匯編進一個命名段,這樣就可定位在與.text不同的地方;也可將初始化的數(shù)據(jù)匯編到與.data段不同的地方;或者將未初始化的變量保留在與.bss段不同的位置。3.

命名段(自定義段)第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用30可用.usect和.sect兩個偽指令產(chǎn)生命名段。

.usect偽指令產(chǎn)生類似.bss的段,為變量在RAM中保留存儲空間。

.sect偽指令產(chǎn)生類似.text和.data的段,可以包含代碼或數(shù)據(jù)。

.sect偽指令產(chǎn)生可重新定位地址的命名段。3.

命名段第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用313.

命名段

產(chǎn)生命名段偽指令格式:

符號

.usect

“段名”,字數(shù)

.sect

“段名”可以產(chǎn)生多達32767個不同的命名段。段名可長達200個字符。第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用32

對于.sect和.usect偽指令,段名可以作為子段的參考。

每次用一個新名字調(diào)用這些偽指令時,就產(chǎn)生一個新的命名段。

若用已有的段名調(diào)用這些偽指令,則匯編器就將代碼或數(shù)據(jù)(或保留空間)匯編進相應(yīng)名稱的段中。

不同的偽指令不能使用相同的名字,即不能用.usect創(chuàng)建了命名段,然后又用.sect創(chuàng)建一個相同名字的段。3.

命名段第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用335.2.2

匯編器對段的處理

子段是較大段中的小段。鏈接器可以像處理其他段一樣處理子段。

子段結(jié)構(gòu)可用來對存儲器空間進行更緊湊的控制,可以使存儲器空間分配更加緊密。

4.

子段子段命名格式:基段名:子段名

子段名前為基段名,隨后為冒號,最后為子段名。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用34對于子段,匯編器可以單獨為其分配存儲單元,或者在相同的基段名下與其他段組合在一起。子段有兩種類型:(1)用.sect命令建立的段是已初始化的子段;(2)用.usect命令建立的段是未初始化的子段。

4.

子段

例如,若要在.text段內(nèi)建立一個稱之為_func的子段,其命令格式:

.sect

“.text:_func”

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用355.2.2

匯編器對段的處理

匯編器為每個段都安排了一個單獨的程序計數(shù)器稱之為段程序計數(shù)器(SectionProgramCounters,SPC)。

SPC表示在程序代碼或數(shù)據(jù)段內(nèi)當(dāng)前的地址。開始時匯編器將每個SPC置0。5.

段程序計數(shù)器SPC第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用36

當(dāng)匯編器將程序代碼或數(shù)據(jù)加到段內(nèi)時,增加相應(yīng)的SPC值。若再繼續(xù)對某個段匯編,則相應(yīng)的SPC就在先前的數(shù)值上繼續(xù)增加。

鏈接器在鏈接時要對每個段進行重新定位。5.

段程序計數(shù)器SPC第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用37【例5.2.1】段命令應(yīng)用舉例。

匯編語言源程序:

.datacoeff.word044h,055h,066h.bssbuffer,8prt.word0456h.textadd:LD0Dh,Aaloop:SUB#1,A

BCaloop,AGEQ.dataivals.word0CCh,0DDh,0EEh

;初始化數(shù)據(jù)段

;3組數(shù)據(jù)放入.data段

;在.bss段保留8個單元

;0456h放入.data段

;初始化文本段

;1字指令

;2字指令

;2字指令共計5個字

;初始化數(shù)據(jù)段

;3組數(shù)據(jù)放入.data段第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用38匯編語言源程序:var2.usect“newvars”,2inbuf.usect“newvars”,8

.text

mpy:

LD0Ah,B

mloop:

MPY#0Ah,BBCmloop,BNOV.sect“vectors”

.word044h,088h

;建立newvars命名段,保留2個單元

;在newvars段保留8個單元

;初始化文本段

;1字指令

;2字指令

;2字指令共計5個字;建立vectors命名段

;2組數(shù)據(jù)放入vectors命名段第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用39經(jīng)匯編后,得列表文件(部分):2**********************************3

**匯編一個初始化表到.data段**4

**********************************5

0000.data6

0000

0044coeff.word044h,055h,066h

0001

0055

0002

00667**********************************8**在.bss段中為變量保留空間**9**********************************10

0000.bssbuffer,811**********************************12**仍然在.data段中**13**********************************14

0003

0456prt.word0456h第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用4015**********************************16**匯編代碼到.text段**17**********************************18

0000.text19

0000

100dadd:

LD0Dh,A20

0001

f010aloop:SUB#1,A

0002

0001

21

0003

f842

BCaloop,AGEQ

0004

0001’

22

**********************************23

**匯編另一個初始化表到.data段**

24**********************************25

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

00ee27**********************************28

**為更多的變量定義另一個段**29**********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用4132

****************************************33

**匯編更多代碼到.text段**34****************************************35

0005

.text

36

0005

110a

mpy:

LD0Ah,B

37

0006

f166mloopMPY#0Ah,B

0007

000a

38

0008

f868BCmloop,BNOV

0009

0006’

39****************************************40

**為中斷向量.vectors定義一個自定義段**41****************************************42

0000

.sect“vectors”

43

0000

0044

.word044h,088h

0001

0088

源程序的行號

段程序計數(shù)器目標(biāo)代碼匯編語言源程序第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用42

匯編語言源程序經(jīng)過匯編后,共建立了5個段:

.text段——文本段,段內(nèi)有10個字可執(zhí)行

的程序代碼。

.data段——已初始化的數(shù)據(jù)段,段內(nèi)有7

個字的數(shù)據(jù)。

vectors段——用.sect命令生成的命名段,

段內(nèi)有2個字的初始化數(shù)據(jù)。

.bss段——未初始化的數(shù)據(jù)段,在存儲器中

為變量保留8個存儲單元。

newvars段——用.usect命令建立的命名段,為變量保留10個存儲單元。第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用4315********************************16**匯編代碼到.text段**17********************************18

0000.text19

0000

100dadd:

LD0Dh,A20

0001

f010aloop:SUB#1,A

0002

0001

21

0003

f842

BCaloop,AGEQ

0004

0001’

22

**********************************23

**匯編另一個初始化表到.data段**

24**********************************25

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

00ee27********************************28

**為更多的變量定義另一個段**29********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

行號目標(biāo)代碼段名100df0100001f8420001110af166000aF868000666614004400550066045600cc00dd00ee.data00440088

10沒有數(shù)據(jù)保留8個字.bss沒有數(shù)據(jù)保留10個字.text

180000.text190000100dadd:

LD0Dh,A19

100d200001f010aloop:SUB#1,A20

f01020

0001210003f842BCaloop,AGEQ21

f84221

0001250004.data26000400ccivals.word0CCh,0DDh,0EEh.data

26

00cc26

00dd26

00ee300000var2.usect“newvars”,2newvars

30

保留2個字310001inbuf.usect“newvars”,831

保留8個字第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用44經(jīng)匯編后,得列表文件(部分):2*******************************3

**匯編一個初始化表到.data段**4

*******************************5

0000.data6

0000

0044coeff.word044h,055h,066h

00010055

000200667*******************************8**在.bss段中為變量保留空間**9*******************************10

0000.bssbuffer,811*******************************12**仍然在.data段中**13*******************************14

00030456prt.word0456h行號目標(biāo)代碼段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088

沒有數(shù)據(jù)保留10個字50000.data600000044coeff.word044h,055h,066h100000.bssbuffer,81400030456prt.word0456h.data

6

00446

00556

006610

.bss

沒有數(shù)據(jù)保留8個字14

0456第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用4532

*********************************33

**匯編更多代碼到.text段**34*********************************35

0005

.text

36

0005

110a

mpy:

LD0Ah,B

370006

f166mloopMPY#0Ah,B

0007

000a

38

0008

f868BCmloop,BNOV

0009

0006’

39****************************************40

**為中斷向量.vectors定義一個自定義段**41****************************************42

0000

.sect“vectors”

430000

0044

.word044h,088h

0001

0088

行號目標(biāo)代碼段名1920202121100df0100001f8420001110af166000aF8680006.text66614262626004400550066045600cc00dd00ee.data00440088

10沒有數(shù)據(jù)保留8個字.bss3031沒有數(shù)據(jù)保留10個字newvars350005.text.text

360005110ampy:

LD0Ah,B36

110a370006f166mloopMPY#0Ah,B37

f16837

000a380008f868BCmloop,BNOV38

f86838

0006420000.sect“vectors”vectors

4300000044.word044h,088h43

004443

0088第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用465.2.3

鏈接器對段的處理

鏈接器是開發(fā)’C54x器件必不可少的開發(fā)工具之一,它對段處理時有2個主要任務(wù):

將一個或多個COFF目標(biāo)文件中的各種段作為鏈接器的輸入段,經(jīng)鏈接后在一個執(zhí)行的COFF輸出模塊中建立各個輸出段;

②在程序裝入時對其重新定位,為各個輸出段選定存儲器地址。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用475.2.3

鏈接器對段的處理

鏈接器有2條偽指令支持上述任務(wù):

MEMORY偽指令——用來定義目標(biāo)系統(tǒng)的存儲器配置空間,包括對存儲器各部分命名,以及規(guī)定它們的起始地址和長度。

SECTIONS偽指令——用來指定鏈接器將輸入段組合成輸出段方式,以及輸出段在存儲器中的位置,也可用于指定子段。

若未使用偽指令,則鏈接器將使用目標(biāo)處理器默認的方法將段放入存儲空間。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用485.2.3

鏈接器對段的處理1.默認的存儲器分配

鏈接器可對多個目標(biāo)文件進行鏈接。若鏈接文件中不使用MEMORY和SECTIONS命令,則為默認方式。

每個目標(biāo)文件都有.text,.data、.bss段和命名段。若采用默認鏈接,鏈接器將對多個目標(biāo)文件中的各個段進行組合,形成各自的對應(yīng)段,并將各個段配置到所指定的存儲器中,形成可執(zhí)行的目標(biāo)模塊。在默認的方式下,鏈接器將從存儲器的0080h開始,對組合后的各段進行存儲器配置。第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用49默認的存儲器分配:

①將所有.text段組合在一起,形成一個.text段,并分配到程序存儲器中;

②將多個目標(biāo)文件中的.data段組合在一起,分配到緊接著.text段的程序存儲空間中;

③將.bss段組合,配置到數(shù)據(jù)存儲器中;

④組合命名段。初始化的命名段按順序分配到緊隨.data段的程序存儲器,而未初始化命名段將被配置到緊隨.bss段的數(shù)據(jù)存儲器中。

1.默認的存儲器分配第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用50默認的存儲器分配過程:File1.obj.text1.data1.bss1table_1(初始化的命名段)u_vars1(未初始化的命名段)File2.obj.text2.data2.bss2table_2(初始化的命名段)u_vars2(未初始化的命名段)FFT(初始化的命名段)程序存儲器數(shù)據(jù)存儲器.text.text1.text2.data.data1.data2.bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT沒有使用沒有配置沒有配置沒有使用第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用515.2.3

鏈接器對段的處理2.段放入存儲器空間若不希望鏈接器將所有的.text段結(jié)合在一起形成單個的.text段,就不能采用默認的方式。由于DSP硬件系統(tǒng)中可能配置多種類型的存儲器,若要把某一段分配到特定類型的存儲器中,或?qū)⒚闻渲锰囟ǖ牡刂?,則需采用MEMORY和SECTIONS偽指令來配置。

若不采用默認的方式,通常需要建立一個鏈接命令文件.cmd,在鏈接命令文件中用MEMORY和SECTIONS偽指令定義存儲器和配置段地址。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用525.2.4

鏈接器對程序的重新定位1.

鏈接器重新定位匯編器對每個段匯編時都是從0地址開始,而所有需要重新定位的符號(標(biāo)號)在段內(nèi)都是相對于0地址的。事實上,所有段都不可能從存儲器中0地址單元開始,因此鏈接器必須對各個段進行重新定位。

重新定位的方法:

將各個段配置到存儲器中,使每個段都有一個合適的起始地址;

將符號變量調(diào)整到相對于新的段地址的位置;

將引用調(diào)整到重新定位后的符號,這些符號反映了調(diào)整后的新符號值。

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用531.

鏈接器重新定位匯編器在需要引用重新定位的符號處都留了一個重定位入口。鏈接器在對符號重新定位時,利用這些入口修正對符號的引用值。

【例5.2.2】一段采用助記符指令編寫的程序,經(jīng)匯編后得列表文件如下:

1

.refX2

.refZ30000.text40000F073

BY

;產(chǎn)生一個重定位入口

00010006’50002F073

BZ

;產(chǎn)生一個重定位入口

00030000!60004F020

LD#X,A

;產(chǎn)生一個重定位入口

00050000!70006F7E0

Y:RESET

第5章TMS320C54x的匯編語言程序設(shè)計基礎(chǔ)2023年2月6日DSP原理及應(yīng)用541.

鏈接器重新定位程序中有三個符號:

X、Z——是在另一個模塊中定義的;Y——在.text段中定義的。當(dāng)程序匯編時,X、Z的值為0——未定義的外部符號

Y的值為6——相對于.text段地址0定義匯編器形成了兩個重定位入口:

X和Z:在.text段中為一次外部引用,用符號!表示;Y:是一次內(nèi)部引用,用符號’表示。鏈接時,X重新定位在地址7100h

.text段起始地址重新定

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論