匯編語(yǔ)言程序開(kāi)發(fā)工具_(dá)第1頁(yè)
匯編語(yǔ)言程序開(kāi)發(fā)工具_(dá)第2頁(yè)
匯編語(yǔ)言程序開(kāi)發(fā)工具_(dá)第3頁(yè)
匯編語(yǔ)言程序開(kāi)發(fā)工具_(dá)第4頁(yè)
匯編語(yǔ)言程序開(kāi)發(fā)工具_(dá)第5頁(yè)
已閱讀5頁(yè),還剩113頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2023/10/2221:15DSP原理及應(yīng)用1第4章匯編語(yǔ)言程序開(kāi)發(fā)工具

內(nèi)容提要

可編程DSP芯片開(kāi)發(fā)需要一套完整的軟、硬件開(kāi)發(fā)工具。通??煞殖纱a生成工具和代碼調(diào)試工具兩大類(lèi)。代碼生成工具是指將高級(jí)語(yǔ)言或匯編語(yǔ)言編寫(xiě)的DSP程序轉(zhuǎn)換成可執(zhí)行的DSP芯片目標(biāo)代碼的工具程序,主要包括匯編器、鏈接器和C編譯器以及一些輔助工具程序等。

代碼調(diào)試工具包括C/匯編語(yǔ)言源碼調(diào)試器、仿真器等。

本章主要介紹代碼生成工具,包括’C54x軟件開(kāi)發(fā)流程、匯編語(yǔ)言程序的編寫(xiě)、編輯、匯編和鏈接過(guò)程、COFF段的一般概念、匯編器和鏈接器處理段的方法以及程序的重定位等。

2023/10/2221:15DSP原理及應(yīng)用2第4章匯編語(yǔ)言程序開(kāi)發(fā)工具

4.1

TMS320C54x軟件開(kāi)發(fā)過(guò)程

4.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程4.3

COFF的一般概念4.4源程序的匯編4.5鏈接器的使用2023/10/2221:15DSP原理及應(yīng)用3第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.1TMS320C54x軟件開(kāi)發(fā)過(guò)程

’C54x的應(yīng)用軟件開(kāi)發(fā)主要完成以下工作:(1)

選擇編程語(yǔ)言編寫(xiě)源程序

’C54x提供2種編程語(yǔ)言,即匯編語(yǔ)言和C/C++語(yǔ)言。對(duì)于完成一般功能的代碼,這兩種語(yǔ)言都可使用,但對(duì)于一些運(yùn)算量很大的關(guān)鍵代碼,最好采用匯編語(yǔ)言來(lái)完成,以提高程序的運(yùn)算效率。(2)

選擇開(kāi)發(fā)工具和環(huán)境

’C54x提供了兩種開(kāi)發(fā)環(huán)境。即非集成開(kāi)發(fā)環(huán)境和集成開(kāi)發(fā)環(huán)境CCS。

2023/10/2221:15DSP原理及應(yīng)用4第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.1TMS320C54x軟件開(kāi)發(fā)過(guò)程

1.

’C54x應(yīng)用軟件開(kāi)發(fā)流程

’C54x應(yīng)用軟件的開(kāi)發(fā)可在TI公司提供的開(kāi)發(fā)環(huán)境中進(jìn)行,用戶(hù)可以用C/C++語(yǔ)言或匯編語(yǔ)言編寫(xiě)源文件,經(jīng)C編譯器、匯編器生成COFF格式的目標(biāo)文件,再用鏈接器進(jìn)行鏈接,生成在’C54x上可執(zhí)行的目標(biāo)代碼,然后利用調(diào)試工具對(duì)可執(zhí)行的目標(biāo)代碼進(jìn)行仿真和調(diào)試。

當(dāng)調(diào)試完成后,通過(guò)Hex代碼轉(zhuǎn)換工具,將調(diào)試后的可執(zhí)行目標(biāo)代碼轉(zhuǎn)換成EPROM編程器能接受的代碼,并將該代碼固化到EPROM中或加載到用戶(hù)的應(yīng)用系統(tǒng)中,以便DSP目標(biāo)系統(tǒng)脫離計(jì)算機(jī)單獨(dú)運(yùn)行。

2023/10/2221:15DSP原理及應(yīng)用5第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.

’C54x應(yīng)用軟件開(kāi)發(fā)流程開(kāi)發(fā)過(guò)程的目的是產(chǎn)生一個(gè)可以由’C54x目標(biāo)系統(tǒng)執(zhí)行的模塊。C源文件C編譯器匯編源文件匯編器匯編源文件COFF目標(biāo)文件鏈接器可執(zhí)行的COFF文件宏源文件存檔器宏庫(kù)存檔器目標(biāo)文件庫(kù)建庫(kù)工具運(yùn)行時(shí)支持庫(kù)EPROM編程器交叉引用列表器調(diào)試工具TMS320C54x絕對(duì)地址列表器HEX代碼轉(zhuǎn)換工具2023/10/2221:15DSP原理及應(yīng)用6第4章匯編語(yǔ)言程序開(kāi)發(fā)工具2.

’C54x的開(kāi)發(fā)工具

TI公司提供的DSP開(kāi)發(fā)環(huán)境和工具主要包括以下三個(gè)部分:

代碼生成工具

代碼調(diào)試工具

實(shí)時(shí)操作系統(tǒng)2023/10/2221:15DSP原理及應(yīng)用7第4章匯編語(yǔ)言程序開(kāi)發(fā)工具2.

’C54x的開(kāi)發(fā)工具(1)代碼生成工具:

