




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
DSP原理與應(yīng)用匯編語(yǔ)言程序開(kāi)發(fā)工具DSP原理與應(yīng)用匯編語(yǔ)言程序開(kāi)發(fā)工具DSP原理與應(yīng)用匯編語(yǔ)言程序開(kāi)發(fā)工具DSP原理及應(yīng)用2第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.1TMS320C54x軟件開(kāi)發(fā)過(guò)程’C54x的應(yīng)用軟件開(kāi)發(fā)主要完成以下工作:(1)選擇編程語(yǔ)言編寫(xiě)源程序’C54x提供2種編程語(yǔ)言,即匯編語(yǔ)言和C/C++語(yǔ)言。
(2)選擇開(kāi)發(fā)工具和環(huán)境’C54x提供了兩種開(kāi)發(fā)環(huán)境。即非集成開(kāi)發(fā)環(huán)境和集成開(kāi)發(fā)環(huán)境CCS。DSP原理與應(yīng)用匯編語(yǔ)言程序開(kāi)發(fā)工具DSP原理與應(yīng)用匯編語(yǔ)言1第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.1TMS320C54x軟件開(kāi)發(fā)過(guò)程
’C54x的應(yīng)用軟件開(kāi)發(fā)主要完成以下工作:(1)
選擇編程語(yǔ)言編寫(xiě)源程序
’C54x提供2種編程語(yǔ)言,即匯編語(yǔ)言和C/C++語(yǔ)言。
(2)
選擇開(kāi)發(fā)工具和環(huán)境
’C54x提供了兩種開(kāi)發(fā)環(huán)境。即非集成開(kāi)發(fā)環(huán)境和集成開(kāi)發(fā)環(huán)境CCS。
2DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.1TMS320C54x軟件第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.1TMS320C54x軟件開(kāi)發(fā)過(guò)程
1.
’C54x應(yīng)用軟件開(kāi)發(fā)流程C源文件C編譯器匯編源文件匯編器匯編源文件COFF目標(biāo)文件鏈接器可執(zhí)行的COFF文件宏源文件存檔器宏庫(kù)存檔器目標(biāo)文件庫(kù)建庫(kù)工具運(yùn)行時(shí)支持庫(kù)EPROM編程器交叉引用列表器調(diào)試工具TMS320C54x絕對(duì)地址列表器HEX代碼轉(zhuǎn)換工具3DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.1TMS320C54x軟件第6章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具
TI公司提供的DSP開(kāi)發(fā)環(huán)境和工具主要包括以下三個(gè)部分:
代碼生成工具代碼調(diào)試工具
實(shí)時(shí)操作系統(tǒng)4DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具2.’C54x的開(kāi)發(fā)工具第6章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具(1)代碼生成工具:C編譯器
匯編器鏈接器文檔管理器建庫(kù)實(shí)用程序十六進(jìn)制轉(zhuǎn)換程序5DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具2.’C54x的開(kāi)發(fā)工具(1)第6章匯編語(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)試工具。
6DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具2.’C54x的開(kāi)發(fā)工具(2)第6章匯編語(yǔ)言程序開(kāi)發(fā)工具DSK(DSPStarterKitm)7DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具DSK(DSPStarter第6章匯編語(yǔ)言程序開(kāi)發(fā)工具C5402DSK實(shí)物圖8DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具C5402DSK實(shí)物圖8DS第6章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具(2)代碼調(diào)試工具:
可擴(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)試。
9DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具2.’C54x的開(kāi)發(fā)工具(2)第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程示意圖匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件.cmd鏈接命令文件.lst列表文件.map存儲(chǔ)器映像文件十六進(jìn)制轉(zhuǎn)換程序HEX500-
o-
m-
l10DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.2匯編語(yǔ)言程序的編輯、匯編第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程匯編語(yǔ)言源程序以.asm為其擴(kuò)展名匯編語(yǔ)言源程序的每一行都可以由四個(gè)部分組成,語(yǔ)法如下:[標(biāo)號(hào)][:] 助記符 [操作數(shù)] [;注釋]1.
編輯
11DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.2匯編語(yǔ)言程序的編輯、匯編第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程2.
匯編常用的匯編命令:
asm500%1-s-1-x調(diào)用匯編器命令
源文件名
將程序所有定義的符號(hào)放在目標(biāo)文件的符號(hào)表中
生成一個(gè)列表文件.lst
生成一個(gè)交叉匯編表12DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.2匯編語(yǔ)言程序的編輯、匯編第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.2匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程3.
鏈接常用的匯編器命令:
lnk500%1.cmd
lnk500:
調(diào)用鏈接器命令
%1.cmd:
鏈接命令文件名,該文件須指明目標(biāo)文件、輸入文件、輸出文件、鏈接選項(xiàng)和存儲(chǔ)器配置要求等。13DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.2匯編語(yǔ)言程序的編輯、匯編第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3
COFF的一般概念
匯編器和鏈接器生成的目標(biāo)文件,是一個(gè)可以由’C54x器件執(zhí)行的文件。這些目標(biāo)文件的格式稱(chēng)之為公共目標(biāo)文件格式(COFF)。
FileHeaderOptionalHeaderSectionHeader1
SectionHeadernSectionDataRelocationDirectivesLineNumbersSymbolTableStringTable14DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3COFF的一般概念第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3
COFF的一般概念
6.3.1
COFF文件的基本單元
COFF文件有3種類(lèi)型:COFF0、COFF1、COFF2。
鏈接器能夠讀/寫(xiě)所有類(lèi)型的COFF文件,默認(rèn)時(shí)鏈接器生成的是COFF2文件,采用-vn鏈接選項(xiàng)可以選擇不同類(lèi)型的COFF文件。
’C54x匯編器和C編譯器產(chǎn)生的是COFF2文件。
15DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3COFF的一般概念6.第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.1
COFF文件的基本單元
1.
段(sections)
段——是存儲(chǔ)器中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。一個(gè)目標(biāo)文件中的每個(gè)段都是分開(kāi)的和各不相同的。
COFF目標(biāo)文件都包含以下3種形式的段:
.text
段(文本段).data
段(數(shù)據(jù)段).bss
段(保留空間段)16DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.1COFF文件的基本單第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.1
COFF文件的基本單元
2.
段的基本類(lèi)型
COFF目標(biāo)文件中的段有兩種基本類(lèi)型。
初始化段
未初始化段(1)
初始化段
初始化段中包含有數(shù)據(jù)或程序代碼。主要有:
.text段——已初始化段;
.data段——已初始化段;.sect段——已初始化段,由匯編器偽指令建立的自定義段。
17DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.1COFF文件的基本單第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.1
COFF文件的基本單元
2.
段的基本類(lèi)型
COFF目標(biāo)文件中的段有兩種基本類(lèi)型。(2)
未初始化段
在存儲(chǔ)空間中,為未初始化數(shù)據(jù)保留存儲(chǔ)空間。它包括:
.bss段——未初始化段;.usect段——未初始化段,由匯編命令建立的命名段(自定義段)。18DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.1COFF文件的基本單第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.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)為定位或分配。
19DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.1COFF文件的基本單第6章匯編語(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.textRAME2PROMROM20DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具3.段與目標(biāo)存儲(chǔ)器的對(duì)應(yīng)關(guān)系目第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2
匯編器對(duì)段的處理
匯編器有5條偽指令可識(shí)別匯編語(yǔ)言程序的各個(gè)部分:
●.bss
●.usect
●.text
●.data
●.sect——定義未初始化段——定義未初始化段——定義已初始化段——定義已初始化段——定義已初始化段21DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2匯編器對(duì)段的處理第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.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.未初始化段
22DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2匯編器對(duì)段的處理第6章匯編語(yǔ)言程序開(kāi)發(fā)工具(1).bss偽指令1.未初始化段
用于在bss段中保留若干個(gè)空間。
格式:
.bss
符號(hào),字?jǐn)?shù).bssx,1.bssbuffer,1023DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具(1).bss偽指令1.未初第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.未初始化段
(2).usect偽指令
用于為指定的命名段保留若干個(gè)空間。
格式:符號(hào).usect
“段名”,字?jǐn)?shù)24DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.未初始化段(2).第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2
匯編器對(duì)段的處理
已初始化段中包含有可執(zhí)行代碼或初始化數(shù)據(jù)。
已初始化段由.text、.data和.sect三個(gè)偽指令建立。2.
已初始化段25DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2匯編器對(duì)段的處理第6章匯編語(yǔ)言程序開(kāi)發(fā)工具
已初始化命令的句法:
2.
已初始化段
.text[段起點(diǎn)]
.data[段起點(diǎn)]
.sect
“段名”[,段起點(diǎn)]26DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具已初始化命令的句法:第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2
匯編器對(duì)段的處理
命名段由用戶(hù)指定,與默認(rèn)的.text,.data和.bss段的使用相同,但它們被分開(kāi)匯編。
可用.usect和.sect兩個(gè)偽指令產(chǎn)生命名段。3.
命名段(自定義段)27DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2匯編器對(duì)段的處理第6章匯編語(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
“段名”28DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具.usect偽指令產(chǎn)生類(lèi)第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2
匯編器對(duì)段的處理
匯編器為每個(gè)段都安排了一個(gè)單獨(dú)的程序計(jì)數(shù)器稱(chēng)之為段程序計(jì)數(shù)器SPC。鏈接器在鏈接時(shí)要對(duì)每個(gè)段進(jìn)行重新定位。4.
段程序計(jì)數(shù)器SPC29DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.2匯編器對(duì)段的處理第6章匯編語(yǔ)言程序開(kāi)發(fā)工具【例6.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段30DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具【例6.3.1】段命令應(yīng)用舉例。第6章匯編語(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命名段31DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編語(yǔ)言源程序:var2第6章匯編語(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.word0456h32DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具經(jīng)匯編后,得列表文件(部分):第6章匯編語(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
33DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具15第6章匯編語(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
34DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具32第6章匯編語(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ǔ)單元。
35DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編語(yǔ)言源程序經(jīng)過(guò)匯編后第6章匯編語(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è)字5
0000.data600000044coeff.word044h,055h,066h100000.bssbuffer,81400030456prt.word0456h.data
6
00446
00556
006610
.bss
沒(méi)有數(shù)據(jù)保留8個(gè)字14
045636DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具經(jīng)匯編后,得列表文件(部分):第6章匯編語(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”,230
保留2個(gè)字310001inbuf.usect“newvars”,831
保留8個(gè)字newvars
37DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具15*第6章匯編語(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
008838DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具32*第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.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ǔ)器地址。39DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.3鏈接器對(duì)段的處理第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.3
鏈接器對(duì)段的處理
鏈接器有2條偽指令支持上述任務(wù):
●
MEMORY偽指令
●
SECTIONS偽指令40DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.3鏈接器對(duì)段的處理第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.3
鏈接器對(duì)段的處理默認(rèn)的存儲(chǔ)器分配
①將所有.text段組合在一起,形成一個(gè).text段,并分配到程序存儲(chǔ)器中;②將多個(gè)目標(biāo)文件中的.data段組合在一起,分配到緊接著.text段的程序存儲(chǔ)空間中;
③將.bss段組合,配置到數(shù)據(jù)存儲(chǔ)器中;
④組合命名段。初始化的命名段按順序分配到緊隨.data段的程序存儲(chǔ)器,而未初始化命名段將被配置到緊隨.bss段的數(shù)據(jù)存儲(chǔ)器中。
41DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.3鏈接器對(duì)段的處理默第6章匯編語(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)有使用42DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具默認(rèn)的存儲(chǔ)器分配過(guò)程:F第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.4
鏈接器對(duì)程序的重新定位1.
鏈接器重新定位
重新定位的方法:
將各個(gè)段配置到存儲(chǔ)器中,使每個(gè)段都有一個(gè)合適的起始地址;
將符號(hào)變量調(diào)整到相對(duì)于新的段地址的位置;
將引用調(diào)整到重新定位后的符號(hào),這些符號(hào)反映了調(diào)整后的新符號(hào)值。
43DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.4鏈接器對(duì)程序的重新定第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.4
鏈接器對(duì)程序的重新定位2.
運(yùn)行時(shí)間重新定位
利用SECTIONS偽指令選項(xiàng)可讓鏈接器對(duì)其定位2次,其方法:
①使用運(yùn)行關(guān)鍵字設(shè)置它的運(yùn)行地址;
②使用裝入關(guān)鍵字設(shè)置裝入地址。44DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.4鏈接器對(duì)程序的重新定第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.5
程序裝入
可以采用以下方法裝入程序:
使用調(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。
45DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.5程序裝入可第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.6
COFF文件中的符號(hào)1.
外部符號(hào)
是指在一個(gè)模塊中定義、而在另一個(gè)模塊中引用的符號(hào)。它可以用偽指令.def、.ref或.global來(lái)定義。
●.def在當(dāng)前模塊中定義,并可在別的模塊中使用的符號(hào);
●.ref在當(dāng)前模塊中使用,但在別的模塊中定義的符號(hào);
●.global可以是上面的任何一種情況。
46DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.6COFF文件中的符號(hào)第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
外部符號(hào)【例6.3.2】說(shuō)明代碼段中外部符號(hào)的定義。
x:ADD#56h,ABy.defx
.refy
;定義x
;引用y
;x在此模塊中定義,可為別
的模塊引用
;y在這里引用,它在別的模
塊中定義
47DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.外部符號(hào)【例6.3.2】說(shuō)第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.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)重新定位。
48DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.3.6COFF文件中的符號(hào)第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4源程序的匯編
匯編器包括如下功能:
①
將匯編語(yǔ)言源程序匯編成一個(gè)可重新定位的目標(biāo)文件(.obj文件)。
②
根據(jù)需要,可以生成一個(gè)列表文件(.lst文件),并對(duì)該列表進(jìn)行控制。
③
將程序代碼分成若干個(gè)段,每個(gè)段的目標(biāo)代碼都有一個(gè)SPC(段程序計(jì)數(shù)器)管理。
49DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4源程序的匯編匯編器包括第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4源程序的匯編
匯編器包括如下功能:
④
定義和引用全局符號(hào),如果需要可以在列表文件后面附加一張交叉引用表。
⑤
對(duì)條件程序塊進(jìn)行匯編。
⑥
支持宏功能,允許定義宏命令。
⑦
為每個(gè)目標(biāo)代碼塊設(shè)置一個(gè)程序計(jì)數(shù)器SPC。
50DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4源程序的匯編匯編器包括第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4源程序的匯編
6.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。listingfile
:匯編器產(chǎn)生的列表文件名,默認(rèn)擴(kuò)展名為.lst。-options
:
匯編器的選項(xiàng),為匯編器的使用提供各種選擇。51DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4源程序的匯編6.4.1第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編器asm500的選項(xiàng)及其功能
選項(xiàng)功能-@
-@filemane(文件名)可以將文件名的內(nèi)容附加到命令行上。使用該選項(xiàng)可以避免命令行長(zhǎng)度的限制。如果在一個(gè)命令文件、文件名或選項(xiàng)參數(shù)中包含了嵌入的空格或連字號(hào),則必須使用引號(hào)括起來(lái),例如:“this-file.asm”。
-a建立一個(gè)絕對(duì)列表文件。當(dāng)選用-a時(shí),匯編器不產(chǎn)生目標(biāo)文件。-c
使匯編語(yǔ)言文件中大小寫(xiě)沒(méi)有區(qū)別。-d為名字符號(hào)設(shè)置初值。格式為-dname[=value]時(shí),與匯編文件被插入name.set[=value]是等效的。如果value被省略,則此名字符號(hào)被置為1。
-f
抑制匯編器給沒(méi)有.asm擴(kuò)展名的文件添加擴(kuò)展名的默認(rèn)行為。
52DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編器asm500的選項(xiàng)及其功能第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編器asm500的選項(xiàng)及其功能
選項(xiàng)功能-g
允許匯編器在源代碼中進(jìn)行代碼調(diào)試。匯編語(yǔ)言源文件中每行的信息輸出到COFF文件中。注意:用戶(hù)不能對(duì)已經(jīng)包含.line偽指令的匯編代碼使用-g
選項(xiàng)。例如由C/C++編譯器運(yùn)行-g選項(xiàng)產(chǎn)生的代碼。
-h,-help,-?
這些選項(xiàng)的任一個(gè)將顯示可供使用的匯編器選項(xiàng)的清單。
-hc
將選定的文件復(fù)制到匯編模塊。格式為-hcfilename
所選定的文件包含到源文件語(yǔ)句的前面,復(fù)制的文件將出現(xiàn)在匯編列表文件中。
-hi
將選定的文件包含到匯編模塊。格式為-hifilename
所選定的文件包含到源文件語(yǔ)句的前面,所包含的文件不出現(xiàn)在匯編列表文件中。
53DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編器asm500的選項(xiàng)及其功能第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編器asm500的選項(xiàng)及其功能
選項(xiàng)功能-i
規(guī)定一個(gè)目錄。匯編器可以在這個(gè)目錄下找到.copy、
.include或.mlib命令所命名的文件。格式為-ipathname,最多可規(guī)定10個(gè)目錄,每一條路徑名的前面都必須加上-i選項(xiàng)。
-l
(小寫(xiě)L)生成一個(gè)列表文件。
-mf
指定匯編調(diào)用擴(kuò)展尋址方式
-mg
源文件是代數(shù)式指令。
-q
抑制匯編的標(biāo)題以及所有的進(jìn)展信息。
-r,-r[num]
壓縮匯編器由num標(biāo)識(shí)的標(biāo)志。該標(biāo)志是報(bào)告給匯編器的消息,這種消息不如警告嚴(yán)重。若不對(duì)num指定值,則所有標(biāo)志都將被壓縮。54DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編器asm500的選項(xiàng)及其功能第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編器asm500的選項(xiàng)及其功能
選項(xiàng)功能-pw對(duì)某些匯編代碼的流水線沖突發(fā)出警告。
-u
-uname取消預(yù)先定義的常數(shù)名,從而不考慮由任何-d
選項(xiàng)所指定的常數(shù)。
-v-vvalue確定使用的處理器,可用541,542,543,545,5451p,5461p,548,549值中的一個(gè)。
-s
把所有定義的符號(hào)放進(jìn)目標(biāo)文件的符號(hào)表中。匯編程序通常只將全局符號(hào)放進(jìn)符號(hào)表。當(dāng)利用-s選項(xiàng)時(shí),所定義的標(biāo)號(hào)以及匯編時(shí)定義的常數(shù)也都放進(jìn)符號(hào)表內(nèi)。-x產(chǎn)生一個(gè)交叉引用表,并將它附加到列表文件的最后,還在目標(biāo)文件上加上交叉引用信息。即使沒(méi)有要求生成列表文件,匯編程序總還是要建立列表文件的。
55DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具匯編器asm500的選項(xiàng)及其功能第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.2
匯編時(shí)的列表文件列表文件包括4個(gè)部分:
源程序語(yǔ)句編號(hào)段程序計(jì)數(shù)器目標(biāo)代碼源程序語(yǔ)句56DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.2匯編時(shí)的列表文件列第6章匯編語(yǔ)言程序開(kāi)發(fā)工具目標(biāo)代碼后記符含義
!
未定義的外部引用;
,
可重新定位的文本段;
”
可重新定位的數(shù)據(jù)段;
+
可重新定位的初始化命名段;
-
可重新定位的未初始化段;
%
復(fù)雜的重新定位的表達(dá)式。57DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具目標(biāo)代碼后記符含義第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.3
匯編偽指令
●
將代碼和數(shù)據(jù)匯編進(jìn)指定的段●
為未初始化的變量在存儲(chǔ)器中保留空間●
控制清單文件是否產(chǎn)生
●
初始化存儲(chǔ)器●
匯編條件代碼塊
●
定義全局變量●
為匯編器指定從中可以獲得宏的庫(kù)●
考察符號(hào)調(diào)試信息
匯編器偽指令可完成以下工作:
58DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.3匯編偽指令第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.3
匯編偽指令⑴
對(duì)各種段進(jìn)行定義的命令
如.bss、.data、.sect、.text、.usect等。
⑵
對(duì)常數(shù)(數(shù)據(jù)和存儲(chǔ)器)進(jìn)行初始化的命令如.bes、.byte、.field、.float、.int、.log、.space、.string、.pstring、.xfloat、.xlong、.word等。
59DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.3匯編偽指令⑴對(duì)各第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.3
匯編偽指令⑶
調(diào)整SPC的指令
如.align等。
⑷
對(duì)輸出列表文件格式化的命令
如.drlist、.drnolist等。
⑸
引用其他文件的命令
如copy、.def、.global、.include、.mlib、.ref等。
60DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.3匯編偽指令⑶調(diào)整第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.3
匯編偽指令⑹
控制條件匯編的命令如.break、.else、.elseif、.endif、.endloop、.if、.loop等。
⑺
在匯編時(shí)定義符號(hào)的命令如.asg、.endstruct、.equ、.eval、.label、.set、.sruct等。
⑻執(zhí)行其他功能的命令如.algebraic、.emsg、.end、.mmregs、.mmsg、.newblock、.sblock、.version、.vmsg等。61DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.4.3匯編偽指令⑹控制第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5
鏈接器的使用1.
運(yùn)行鏈接程序
’C54x鏈接器的運(yùn)行命令:
lnk500
[-options]filename1…filenamen
lnk500:
運(yùn)行鏈接器命令。-options:
鏈接命令選項(xiàng)。filenames:
文件名。62DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5鏈接器的使用1.運(yùn)行第6章匯編語(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))63DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.運(yùn)行鏈接程序’C第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
運(yùn)行鏈接程序
(2)
鍵入命令:
lnk500
file1.obj
file2.obj
-o
link.out
目標(biāo)文件:
file1.obj、file2.obj
命令選項(xiàng):
-o
輸出文件:
link.out64DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.運(yùn)行鏈接程序(2)鍵入第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
運(yùn)行鏈接程序
(3)
鍵入命令:
lnk500
linker.cmd
linker.cmd:鏈接命令文件。
例如:希望完成第二種命令的鏈接,在鏈接命令文件中,應(yīng)包含如下內(nèi)容:
file1.objfile2.obj-olink.out
65DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具1.運(yùn)行鏈接程序(3)鍵入第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.1
鏈接器的運(yùn)行
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í)行程序。
66DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.1鏈接器的運(yùn)行2.第6章匯編語(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í)行的文件。
67DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具2.鏈接命令選項(xiàng)鏈接命令選項(xiàng)第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.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)和地址分配。
68DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.2鏈接器命令文件的編寫(xiě)第6章匯編語(yǔ)言程序開(kāi)發(fā)工具
例如:可根據(jù)給出鏈接命令,編寫(xiě)完成該命令操作的鏈接器命令文件link.cmd。
lnk500a.objb.obj-mprog.map-oprog.out
鏈接命令文件的內(nèi)容如下:
a.obj/*第一個(gè)輸入文件名*/b.obj/*第二個(gè)輸入文件名*/-mprog.map/*指定map文件的選項(xiàng)*/-oprog.out/*指定輸出文件的選項(xiàng)*/69DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具例如:可根據(jù)給出鏈接命令第6章匯編語(yǔ)言程序開(kāi)發(fā)工具
【例6.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}SECTIONS/*SECTIONS偽指令*/
{.text:>ROM.data:>ROM.bss:>RAM}
70DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具【例6.5.1】鏈接器命第6章匯編語(yǔ)言程序開(kāi)發(fā)工具注意:在命令文件中,不能采用下列符號(hào)作為段名或符號(hào)名:
alignDSECTlenorunALIGNflengthorgRUNattrfillLENGTHoriginSECTIONSATTRFILLloadORIGINspareblockgroupLOADpagetypeBLOCKGROUPMEMORYPAGETYPECOPYl(小寫(xiě)L)NOLOADrangeUNION71DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具注意:在命令文件中,不能采用下列第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.3CMD文件
1.
CMD文件組成
file.obj
//子目標(biāo)文件名1
file2.obj
//子目標(biāo)文件名2
file3.obj
//子目標(biāo)文件名3
-oprog.out
//連接器操作指令,用來(lái)指定輸出文件
-mprog.m
//用來(lái)指定MAP文件
MEMORY
{略
}
SECTIONS
{略
}
otherlink.cmd
72DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.3CMD文件1.C第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.3CMD文件
2.
MEMORY偽指令
MEMORY的語(yǔ)法如下:
MEMORY
{
PAGE0:name1[(attr)]:origin=constant,length=constant
name1m[(attr)]:origin=constant,length=constant
PAGE1:name2[(attr)]:origin=constant,length=constant
name2m[(attr)]:origin=constant,length=constant
PAGEn:namen[(attr)]:origin=constant,length=constant
namenm[(attr)]:origin=constant,length=constant
}
73DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.3CMD文件2.M第6章匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.5.2】用MEMORY偽指令編寫(xiě)連接命令文件。要求:
程序存儲(chǔ)器:4K字ROM,起始地址為C00h,取名為ROM。
數(shù)據(jù)存儲(chǔ)器:32字RAM,起始地址為60h,取名為SCR。
512字RAM,起始地址為80h,取名為CHIP。file1.objfiel2.obj-oProg.outMEMORY{
PAGE0:
ROM:origin=C00h,length=1000h
PAGE1:
SCR:origin=60h,length=20h
CHIP:origin=80h,length=200h}
兩個(gè)輸入文件鏈接命令選項(xiàng)指令字頁(yè)面名稱(chēng)區(qū)間名稱(chēng)起始地址區(qū)間長(zhǎng)度74DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.5.2】用MEMORY偽第6章匯編語(yǔ)言程序開(kāi)發(fā)工具【例6.5.2】用MEMORY偽指令編寫(xiě)連接命令文件。file1.objfiel2.obj-oProg.outMEMORY{ PAGE0:
ROM:org=C00h,len=1000hPAGE1:
SCR:org=60h,len=20h
CHIP:org=80h,len=200h}
PAGE0:ROM:org=C00h,len=1000h程序存儲(chǔ)器00000h0FFFFh00C00h1000h01C00hROMPAGE1:
SCR:org=60h,len=20h數(shù)據(jù)存儲(chǔ)器00000h0FFFFh00060h0007Fh20hSCR
CHIP:org=80h,len=200h00080h200h0027FhCHIP75DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具【例6.5.2】用MEMORY偽第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.3CMD文件
3.
SECTIONS偽指令
SECTIONS的語(yǔ)法如下:
SECTIONS
{
.text:
{所有.text輸入段名}
load=加載地址
run=運(yùn)行地址
.data:
{所有.data輸入段名}
load=加載地址
run=運(yùn)行地址
.bss:
{所有.bss輸入段名}
load=加載地址
run=運(yùn)行地址
.other:{所有.other輸入段名}
load=加載地址
run=運(yùn)行地址
}
76DSP原理及應(yīng)用第6章匯編語(yǔ)言程序開(kāi)發(fā)工具6.5.3CMD文件3.S第6章匯編語(yǔ)言程序開(kāi)發(fā)工具SECTIONS指令語(yǔ)法輸入段
用文件名和段名來(lái)規(guī)定輸入段。
SECTIONS{.text:/*創(chuàng)建.text輸出段*/{
f1.obj(.text)/*鏈接來(lái)自f1.obj文件中的.text段*/
f2.obj(sec1)/*鏈接來(lái)自f2.obj文件中的sec1段*/
f3.obj/*鏈接來(lái)自f3.obj文件中的所有段*/
f4.obj(.text,sec2)/*鏈接f4.obj文件中的.text段和sec2段*/}
溫馨提示
- 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é)議合同
- 礦權(quán)轉(zhuǎn)讓居間合同
- 房產(chǎn)出售委托協(xié)議書(shū)
- 旅游服務(wù)合作協(xié)議
- 公路工程投資合伙協(xié)議
- 人教版五年級(jí)下冊(cè)數(shù)學(xué)求最大公因數(shù)練習(xí)300題及答案
- 鐵肩中學(xué)門(mén)衛(wèi)合同8篇
- 第1課 殖民地人民的反抗斗爭(zhēng)(教學(xué)設(shè)計(jì)) 九年級(jí)歷史下冊(cè)同步高效課堂(部編版)
- 第十章 第4節(jié) 跨學(xué)科實(shí)踐:制作微型密度計(jì)(教學(xué)設(shè)計(jì))2024-2025學(xué)年度人教版(2024)物理八年級(jí)下冊(cè)
- 房屋健康監(jiān)測(cè)設(shè)備安裝協(xié)議
- 儲(chǔ)能項(xiàng)目工具【Excel計(jì)算表】用戶(hù)側(cè)儲(chǔ)能電站投資收益分析表(修正版)
- 汽車(chē)駕駛員高級(jí)工題庫(kù)與答案
- 《網(wǎng)絡(luò)安全防護(hù)項(xiàng)目教程》課件項(xiàng)目4 數(shù)據(jù)庫(kù)安全防護(hù)
- 2023年血液安全技術(shù)核查指南(醫(yī)療機(jī)構(gòu))
- 手術(shù)室標(biāo)本管理及送檢評(píng)分標(biāo)準(zhǔn)
- 幫朋友貸款免責(zé)協(xié)議書(shū)范本
- 工地試驗(yàn)室建設(shè)方案(模板)
- 營(yíng)銷(xiāo)經(jīng)理勞務(wù)合同
- 新概念英語(yǔ)第二冊(cè)考評(píng)試卷含答案(第73-80課)
- 《物流無(wú)人機(jī)垂直起降場(chǎng)選址與建設(shè)規(guī)范(征求意見(jiàn)稿)》
- 中醫(yī)腕踝針技術(shù)
評(píng)論
0/150
提交評(píng)論