版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023年2月6日DSP原理及應(yīng)用1內(nèi)容提要
可編程DSP芯片開(kāi)發(fā)需要一套完整的軟、硬件開(kāi)發(fā)工具。通??煞殖纱a生成工具和代碼調(diào)試工具兩大類(lèi)。
本章主要介紹代碼生成工具,包括:匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程,COFF段的一般概念,匯編器、鏈接器對(duì)段的處理方法,鏈接器對(duì)程序的重新定位、程序裝入等。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用25.1
匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程5.2COFF的一般概念第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)√2023年2月6日DSP原理及應(yīng)用3第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)5.1匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程
匯編語(yǔ)言源程序可以在任何一種文本編輯器中進(jìn)行。如:WORD、EDIT、TC等。
當(dāng)匯編語(yǔ)言源程序編寫(xiě)完成后,必須經(jīng)過(guò)匯編和鏈接后才能運(yùn)行。
2023年2月6日DSP原理及應(yīng)用4匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程示意圖匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件.cmd鏈接命令文件.lst列表文件.map存儲(chǔ)器映像文件十六進(jìn)制轉(zhuǎn)換程序HEX500-
o-
m-
l第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用55.1匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程1.
編輯
利用各種文本編輯器,如WORD、EDIT和TC等,可編寫(xiě)匯編語(yǔ)言源程序。
2.
匯編當(dāng)匯編語(yǔ)言源程序編寫(xiě)好以后,可利用’C54x的匯編器ASM500,對(duì)一個(gè)或多個(gè)源程序分別進(jìn)行匯編,并生成列表文件(.lst)和目標(biāo)文件(.obj)。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用65.1匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程2.
匯編常用的匯編命令:
asm500%1-s-1-x調(diào)用匯編器命令
源文件名
將程序所有定義的符號(hào)放在目標(biāo)文件的符號(hào)表中
生成一個(gè)列表文件.lst
生成一個(gè)交叉匯編表
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用75.1匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程3.
鏈接所謂鏈接,就是利用’C54x的鏈接器LNK500,根據(jù)鏈接器命令文件(.cmd)對(duì)已匯編過(guò)的一個(gè)或多個(gè)目標(biāo)文件(.obj)進(jìn)行鏈接,生成輸出文件(.out)和存儲(chǔ)器映像文件(.map)。
常用的匯編器命令:
lnk500%1.cmdlnk500:
調(diào)用鏈接器命令
%1.cmd:
鏈接命令文件名,該文件須指明目標(biāo)文件、輸入文件、輸出文件、鏈接選項(xiàng)和存儲(chǔ)器配置要求等。第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用85.1匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程4.
調(diào)試對(duì)輸出文件(.out)
調(diào)試主要采用以下手段:(1)利用軟件仿真器進(jìn)行調(diào)試
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)(2)利用硬件仿真器進(jìn)行調(diào)試
(3)利用評(píng)價(jià)模塊進(jìn)行調(diào)試
2023年2月6日DSP原理及應(yīng)用95.1匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程4.
調(diào)試
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用105.1匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程5.
固化用戶(hù)程序第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用115.1
匯編語(yǔ)言程序的編輯、匯編、鏈接過(guò)程5.2COFF的一般概念第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)√2023年2月6日DSP原理及應(yīng)用125.2
COFF的一般概念
匯編器和鏈接器生成的目標(biāo)文件,是一個(gè)可以由’C54x器件執(zhí)行的文件。這些目標(biāo)文件的格式稱(chēng)之為公共目標(biāo)文件格式(CommonObjectFileFormat,COFF)。
在編寫(xiě)匯編語(yǔ)言程序時(shí),COFF采用代碼段和數(shù)據(jù)段的形式,以便于模塊化的編程,使編程和管理變得更加方便。
這些代碼段和數(shù)據(jù)段簡(jiǎn)稱(chēng)為段。匯編器和鏈接器提供一些偽指令來(lái)建立和管理各種各樣的段。
了解COFF段的一般概念,有助于理解匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用135.2
COFF的一般概念5.2.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文件。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用145.2.1
COFF文件的基本單元
1.
段(sections)
“段”是COFF文件中最重要的概念。每個(gè)目標(biāo)文件都分成若干段,每個(gè)段都是分開(kāi)且各不相同的。
段——存儲(chǔ)器圖中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。所有的COFF目標(biāo)文件都包含以下3種形式的段:
.text
段(文本段),通常包含可執(zhí)行代碼;.data
段(數(shù)據(jù)段),通常包含初始化數(shù)據(jù);.bss
段(保留空間段),通常為未初始化變量保留存儲(chǔ)空間。第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用155.2.1
COFF文件的基本單元
1.
段(sections)
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用165.2.1
COFF文件的基本單元
2.
段的基本類(lèi)型
COFF目標(biāo)文件中的段有兩種基本類(lèi)型:
初始化段(Initializedsections)
未初始化段(Uninitializedsections)(1)
初始化段初始化段中包含有數(shù)據(jù)或程序代碼。主要包括:
.text段——已初始化段;
.data段——已初始化段;.sect段——已初始化段,由匯編器偽指令建立的自定義段。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用175.2.1
COFF文件的基本單元
2.
段的基本類(lèi)型
COFF目標(biāo)文件中的段有兩種基本類(lèi)型。(2)
未初始化段
在存儲(chǔ)空間中,為未初始化數(shù)據(jù)保留存儲(chǔ)空間。主要包括:
.bss段——未初始化段;.usect段——未初始化段,由匯編命令建立的命名段(自定義段)。第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用185.2.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)為定位或分配。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用193.
段與目標(biāo)存儲(chǔ)器的對(duì)應(yīng)關(guān)系目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器之間的關(guān)系
目標(biāo)文件目標(biāo)存儲(chǔ)器.bss.data.textRAME2PROMROM第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用205.2.2
匯編器對(duì)段的處理
匯編器對(duì)段的處理是通過(guò)段偽指令來(lái)區(qū)別各個(gè)段的,并將段名相同的語(yǔ)句匯編在一起。
匯編器有5條偽指令可識(shí)別匯編語(yǔ)言程序的各個(gè)部分:
●
.bss
●
.usect
●
.text
●
.data
●
.sect——定義未初始化段——定義未初始化段——定義已初始化段——定義已初始化段——定義已初始化段第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用215.2.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.未初始化段
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用22(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)的段保留更多的空間。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用231.未初始化段
(2).usect偽指令
用于為指定的命名段保留若干個(gè)空間。
格式:符號(hào).usect
“段名”,字?jǐn)?shù)段名——程序員為未初始化的命名段定義的名字。
每調(diào)用一次.usect偽指令,匯編器在指定的命名段保留更多的空間。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用245.2.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.
已初始化段第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用25已初始化命令的句法:
2.
已初始化段
.text[段起點(diǎn)]
.data[段起點(diǎn)]
.sect
“段名”[,段起點(diǎn)]段起點(diǎn)——任選項(xiàng);若選用,它為段程序計(jì)數(shù)器SPC定義一個(gè)起始值;若默認(rèn),則SPC從0開(kāi)始。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用26
當(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ā)生影響。第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2.
已初始化段2023年2月6日DSP原理及應(yīng)用27第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2.
已初始化段2023年2月6日DSP原理及應(yīng)用285.2.2
匯編器對(duì)段的處理
命名段由用戶(hù)指定,與默認(rèn)的.text,.data和.bss段的使用相同,但它們被分開(kāi)匯編。例如,重復(fù)使用.text段建成單個(gè).text段,在鏈接時(shí),這個(gè).text段被作為單個(gè)單元定位。3.
命名段(自定義段)第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用29
假如不希望一部分可執(zhí)行代碼(例如初始化程序)和.text段分配在一起,可將它們匯編進(jìn)一個(gè)命名段,這樣就可定位在與.text不同的地方;也可將初始化的數(shù)據(jù)匯編到與.data段不同的地方;或者將未初始化的變量保留在與.bss段不同的位置。3.
命名段(自定義段)第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用30可用.usect和.sect兩個(gè)偽指令產(chǎn)生命名段。
.usect偽指令產(chǎn)生類(lèi)似.bss的段,為變量在RAM中保留存儲(chǔ)空間。
.sect偽指令產(chǎn)生類(lèi)似.text和.data的段,可以包含代碼或數(shù)據(jù)。
.sect偽指令產(chǎn)生可重新定位地址的命名段。3.
命名段第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用313.
命名段
產(chǎn)生命名段偽指令格式:
符號(hào)
.usect
“段名”,字?jǐn)?shù)
.sect
“段名”可以產(chǎn)生多達(dá)32767個(gè)不同的命名段。段名可長(zhǎng)達(dá)200個(gè)字符。第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用32
對(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.
命名段第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用335.2.2
匯編器對(duì)段的處理
子段是較大段中的小段。鏈接器可以像處理其他段一樣處理子段。
子段結(jié)構(gòu)可用來(lái)對(duì)存儲(chǔ)器空間進(jìn)行更緊湊的控制,可以使存儲(chǔ)器空間分配更加緊密。
4.
子段子段命名格式:基段名:子段名
子段名前為基段名,隨后為冒號(hào),最后為子段名。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用34對(duì)于子段,匯編器可以單獨(dú)為其分配存儲(chǔ)單元,或者在相同的基段名下與其他段組合在一起。子段有兩種類(lèi)型:(1)用.sect命令建立的段是已初始化的子段;(2)用.usect命令建立的段是未初始化的子段。
4.
子段
例如,若要在.text段內(nèi)建立一個(gè)稱(chēng)之為_(kāi)func的子段,其命令格式:
.sect
“.text:_func”
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用355.2.2
匯編器對(duì)段的處理
匯編器為每個(gè)段都安排了一個(gè)單獨(dú)的程序計(jì)數(shù)器稱(chēng)之為段程序計(jì)數(shù)器(SectionProgramCounters,SPC)。
SPC表示在程序代碼或數(shù)據(jù)段內(nèi)當(dāng)前的地址。開(kāi)始時(shí)匯編器將每個(gè)SPC置0。5.
段程序計(jì)數(shù)器SPC第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用36
當(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ù)器SPC第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用37【例5.2.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段第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用38匯編語(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命名段第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用39經(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.word0456h第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(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
**匯編另一個(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
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(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定義一個(gè)自定義段**41****************************************42
0000
.sect“vectors”
43
0000
0044
.word044h,088h
0001
0088
源程序的行號(hào)
段程序計(jì)數(shù)器目標(biāo)代碼匯編語(yǔ)言源程序第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用42
匯編語(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ǔ)單元。第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(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
**匯編另一個(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è)字第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用44經(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
0456第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(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定義一個(gè)自定義段**41****************************************42
0000
.sect“vectors”
430000
0044
.word044h,088h
0001
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
0088第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用465.2.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ǔ)器地址。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用475.2.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ǔ)空間。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用485.2.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ǔ)器配置。第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用49默認(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ǔ)器分配第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用50默認(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)有使用第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用515.2.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è)鏈接命令文件.cmd,在鏈接命令文件中用MEMORY和SECTIONS偽指令定義存儲(chǔ)器和配置段地址。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用525.2.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)值。
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用531.
鏈接器重新定位匯編器在需要引用重新定位的符號(hào)處都留了一個(gè)重定位入口。鏈接器在對(duì)符號(hào)重新定位時(shí),利用這些入口修正對(duì)符號(hào)的引用值。
【例5.2.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
第5章TMS320C54x的匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)2023年2月6日DSP原理及應(yīng)用541.
鏈接器重新定位程序中有三個(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段起始地址重新定
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寫(xiě)字樓租賃延期合同
- 院感檢查匯報(bào)與工作總結(jié)
- 路燈的購(gòu)銷(xiāo)合同書(shū)
- 防盜門(mén)木門(mén)銷(xiāo)售安裝合同書(shū)范本
- 服務(wù)合同模板
- 全面注冊(cè)制與北交所上市合規(guī)之路
- 政府采購(gòu)環(huán)境評(píng)估服務(wù)合同
- 產(chǎn)品質(zhì)量保險(xiǎn)合作合同
- 萬(wàn)科房地產(chǎn)精裝修監(jiān)理方案
- 院感-產(chǎn)房醫(yī)院感染管理制度
- 托卡馬克裝置原理2[1]
- “模擬法庭”在高中法律教學(xué)中的應(yīng)用與探究
- 江蘇自考數(shù)學(xué)教育學(xué)知識(shí)點(diǎn)
- [二手房買(mǎi)賣(mài)合同正式版] 二手房買(mǎi)賣(mài)合同最新版
- 部編版五年級(jí)語(yǔ)文上冊(cè)第四單元集體備課教學(xué)計(jì)劃和全部教案
- 五年級(jí)語(yǔ)文上冊(cè) 第六單元 22《蟬》課后練習(xí) 北京版-北京版小學(xué)五年級(jí)上冊(cè)語(yǔ)文試題
- 最新部編版五年級(jí)道德與法治上冊(cè)第四單元教材分析
- 課程設(shè)計(jì) 基于電阻應(yīng)變片的S型稱(chēng)重傳感器設(shè)計(jì)
- 中國(guó)血液透析用血管通路專(zhuān)家共識(shí)
- cosplay評(píng)分標(biāo)準(zhǔn)
- 中醫(yī)真實(shí)世界臨床研究技術(shù)規(guī)范(草案)
評(píng)論
0/150
提交評(píng)論