C編譯器:用來(lái)將C/C++語(yǔ)言源程序自動(dòng)編譯為’C54x的匯編語(yǔ)言源程序。

匯編器:用來(lái)將匯編語(yǔ)言源文件匯編成機(jī)器語(yǔ)言COFF目標(biāo)文件。

鏈接器:將匯編生成的、可重新定位的COFF目標(biāo)模塊組合成一個(gè)可執(zhí)行的COFF目標(biāo)模塊。

文檔管理器:允許用戶(hù)將一組文件(源文件或目標(biāo)文件)集中為一個(gè)文檔文件庫(kù)。

2023/10/2221:15DSP原理及應(yīng)用8第4章匯編語(yǔ)言程序開(kāi)發(fā)工具2.

’C54x的開(kāi)發(fā)工具

助記符指令—代數(shù)式指令翻譯器:用來(lái)將包含助記符指令的匯編語(yǔ)言源文件轉(zhuǎn)換成包含代數(shù)式指令的匯編語(yǔ)言源文件。

建庫(kù)實(shí)用程序:用來(lái)建立用戶(hù)自己使用的、并用C/C++語(yǔ)言編寫(xiě)的支持運(yùn)行的庫(kù)函數(shù)。

十六進(jìn)制轉(zhuǎn)換程序:可以很方便地將COFF目標(biāo)文件轉(zhuǎn)換成TI、Intel、Motorola等公司的目標(biāo)文件格式。(1)代碼生成工具:2023/10/2221:15DSP原理及應(yīng)用9第4章匯編語(yǔ)言程序開(kāi)發(fā)工具2.

’C54x的開(kāi)發(fā)工具(1)代碼生成工具:

絕對(duì)制表程序:將鏈接后的目標(biāo)文件作為輸入,生成.abs輸出文件。

交叉引用制表程序:利用目標(biāo)文件生成一個(gè)交叉引用清單,列出鏈接的源文件中的符號(hào)以及它們的定義和引用情況。2023/10/2221:15DSP原理及應(yīng)用10第4章匯編語(yǔ)言程序開(kāi)發(fā)工具2.

’C54x的開(kāi)發(fā)工具(2)代碼調(diào)試工具:

C/匯編語(yǔ)言源碼調(diào)試器:與軟件仿真器、評(píng)價(jià)模塊、軟件開(kāi)發(fā)系統(tǒng)、軟件仿真器等配合使用。

軟件仿真器:是一種模擬DSP芯片各種功能并在非實(shí)時(shí)條件下進(jìn)行軟件調(diào)試的調(diào)試工具,它不需目標(biāo)硬件支持,只需在計(jì)算機(jī)上運(yùn)行。

初學(xué)者工具DSK:是TI公司提供給初學(xué)者進(jìn)行DSP編程練習(xí)的一套廉價(jià)的實(shí)時(shí)軟件調(diào)試工具。

2023/10/2221:15DSP原理及應(yīng)用11第4章匯編語(yǔ)言程序開(kāi)發(fā)工具2.

’C54x的開(kāi)發(fā)工具(2)代碼調(diào)試工具:

軟件開(kāi)發(fā)系統(tǒng)SWDS:是一塊PC插卡,可提供低成本的評(píng)價(jià)和實(shí)時(shí)軟件開(kāi)發(fā),還可用來(lái)進(jìn)行軟件調(diào)試,程序可在DSP芯片上實(shí)時(shí)運(yùn)行。

可擴(kuò)展的開(kāi)發(fā)系統(tǒng)仿真器(XDS510):可用來(lái)進(jìn)行系統(tǒng)級(jí)的集成調(diào)試,是進(jìn)行DSP芯片軟硬件開(kāi)發(fā)的最佳工具。

評(píng)價(jià)模塊EVM板:是一種低成本的開(kāi)發(fā)板,可進(jìn)行DSP芯片評(píng)價(jià)、性能評(píng)估和有限的系統(tǒng)調(diào)試。

2023/10/2221:15DSP原理及應(yīng)用12第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程

匯編語(yǔ)言源程序可以在任何一種文本編輯器中進(jìn)行。如筆記本、WORD、EDIT、TC等。

當(dāng)匯編語(yǔ)言源程序編寫(xiě)完成后,還必須經(jīng)過(guò)匯編和鏈接后才能運(yùn)行。

2023/10/2221:15DSP原理及應(yīng)用13第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程示意圖匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件.cmd鏈接命令文件.lst列表文件.map存儲(chǔ)器映像文件十六進(jìn)制轉(zhuǎn)換程序HEX500-

o-

m-

l2023/10/2221:15DSP原理及應(yīng)用14第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程1.

編輯

利用各種文本編輯器,如筆記本、WORD、EDIT和TC等,可編寫(xiě)匯編語(yǔ)言源程序。

2.

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

2023/10/2221:15DSP原理及應(yīng)用15第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程2.

匯編常用的匯編命令:

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

源文件名

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

生成一個(gè)列表文件.lst

生成一個(gè)交叉匯編表

2023/10/2221:15DSP原理及應(yīng)用16第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程3.

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

常用的匯編器命令:

lnk500%1.cmd

lnk500:

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

%1.cmd:

鏈接命令文件名,該文件須指明目標(biāo)文件、輸入文件、輸出文件、鏈接選項(xiàng)和存儲(chǔ)器配置要求等。2023/10/2221:15DSP原理及應(yīng)用17第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3

COFF的一般概念

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

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

這些代碼段和數(shù)據(jù)段簡(jiǎn)稱(chēng)為段。匯編器和鏈接器提供一些偽指令來(lái)建立和管理各種各樣的段。2023/10/2221:15DSP原理及應(yīng)用18第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3

COFF的一般概念

4.3.1

COFF文件的基本單元

COFF文件有3種類(lèi)型:COFF0、COFF1、COFF2。

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

鏈接器能夠讀/寫(xiě)所有類(lèi)型的COFF文件,默認(rèn)時(shí)鏈接器生成的是COFF2文件,采用-vn鏈接選項(xiàng)可以選擇不同類(lèi)型的COFF文件。

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

2023/10/2221:15DSP原理及應(yīng)用19第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.1

COFF文件的基本單元

1.

段(sections)

是COFF文件中最重要的概念。每個(gè)目標(biāo)文件都分成若干段。

段——是存儲(chǔ)器中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。一個(gè)目標(biāo)文件中的每個(gè)段都是分開(kāi)的和各不相同的。

COFF目標(biāo)文件都包含以下3種形式的段:

.text

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

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

段(保留空間段),通常為未初始化變量保留存儲(chǔ)空間。2023/10/2221:15DSP原理及應(yīng)用20第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.1

COFF文件的基本單元

2.

段的基本類(lèi)型

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

初始化段

未初始化段(1)

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

.text段——已初始化段;

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

2023/10/2221:15DSP原理及應(yīng)用21第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.1

COFF文件的基本單元

2.

段的基本類(lèi)型

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

未初始化段

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

.bss段——未初始化段;.usect段——未初始化段,由匯編命令建立的命名段(自定義段)。2023/10/2221:15DSP原理及應(yīng)用22第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.1

COFF文件的基本單元

3.

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

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

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

2023/10/2221:15DSP原理及應(yīng)用23第4章匯編語(yǔ)言程序開(kāi)發(fā)工具3.

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

目標(biāo)文件目標(biāo)存儲(chǔ)器.bss.data.textRAME2PROMROM2023/10/2221:15DSP原理及應(yīng)用24第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.2

匯編器對(duì)段的處理

匯編器對(duì)段的處理是通過(guò)段偽指令來(lái)區(qū)別各個(gè)段的,并將段名相同的語(yǔ)句匯編在一起。

匯編器有5條偽指令可識(shí)別匯編語(yǔ)言程序的各個(gè)部分:

.bss

.usect

.text

.data

.sect——定義未初始化段——定義未初始化段——定義已初始化段——定義已初始化段——定義已初始化段2023/10/2221:15DSP原理及應(yīng)用25第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.2

匯編器對(duì)段的處理

未初始化段就是在’C54x存儲(chǔ)器中保留空間,通常它們被定位在RAM區(qū)。在目標(biāo)文件中,這些段中沒(méi)有確切的內(nèi)容。

由這些段定義的空間僅作為臨時(shí)存儲(chǔ)空間,在程序運(yùn)行時(shí),可以利用這些存儲(chǔ)空間存放變量。

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

1.未初始化段

2023/10/2221:15DSP原理及應(yīng)用26第4章匯編語(yǔ)言程序開(kāi)發(fā)工具(1).bss偽指令1.未初始化段

用于在bss段中保留若干個(gè)空間。

格式:

.bss

符號(hào),字?jǐn)?shù)符號(hào)——對(duì)應(yīng)于保留的存儲(chǔ)空間第一個(gè)字的變量名稱(chēng)??梢宰屍渌我?,也可以用.global命令定義為全局符號(hào)。

字?jǐn)?shù)——表示在bss段或標(biāo)有名字的段中保留若干個(gè)存儲(chǔ)單元。

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

2023/10/2221:15DSP原理及應(yīng)用27第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.未初始化段

(2).usect偽指令

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

格式:符號(hào).usect

“段名”,字?jǐn)?shù)段名——程序員為未初始化的命名段定義的名字。

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

2023/10/2221:15DSP原理及應(yīng)用28第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.2

匯編器對(duì)段的處理

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

這些段中的內(nèi)容都在目標(biāo)文件中,當(dāng)加載程序時(shí)再放到’C54x的存儲(chǔ)器中。每個(gè)已初始化段都是可以重新定位的,并且可以引用其他段中所定義的符號(hào)。鏈接器在鏈接時(shí)會(huì)自動(dòng)地處理段間的相互引用。

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

已初始化段2023/10/2221:15DSP原理及應(yīng)用29第4章匯編語(yǔ)言程序開(kāi)發(fā)工具已初始化命令的句法:

2.

已初始化段

.text[段起點(diǎn)]

.data[段起點(diǎn)]

.sect

“段名”[,段起點(diǎn)]段起點(diǎn)——是任選項(xiàng)。若選用,它為段程序計(jì)數(shù)器SPC定義一個(gè)起始值。若默認(rèn),則SPC從0開(kāi)始。

2023/10/2221:15DSP原理及應(yīng)用30第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.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或.usect命令時(shí),并不結(jié)束當(dāng)前段的匯編,只是暫時(shí)從當(dāng)前段脫離出來(lái),并開(kāi)始對(duì)新的段進(jìn)行匯編。

.bss和.usect命令可以出現(xiàn)在一個(gè)已初始化段的任何位置,而不會(huì)對(duì)它的內(nèi)容發(fā)生影響。2023/10/2221:15DSP原理及應(yīng)用31第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.2

匯編器對(duì)段的處理

命名段由用戶(hù)指定,與默認(rèn)的.text,.data和.bss段的使用相同,但它們被分開(kāi)匯編。假如一部分可執(zhí)行代碼(例如初始化程序)不希望和.text段分配在一起,可將它們匯編進(jìn)一個(gè)命名段,這樣就可定位在與.text不同的地方。也可將初始化的數(shù)據(jù)匯編到與.data段不同的地方,或者將未初始化的變量保留在與.bss段不同的位置??捎?usect和.sect兩個(gè)偽指令產(chǎn)生命名段。3.

命名段(自定義段)2023/10/2221:15DSP原理及應(yīng)用32第4章匯編語(yǔ)言程序開(kāi)發(fā)工具

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

.sect偽指令產(chǎn)生類(lèi)似.text和.data的段,可以包含代碼或數(shù)據(jù)。.sect偽指令產(chǎn)生可重新定位地址的命名段。3.

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

符號(hào)

.usect

“段名”,字?jǐn)?shù)

.sect

“段名”

可以產(chǎn)生多達(dá)32767個(gè)不同的命名段。段名可長(zhǎng)達(dá)200個(gè)字符。

2023/10/2221:15DSP原理及應(yīng)用33第4章匯編語(yǔ)言程序開(kāi)發(fā)工具

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

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

若用已有的段名調(diào)用這些偽指令,則匯編器就將代碼或數(shù)據(jù)(或保留空間)匯編進(jìn)相應(yīng)名稱(chēng)的段中。不同的偽指令不能使用相同的名字。即不能用.usect創(chuàng)建了命名段,然后又用.sect創(chuàng)建一個(gè)相同名字的段。3.

命名段2023/10/2221:15DSP原理及應(yīng)用34第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.2

匯編器對(duì)段的處理

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

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

4.

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

子段名前為基段名,隨后為冒號(hào),最后為子段名。

2023/10/2221:15DSP原理及應(yīng)用35第4章匯編語(yǔ)言程序開(kāi)發(fā)工具對(duì)于子段,匯編器可以單獨(dú)為其分配存儲(chǔ)單元,或者在相同的基段名下與其他段組合在一起。

用.sect命令建立的段是已初始化的子段;用.usect命令建立的段是未初始化的子段。4.

子段

例如,若要在.text段內(nèi)建立一個(gè)稱(chēng)之為_(kāi)func的子段,其命令格式:

.sect

“.text:_func”

2023/10/2221:15DSP原理及應(yīng)用36第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.2

匯編器對(duì)段的處理

匯編器為每個(gè)段都安排了一個(gè)單獨(dú)的程序計(jì)數(shù)器稱(chēng)之為段程序計(jì)數(shù)器SPC。

SPC表示在程序代碼或數(shù)據(jù)段內(nèi)當(dāng)前的地址。開(kāi)始時(shí)匯編器將每個(gè)SPC置0。當(dāng)匯編器將程序代碼或數(shù)據(jù)加到段內(nèi)時(shí),增加相應(yīng)的SPC值。若再繼續(xù)對(duì)某個(gè)段匯編,則相應(yīng)的SPC就在先前的數(shù)值上繼續(xù)增加。

鏈接器在鏈接時(shí)要對(duì)每個(gè)段進(jìn)行重新定位。5.

段程序計(jì)數(shù)器SPC2023/10/2221:15DSP原理及應(yīng)用37第4章匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.3.1】段命令應(yīng)用舉例。

匯編語(yǔ)言源程序:

.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個(gè)單元

;0456h放入.data段

;初始化文本段

;1字指令

;2字指令

;2字指令共計(jì)5個(gè)字

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

;3組數(shù)據(jù)放入.data段2023/10/2221:15DSP原理及應(yīng)用38第4章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編語(yǔ)言源程序:var2.usect“newvars”,2inbuf.usect“newvars”,8

.text

mpy:LD0Ah,B

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

.word044h,088h

;建立newvars命名段,保留2個(gè)單元

;在newvars段保留8個(gè)單元

;初始化文本段

;1字指令

;2字指令

;2字指令共計(jì)5個(gè)字;建立vectors命名段

;2組數(shù)據(jù)放入vectors命名段2023/10/2221:15DSP原理及應(yīng)用39第4章匯編語(yǔ)言程序開(kāi)發(fā)工具經(jīng)匯編后,得列表文件(部分):2**********************************3

**匯編一個(gè)初始化表到.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.word0456h2023/10/2221:15DSP原理及應(yīng)用40第4章匯編語(yǔ)言程序開(kāi)發(fā)工具15**********************************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

**匯編另一個(gè)初始化表到.data段**

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

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

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

**為更多的變量定義另一個(gè)段**29**********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

2023/10/2221:15DSP原理及應(yīng)用41第4章匯編語(yǔ)言程序開(kāi)發(fā)工具32

****************************************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定義一個(gè)自定義段**41****************************************42

0000

.sect“vectors”

43

0000

0044

.word044h,088h

0001

0088

源程序的行號(hào)

段程序計(jì)數(shù)器目標(biāo)代碼匯編語(yǔ)言源程序2023/10/2221:15DSP原理及應(yīng)用42第4章匯編語(yǔ)言程序開(kāi)發(fā)工具

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

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

的程序代碼。

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

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

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

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

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

為變量保留8個(gè)存儲(chǔ)單元。

newvars段——用.usect命令建立的命名段,為變量保留10個(gè)存儲(chǔ)單元。

2023/10/2221:15DSP原理及應(yīng)用43第4章匯編語(yǔ)言程序開(kāi)發(fā)工具經(jīng)匯編后,得列表文件(部分):2*******************************3

**匯編一個(gè)初始化表到.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行號(hào)目標(biāo)代碼段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088

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

6

00446

00556

006610

.bss

沒(méi)有數(shù)據(jù)保留8個(gè)字14

04562023/10/2221:15DSP原理及應(yīng)用44第4章匯編語(yǔ)言程序開(kāi)發(fā)工具15********************************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

**匯編另一個(gè)初始化表到.data段**

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

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

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

**為更多的變量定義另一個(gè)段**29********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

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

10沒(méi)有數(shù)據(jù)保留8個(gè)字.bss沒(méi)有數(shù)據(jù)保留10個(gè)字.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個(gè)字310001inbuf.usect“newvars”,831

保留8個(gè)字2023/10/2221:15DSP原理及應(yīng)用45第4章匯編語(yǔ)言程序開(kāi)發(fā)工具32

*********************************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定義一個(gè)自定義段**41****************************************42

0000

.sect“vectors”

430000

0044

.word044h,088h0001

0088

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

10沒(méi)有數(shù)據(jù)保留8個(gè)字.bss3031沒(méi)有數(shù)據(jù)保留10個(gè)字newvars350005.text.text

360005110ampy:LD0Ah,B36

110a370006f166mloopMPY#0Ah,B37

f16837

000a380008f868BCmloop,BNOV38

f86838

0006420000.sect“vectors”vectors

4300000044.word044h,088h43

004443

00882023/10/2221:15DSP原理及應(yīng)用46第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.3

鏈接器對(duì)段的處理

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

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

②在程序裝入時(shí)對(duì)其重新定位,為各個(gè)輸出段選定存儲(chǔ)器地址。

2023/10/2221:15DSP原理及應(yīng)用47第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.3

鏈接器對(duì)段的處理

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

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

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

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

2023/10/2221:15DSP原理及應(yīng)用48第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.3

鏈接器對(duì)段的處理1.默認(rèn)的存儲(chǔ)器分配

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

每個(gè)目標(biāo)文件都有.text,.data、.bss段和命名段。若采用默認(rèn)鏈接,鏈接器將對(duì)多個(gè)目標(biāo)文件中的各個(gè)段進(jìn)行組合,形成各自的對(duì)應(yīng)段,并將各個(gè)段配置到所指定的存儲(chǔ)器中,形成可執(zhí)行的目標(biāo)模塊。在默認(rèn)的方式下,鏈接器將從存儲(chǔ)器的0080h開(kāi)始,對(duì)組合后的各段進(jìn)行存儲(chǔ)器配置。2023/10/2221:15DSP原理及應(yīng)用49第4章匯編語(yǔ)言程序開(kāi)發(fā)工具默認(rèn)的存儲(chǔ)器分配:

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

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

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

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

1.默認(rèn)的存儲(chǔ)器分配2023/10/2221:15DSP原理及應(yīng)用50第4章匯編語(yǔ)言程序開(kāi)發(fā)工具默認(rèn)的存儲(chǔ)器分配過(guò)程:File1.obj.text1.data1.bss1table_1(初始化的命名段)u_vars1(未初始化的命名段)File2.obj.text2.data2.bss2table_2(初始化的命名段)u_vars2(未初始化的命名段)FFT(初始化的命名段)程序存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器.text.text1.text2.data.data1.data2.bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT沒(méi)有使用沒(méi)有配置沒(méi)有配置沒(méi)有使用2023/10/2221:15DSP原理及應(yīng)用51第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.3

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

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

2023/10/2221:15DSP原理及應(yīng)用52第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.4

鏈接器對(duì)程序的重新定位1.

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

重新定位的方法:

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

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

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

2023/10/2221:15DSP原理及應(yīng)用53第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.

鏈接器重新定位匯編器在需要引用重新定位的符號(hào)處都留了一個(gè)重定位入口。鏈接器在對(duì)符號(hào)重新定位時(shí),利用這些入口修正對(duì)符號(hào)的引用值。

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

1

.refX2

.refZ30000.text40000F073

BY

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

00010006’50002F073

BZ

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

00030000!60004F020

LD#X,A

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

00050000!70006F7E0

Y:RESET

2023/10/2221:15DSP原理及應(yīng)用54第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.

鏈接器重新定位程序中有三個(gè)符號(hào):

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

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

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

.text段起始地址重新定位在7200hY的重新定位值為7204h。2023/10/2221:15DSP原理及應(yīng)用55第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.

鏈接器重新定位

鏈接器利用兩個(gè)重定位入口,對(duì)目標(biāo)文件中的兩次引用進(jìn)行修正:變成

f073

7204變成

f020

7100

f073

BY

0004’

f020

LD#X,A

0000!

2023/10/2221:15DSP原理及應(yīng)用56第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.4

鏈接器對(duì)程序的重新定位2.

運(yùn)行時(shí)間重新定位在實(shí)際運(yùn)行中,有時(shí)需要將代碼裝入存儲(chǔ)器的一個(gè)地方,而在另一個(gè)地方運(yùn)行。

如:一些關(guān)鍵的執(zhí)行代碼必須裝在系統(tǒng)的ROM中,但運(yùn)行時(shí)希望在較快的RAM中進(jìn)行。

利用SECTIONS偽指令選項(xiàng)可讓鏈接器對(duì)其定位2次,其方法:

①使用裝入關(guān)鍵字設(shè)置裝入地址;

②使用運(yùn)行關(guān)鍵字設(shè)置它的運(yùn)行地址。2023/10/2221:15DSP原理及應(yīng)用57第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.4

鏈接器對(duì)程序的重新定位2.

運(yùn)行時(shí)間重新定位裝入地址確定段的原始數(shù)據(jù)或代碼裝入的位置,而任何對(duì)段的使用(例如其中的標(biāo)號(hào)),則參考它的運(yùn)行地址。在應(yīng)用中必須將該段從裝入地址復(fù)制到運(yùn)行地址。

如果只為段提供了一次定位(裝入或運(yùn)行),則該段將只定位一次,并且裝入和運(yùn)行地址相同。如果提供了2個(gè)地址,則段將被自動(dòng)定位。

2023/10/2221:15DSP原理及應(yīng)用58第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.5

程序裝入

鏈接器產(chǎn)生可執(zhí)行的COFF目標(biāo)文件??蓤?zhí)行的目標(biāo)文件模塊與鏈接器輸入的目標(biāo)文件具有相同的COFF格式。為了運(yùn)行程序,在可執(zhí)行模塊中的數(shù)據(jù)必須傳輸或裝入目標(biāo)系統(tǒng)存儲(chǔ)器中。

可以采用以下方法裝入程序:

使用調(diào)試工具轉(zhuǎn)入程序

’C54x的調(diào)試工具包括軟件模擬器,XDS仿真器和集成系統(tǒng)CCS。它們都具有內(nèi)部的裝入器,調(diào)用裝入器的LOAD命令,裝入器將程序復(fù)制到目標(biāo)系統(tǒng)的存儲(chǔ)器中。

采用Hex轉(zhuǎn)換工具轉(zhuǎn)入程序可以使用轉(zhuǎn)換工具Hex500,將可執(zhí)行COFF目標(biāo)模塊轉(zhuǎn)換成幾種其他目標(biāo)格式文件,然后將轉(zhuǎn)換后的文件通過(guò)編程器將程序裝(燒)進(jìn)EPROM。

2023/10/2221:15DSP原理及應(yīng)用59第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.6

COFF文件中的符號(hào)

COFF文件中有一個(gè)符號(hào)表,主要用來(lái)存儲(chǔ)程序中有關(guān)符號(hào)的信息。鏈接器在執(zhí)行程序定位時(shí),要使用符號(hào)表提供的信息,而調(diào)試工具也要使用該表來(lái)提供符號(hào)調(diào)試。

1.

外部符號(hào)

是指在一個(gè)模塊中定義、而在另一個(gè)模塊中引用的符號(hào)。它可以用偽指令.def、.ref或.global來(lái)定義。

●.def在當(dāng)前模塊中定義,并可在別的模塊中使用的符號(hào);

●.ref在當(dāng)前模塊中使用,但在別的模塊中定義的符號(hào);

●.global可以是上面的任何一種情況。

2023/10/2221:15DSP原理及應(yīng)用60第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.

外部符號(hào)【例4.3.3】說(shuō)明代碼段中外部符號(hào)的定義。

x:ADD#56h,ABy.defx

.refy

;定義x

;引用y

;x在此模塊中定義,可為別

的模塊引用

;y在這里引用,它在別的模

塊中定義

2023/10/2221:15DSP原理及應(yīng)用61第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.6

COFF文件中的符號(hào)2.

符號(hào)表每當(dāng)遇到一個(gè)外部符號(hào),無(wú)論是定義的還是引用的,匯編器都將在符號(hào)表中產(chǎn)生一個(gè)條目。匯編器還產(chǎn)生一個(gè)指到每段的專(zhuān)門(mén)符號(hào),鏈接器使用這些符號(hào)將其他引用符號(hào)重新定位。

2023/10/2221:15DSP原理及應(yīng)用62第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.4源程序的匯編

匯編器的作用是將匯編語(yǔ)言源程序轉(zhuǎn)換成機(jī)器語(yǔ)言目標(biāo)文件。這些目標(biāo)文件都是公共目標(biāo)文件格式(COFF)。匯編語(yǔ)言源程序文件可以包含匯編命令、匯編語(yǔ)言指令和宏指令。匯編命令用來(lái)控制匯編的過(guò)程,包括列表格式、符號(hào)定義和將源代碼放入塊的方式等。2023/10/2221:15DSP原理及應(yīng)用63第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.4源程序的匯編

匯編器包括如下功能:

將匯編語(yǔ)言源程序匯編成一個(gè)可重新定位的目標(biāo)文件(.obj文件)。

根據(jù)需要,可以生成一個(gè)列表文件(.lst文件),并對(duì)該列表進(jìn)行控制。

將程序代碼分成若干個(gè)段,每個(gè)段的目標(biāo)代碼都有一個(gè)SPC(段程序計(jì)數(shù)器)管理。

2023/10/2221:15DSP原理及應(yīng)用64第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.4源程序的匯編

匯編器包括如下功能:

定義和引用全局符號(hào),如果需要可以在列表文件后面附加一張交叉引用表。

對(duì)條件程序塊進(jìn)行匯編。

支持宏功能,允許定義宏命令。

為每個(gè)目標(biāo)代碼塊設(shè)置一個(gè)程序計(jì)數(shù)器SPC。

2023/10/2221:15DSP原理及應(yīng)用65第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.4源程序的匯編

4.4.1

匯編程序的運(yùn)行

’C54x的匯編程序名為asm500.exe。要運(yùn)行匯編程序,可鍵入如下命令:asm500

[inputfile

[objectfile

[listingfile]]]

[-options]

Asm500

:運(yùn)行匯編程序asm

500.exe的命令。

inputfile

:匯編源文件名,默認(rèn)擴(kuò)展名為.asm。

objectfile

:匯編程序生成的’C54x目標(biāo)文件,擴(kuò)展名為.obj。

若不提供目標(biāo)文件名,則匯編程序就用輸入文件或目標(biāo)文件名。listingfile

:匯編器產(chǎn)生的列表文件名,默認(rèn)擴(kuò)展名為.lst。-options

:

匯編器的選項(xiàng),為匯編器的使用提供各種選擇。2023/10/2221:15DSP原理及應(yīng)用66第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.4.2

匯編時(shí)的列表文件

匯編器對(duì)源程序匯編時(shí),如果采用-l選項(xiàng),匯編后將生成一個(gè)列表文件。列表文件中包括源程序語(yǔ)句和目標(biāo)代碼。

每個(gè)列表文件的頂部有兩行匯編程序的標(biāo)題、一行空行以及頁(yè)號(hào)行。.title命令提供的文件名打印在頁(yè)號(hào)行左側(cè);頁(yè)號(hào)打印在此行的右側(cè)。

源文件的每一行都會(huì)在列表文件中生成一行。其內(nèi)容包括行號(hào)、段程序計(jì)數(shù)器SPC的數(shù)值、匯編后的目標(biāo)代碼,以及源程序語(yǔ)句。一條指令可以生成1或2個(gè)字的目標(biāo)代碼。匯編器為第2字單獨(dú)列一行,并列出了SPC的數(shù)值和目標(biāo)代碼。

2023/10/2221:15DSP原理及應(yīng)用67第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.5

鏈接器的使用鏈接器的主要任務(wù)是根據(jù)鏈接命令文件(.cmd),將一個(gè)或多個(gè)COFF目標(biāo)文件鏈接起來(lái),生成存儲(chǔ)器映像文件(.map)和可執(zhí)行的輸出文件(.out)。

在鏈接過(guò)程中,鏈接器將各個(gè)目標(biāo)文件合并,并完成以下工作:●

將各個(gè)段配置到目標(biāo)系統(tǒng)的存儲(chǔ)器。

對(duì)各個(gè)符號(hào)和段進(jìn)行重新定位,并給它們指定一個(gè)最終的地址。

解決輸入文件之間未定義的外部引用。2023/10/2221:15DSP原理及應(yīng)用68第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.5.1

鏈接器的運(yùn)行

1.

運(yùn)行鏈接程序

’C54x鏈接器的運(yùn)行命令:

lnk500

[-options]filename1…filenamen

lnk500:

運(yùn)行鏈接器命令。-options:

鏈接命令選項(xiàng)??梢猿霈F(xiàn)在命令行或鏈接命令文件的任何位置。filenames:

文件名??梢允悄繕?biāo)文件、鏈接命令文件或文件庫(kù)。所有文件擴(kuò)展名的默認(rèn)值為.obj。2023/10/2221:15DSP原理及應(yīng)用69第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.

運(yùn)行鏈接程序

’C54x鏈接器的運(yùn)行,有三種方法:

(1)鍵入命令:

lnk500

鏈接器會(huì)提示如下信息:

Commandfiles:Objectfiles[.obj]:

OutputFiles[a.out]:Options:(要求鍵入一個(gè)或多個(gè)命令文件)

(要求鍵入一個(gè)或多個(gè)需要鏈接的目標(biāo)文件)

(要求鍵入一個(gè)鏈接器所生成的輸出文件名)(要求附加一個(gè)鏈接選項(xiàng))2023/10/2221:15DSP原理及應(yīng)用70第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.

運(yùn)行鏈接程序

(2)

鍵入命令:

lnk500

file1.obj

file2.obj

-olink.out

在命令行中指定選項(xiàng)和文件名。

目標(biāo)文件:

file1.obj、file2.obj

命令選項(xiàng):

-o

輸出文件:

link.out

將兩個(gè)目標(biāo)文件進(jìn)行鏈接,生成一個(gè)可執(zhí)行的輸出文件link.out。2023/10/2221:15DSP原理及應(yīng)用71第4章匯編語(yǔ)言程序開(kāi)發(fā)工具1.

運(yùn)行鏈接程序

(3)

鍵入命令:

lnk500

linker.cmd

linker.cmd:鏈接命令文件。

在執(zhí)行上述命令之前,需將鏈接的目標(biāo)文件、鏈接命令選項(xiàng)以及存儲(chǔ)器配置要求等編寫(xiě)到鏈接命令文件linker.cmd中。

例如:希望完成第二種命令的鏈接,在鏈接命令文件中,應(yīng)包含如下內(nèi)容:

file1.objfile2.obj-olink.out

2023/10/2221:15DSP原理及應(yīng)用72第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.5.1

鏈接器的運(yùn)行

2.

鏈接命令選項(xiàng)在鏈接時(shí),連接器通過(guò)鏈接命令選項(xiàng)控制鏈接操作。

鏈接命令選項(xiàng)可以放在命令行或命令文件中,所有選項(xiàng)前面必須加一短劃線“-”。除-l和-i選項(xiàng)外,其他選項(xiàng)的先后順序并不重要。

選項(xiàng)之間可以用空格分開(kāi)。最常用選項(xiàng)為-m和-o,分別表示輸出的地址分配表映像文件名和輸出可執(zhí)行文件名。

2023/10/2221:15DSP原理及應(yīng)用73第4章匯編語(yǔ)言程序開(kāi)發(fā)工具2.

鏈接命令選項(xiàng)鏈接命令選項(xiàng)選項(xiàng)含義-a

生成一個(gè)絕對(duì)地址的、可執(zhí)行的輸出模塊。所建立的絕對(duì)地址輸出文件中不包含重新定位信息。如果既不用-a

選項(xiàng),也不用-r選項(xiàng),鏈接器就像規(guī)定-a選項(xiàng)那樣處理。

-ar

生成一個(gè)可重新定位、可執(zhí)行的目標(biāo)模塊。這里采用了-a和-r兩個(gè)選項(xiàng)(可以分開(kāi)寫(xiě)成-a-r,也可以連在一起寫(xiě)作-ar),與-a選項(xiàng)相比,-ar選項(xiàng)還在輸出文件中保留有重新定位信息。

-eglobal_symbol

定義一個(gè)全局符號(hào),這個(gè)符號(hào)所對(duì)應(yīng)的程序存儲(chǔ)器地址,就是使用開(kāi)發(fā)工具調(diào)試這個(gè)鏈接后的可執(zhí)行文件時(shí)程序開(kāi)始執(zhí)行時(shí)的地址(稱(chēng)為入口地址)。當(dāng)加載器將一個(gè)程序加載到目標(biāo)存儲(chǔ)器時(shí),程序計(jì)數(shù)器(PC)被初始化到入口地址,然后從這個(gè)地址開(kāi)始執(zhí)行程序。

2023/10/2221:15DSP原理及應(yīng)用74第4章匯編語(yǔ)言程序開(kāi)發(fā)工具2.

鏈接命令選項(xiàng)鏈接命令選項(xiàng)選項(xiàng)含義-ffill_vale

對(duì)輸出模塊各段之間的空單元設(shè)置一個(gè)16位數(shù)值(fill_value),如果不用-f選項(xiàng),則這些空單元都置0。

-idir

更改搜索文檔庫(kù)算法,先到dir(目錄)中搜索。此選項(xiàng)必須出現(xiàn)在-l選項(xiàng)之前。

-lfilename

命名一個(gè)文檔庫(kù)文件作為鏈接器的輸入文件;filename為文檔庫(kù)的某個(gè)文件名。此選項(xiàng)必須出現(xiàn)在-i選項(xiàng)之后。

-mfilename

生成一個(gè).map映像文件,filename是映像文件的文件名。.map文件中說(shuō)明存儲(chǔ)器配置、輸入、輸出段布局以及外部符號(hào)重定位之后的地址等。

-ofilename

對(duì)可執(zhí)行輸出模塊命名。如果默認(rèn),則此文件名為a.out。

-r

生成一個(gè)可重新定位的輸出模塊。當(dāng)利用-r選項(xiàng)且不用-a選項(xiàng)時(shí),鏈接器生成一個(gè)不可執(zhí)行的文件。

2023/10/2221:15DSP原理及應(yīng)用75第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.5.2

鏈接器命令文件的編寫(xiě)與使用鏈接命令文件用來(lái)為鏈接器提供鏈接信息,可將鏈接操作所需的信息放在一個(gè)文件中,這在多次使用同樣的鏈接信息時(shí),可以方便地調(diào)用。

在鏈接命令文件中,可使用MEMORY和SECTIONS偽指令,為實(shí)際應(yīng)用指定存儲(chǔ)器結(jié)構(gòu)和地址的映射。

MEMORY——用來(lái)指定目標(biāo)存儲(chǔ)器結(jié)構(gòu)。

SECTIONS——用來(lái)控制段的構(gòu)成與地址分配。

2023/10/2221:15DSP原理及應(yīng)用76第4章匯編語(yǔ)言程序開(kāi)發(fā)工具4.5.2

鏈接器命令文件的編寫(xiě)與使用鏈接命令文件為ASCⅡ文件,可包含以下內(nèi)容:

(1)

輸入文件名,用來(lái)指定目標(biāo)文件、存檔庫(kù)或其他命令文件。

(2)

鏈接器選項(xiàng),它們?cè)诿钗募械氖褂梅椒ㄅc在命令行中相同。

(3)

MEMORY和SECTIONS鏈接偽指令,用來(lái)指定目標(biāo)存儲(chǔ)器結(jié)構(gòu)和地址分配。

(4)

賦值說(shuō)明,用于給全局符號(hào)定義和賦值。2023/10/2221:15DSP原理及應(yīng)用77第4章匯編語(yǔ)言程序開(kāi)發(fā)工具例如:可根據(jù)給出鏈接命令,編寫(xiě)完成該命令操作的鏈接器命令文件link.cmd。

lnk500a.objb.obj-mprog.map-oprog.out該命令是將兩個(gè)目標(biāo)文件a.obj和b.obj進(jìn)行鏈接,生成一個(gè)映像文件prog.map和一個(gè)可執(zhí)行的輸出文件prog.out。鏈接命令文件的內(nèi)容如下:

a.obj/*第一個(gè)輸入文件名*/b.obj/*第二個(gè)輸入文件名*/-mprog.map/*指定map文件的選項(xiàng)*/-oprog.out/*指定輸出文件的選項(xiàng)*/2023/10/2221:15DSP原理及應(yīng)用78第4章匯編語(yǔ)言程序開(kāi)發(fā)工具

【例4.5.1】鏈接器命令文件舉例。

a.objb.obj/*輸入文件名*/

-oprog.out/*指定輸出文件的選項(xiàng)*/-mprog.map/*指定map文件的選項(xiàng)*/

MEMORY/*MEMORY偽指令*/

{PAGE0:ROM:origin=1000h,length=0100hPAGE1:RAM:origin=0100h,length=0100h

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論