版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
關(guān)于鏈接器的使用第4章匯編語(yǔ)言程序開發(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。第2頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(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))第3頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(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。第4頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
運(yùn)行鏈接程序
(3)
鍵入命令:
lnk500
linker.cmd
linker.cmd:鏈接命令文件。
在執(zhí)行上述命令之前,需將鏈接的目標(biāo)文件、鏈接命令選項(xiàng)以及存儲(chǔ)器配置要求等編寫到鏈接命令文件linker.cmd中。
例如:希望完成第二種命令的鏈接,在鏈接命令文件中,應(yīng)包含如下內(nèi)容:
file1.objfile2.obj-olink.out
第5頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(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)之間可以用空格分開。最常用選項(xiàng)為-m和-o,分別表示輸出的地址分配表映像文件名和輸出可執(zhí)行文件名。
第6頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(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)(可以分開寫成-a-r,也可以連在一起寫作-ar),與-a選項(xiàng)相比,-ar選項(xiàng)還在輸出文件中保留有重新定位信息。
-eglobal_symbol
定義一個(gè)全局符號(hào),這個(gè)符號(hào)所對(duì)應(yīng)的程序存儲(chǔ)器地址,就是使用開發(fā)工具調(diào)試這個(gè)鏈接后的可執(zhí)行文件時(shí)程序開始執(zhí)行時(shí)的地址(稱為入口地址)。當(dāng)加載器將一個(gè)程序加載到目標(biāo)存儲(chǔ)器時(shí),程序計(jì)數(shù)器(PC)被初始化到入口地址,然后從這個(gè)地址開始執(zhí)行程序。
第7頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(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í)行的文件。
第8頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.2
鏈接器命令文件的編寫與使用
鏈接命令文件用來(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)成與地址分配。
第9頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.2
鏈接器命令文件的編寫與使用
鏈接命令文件為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)定義和賦值。第10頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具
例如:可根據(jù)給出鏈接命令,編寫完成該命令操作的鏈接器命令文件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)*/第11頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(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}SECTIONS/*SECTIONS偽指令*/
{.text:>ROM.data:>ROM.bss:>RAM}第12頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具注意:在命令文件中,不能采用下列符號(hào)作為段名或符號(hào)名:
alignDSECTlenorunALIGNflengthorgRUNattrfillLENGTHoriginSECTIONSATTRFILLloadORIGINspareblockgroupLOADpagetypeBLOCKGROUPMEMORYPAGETYPECOPYl(小寫L)NOLOADrangeUNION第13頁(yè),共58頁(yè),2024年2月25日,星期天第14頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.3
目標(biāo)庫(kù)
目標(biāo)庫(kù)是用完全的目標(biāo)文件作為成員的存檔文件。通常是將一組有關(guān)的模塊組合在一起而形成的庫(kù)。
當(dāng)指定目標(biāo)庫(kù)作為鏈接器的輸入時(shí),鏈接器將在庫(kù)中搜索沒(méi)有分辨的外部引用,并包括庫(kù)中已定義有這些引用的任何成員。
使用目標(biāo)庫(kù)可減少鏈接的時(shí)間和可執(zhí)行模塊的長(zhǎng)度??衫么鏅n器建立主要的庫(kù)。
第15頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.3
目標(biāo)庫(kù)假設(shè):
輸入文件f1.obj和f2.obj均引用了名為clrscr的外部函數(shù);
輸入文件f1.obj引用了符號(hào)origin;輸入文件f2.obj引用了符號(hào)fillclr;
庫(kù)libc.libc的成員Member0包含了origin的定義;
庫(kù)libc.liba的成員Member3包含了fillclr的定義;
兩個(gè)庫(kù)的成員Member1都定義了clrscr。第16頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.3
目標(biāo)庫(kù)若輸入命令:
lnk500
f1.obj
liba.lib
f2.obj
libc.lib
則各引用的分辨如下:
①
庫(kù)libc.liba的成員Member1滿足對(duì)clrscr的引用②
庫(kù)libc.libc的成員Member0滿足對(duì)origin的引用
③庫(kù)libc.liba的成員Member3滿足對(duì)fillclr的引用
第17頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.3
目標(biāo)庫(kù)若輸入命令:
lnk500f1.objf2.objlibc.libliba.lib
則所有對(duì)clrscr的引用,都由庫(kù)libc.libc的成員Member1滿足。
第18頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.3
目標(biāo)庫(kù)
當(dāng)鏈接文件沒(méi)有引用定義在庫(kù)中的符號(hào)時(shí),可使用-u選擇項(xiàng),強(qiáng)迫鏈接器包括庫(kù)的成員。此時(shí),輸入命令:
lnk500-urout1libc.lib
則在鏈接器全局符號(hào)表中,產(chǎn)生一個(gè)沒(méi)有定義的符號(hào)rout1。若庫(kù)libc.lib的任何成員定義了rout1,則鏈接器將包括這些成員。
第19頁(yè),共58頁(yè),2024年2月25日,星期天第20頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.4MEMORY指令
MEMORY指令用來(lái)規(guī)定目標(biāo)存儲(chǔ)器的結(jié)構(gòu)。在實(shí)際的應(yīng)用中,目標(biāo)系統(tǒng)所配置的存儲(chǔ)器是各不相同的,通過(guò)MEMORY指令,可以進(jìn)行各種各樣的存儲(chǔ)器配置。MEMORY指令的句法:
MEMORY{PAGE0:name1[(attr)]:origin=constant,length=constant;
PAGEn:namen[(attr)]:origin=constant,length=constant;}指令字存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句書寫方式:①已大寫MEMORY指令字開始;
②由大括號(hào)括起來(lái)的存儲(chǔ)器區(qū)間說(shuō)明。存儲(chǔ)區(qū)間:存儲(chǔ)頁(yè)面區(qū)間名稱區(qū)間屬性起始地址區(qū)間長(zhǎng)度第21頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.4MEMORY指令存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
PAGE:
指定存儲(chǔ)器空間頁(yè)面,最多為255頁(yè),取決于目標(biāo)存儲(chǔ)器的配置。
每一個(gè)PAGE代表一個(gè)完全獨(dú)立的地址空間。
通常,PAGE0用于程序存儲(chǔ)器;
PAGE1用于數(shù)據(jù)存儲(chǔ)器。
若沒(méi)有規(guī)定PAGE,則鏈接器默認(rèn)為PAGE0。第22頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.4MEMORY指令存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
name:
存儲(chǔ)器區(qū)間名稱。可由用字母、$、.、_
等組成。
存儲(chǔ)器區(qū)間為內(nèi)部記號(hào),因此不需要保留在輸出文件或者符號(hào)表中。
不同PAGE上的存儲(chǔ)器區(qū)間可以取相同的名字,但在同一PAGE內(nèi)的名字不能相同,且不許重疊配置。
第23頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.4MEMORY指令存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
attr:
為任選項(xiàng),用來(lái)為命名的存儲(chǔ)器區(qū)間規(guī)
定1~4個(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è)存儲(chǔ)器的位置。任何一個(gè)沒(méi)有規(guī)定屬性的存儲(chǔ)器(包括所有默認(rèn)方式的存儲(chǔ)器)都有全部4項(xiàng)屬性。
第24頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.4MEMORY指令存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
origin:用來(lái)指定存儲(chǔ)區(qū)間的起始地址,可簡(jiǎn)寫為org或o。其值以字為單位,可以用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。
Length:
用來(lái)指定存儲(chǔ)器空間的長(zhǎng)度,可簡(jiǎn)寫為len或l,其值以字為單位,可以用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。
第25頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.4MEMORY指令存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
fill:
為任選項(xiàng)。用來(lái)為沒(méi)有定位輸出段的存儲(chǔ)器空單元充填一個(gè)數(shù),鍵入fill或f均可。該值是2個(gè)字節(jié)的整型常數(shù),可以是十進(jìn)制數(shù)、八進(jìn)制數(shù)或十六制數(shù)。
第26頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具【例4.5.2】用MEMORY偽指令編寫連接命令文件。要求:
程序存儲(chǔ)器:4K字ROM,起始地址為C00h,取名為ROM。
數(shù)據(jù)存儲(chǔ)器:32字RAM,起始地址為60h,取名為SCR。
512字RAM,起始地址為80h,取名為CHIP。file1.objfiel2.obj
-oProg.out
MEMORY{
PAGE0:
ROM:origin=C00h,length=1000h
PAGE1:
SCR:
origin=60h,length=20h
CHIP:
origin=80h,length=200h}
兩個(gè)輸入文件鏈接命令選項(xiàng)指令字頁(yè)面名稱區(qū)間名稱起始地址區(qū)間長(zhǎng)度第27頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具【例4.5.2】用MEMORY偽指令編寫連接命令文件。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=200h00080h200h0027FhCHIP第28頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.5
SECTIONS指令
用來(lái)控制段的構(gòu)成與地址分配。指令功能:
①說(shuō)明如何將輸入段組合成輸出段;
②
在可執(zhí)行程序中定義輸出段;③
規(guī)定輸出段在存儲(chǔ)器中的存放位置;④
允許重新命名輸出段。1.
SECTIONS指令語(yǔ)法
第29頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具SECTIONS指令的句法:
SECTIONS{name:[property,property,property,…]name:[property,property,property,…]name:[property,property,property,…]}指令字輸出段說(shuō)明語(yǔ)句
段名:定義輸出段的名稱。
屬性:定義該段的內(nèi)容和存儲(chǔ)器的分配。段名1.
SECTIONS指令語(yǔ)法屬性屬性屬性第30頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
SECTIONS指令語(yǔ)法
段屬性用來(lái)定義輸出段的內(nèi)容和存儲(chǔ)地址的分配。包括的內(nèi)容如下:①
裝入存儲(chǔ)器分配
②運(yùn)行存儲(chǔ)器分配③輸入段④
段的類型⑤充填值第31頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
SECTIONS指令語(yǔ)法①
裝入存儲(chǔ)器分配
用于定義段裝入時(shí)的存儲(chǔ)器地址。語(yǔ)法格式:load=allocation
或allocation
或
>allocation
allocation:關(guān)于段地址的說(shuō)明,即給段分配存儲(chǔ)單元。
第32頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
SECTIONS指令語(yǔ)法①
裝入存儲(chǔ)器分配例如:
.text:load=0x1000
.text:load>ROM.bss:load>(RW)
.text:align=0x80.text:PAGE0.bss:load=block(0x80)
將.text段定位到一個(gè)特定的地址。將.text段定位到命名為ROM的存儲(chǔ)區(qū)。將.bss段定位到屬性為R、W的存儲(chǔ)區(qū)。將.text段定位到從地址0x80開始。
將.text段定位到PAGE0。
將.bss段定位到一個(gè)n字存儲(chǔ)器塊
的任何一個(gè)位置(n為2的冪次)。
第33頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
SECTIONS指令語(yǔ)法①
裝入存儲(chǔ)器分配
若用到一個(gè)以上參數(shù),可以將它們排成一行。
例如:
.text:>ROM(align(16)PAGE(2))
。
第34頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
SECTIONS指令語(yǔ)法②
運(yùn)行存儲(chǔ)器分配
用于定義段運(yùn)行時(shí)的存儲(chǔ)器地址。語(yǔ)法格式:run=allocation
或
run>allocation
第35頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
SECTIONS指令語(yǔ)法
鏈接器為段在目標(biāo)存儲(chǔ)器中分配兩個(gè)地址:
加載的地址——由裝入存儲(chǔ)器分配完成
執(zhí)行程序的地址——由運(yùn)行存儲(chǔ)器分配完成
通常,這兩個(gè)地址是相同的。
若要想把程序的加載區(qū)分開,先將程序加載到ROM,然后在RAM中運(yùn)行,則用SECTIONS命令讓鏈接器對(duì)這個(gè)段定位兩次即可。
例如:
.fir:load=ROM,run=RAM
第36頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
SECTIONS指令語(yǔ)法③
輸入段用于定義組成輸出段的輸入段。語(yǔ)法格式:{input_sections}
大多數(shù)情況下,在SECTIONS命令中是不列出每個(gè)輸入文件的輸入段的段名。
例如:
SECTIONS{.text:.data:.bss
}鏈接時(shí):在輸入文件中的所有.text段鏈接成.text輸出段所有.data段鏈接成.data輸出段所有.bss段鏈接成.bss輸出段第37頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
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段*/}}第38頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具1.
SECTIONS指令語(yǔ)法④
段的類型用于為輸出段定義特殊形式的標(biāo)記。語(yǔ)法格式:type=COPY
或type=DSECT
或
type=NOLOAD
⑤充填值用于對(duì)未初始化空單元定義一個(gè)數(shù)值。語(yǔ)法格式:fill=value
或
name:…{…}=value
第39頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.5
SECTIONS指令2.
SECTIONS指令的使用
【例4.5.3】SECTIONS指令的使用。
file1.objfile2.obj-oProg.outSECTIONS{.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80h{t1.obj(.int1)t2.obj(.int2)endvec=.;}.data:align=16}兩個(gè)輸入文件鏈接命令選項(xiàng)指令字輸出段說(shuō)明語(yǔ)句第40頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具2.
SECTIONS指令的使用
【例4.5.3】SECTIONS指令的使用。
file1.objfile2.obj-oProg.outSECTIONS{.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80h{t1.obj(.int1)t2.obj(.int2)endvec=.;}.data:align=16}輸出段加載地址運(yùn)行地址.textROMRAM800h.conROM.bssRAM.vecROMFF80.dataRAM16位邊界第41頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具2.
SECTIONS指令的使用
【例4.5.3】SECTIONS指令的使用。
file1.objfile2.obj-oProg.outSECTIONS{.text:load=ROM,run=800h.con:load=ROM.bss:load=RAM.vec:load=FF80h{t1.obj(.int1)t2.obj(.int2)endvec=.;}.data:align=16}輸出段加載地址運(yùn)行地址.textROMRAM800h.conROM.bssRAM.vecROMFF80.dataRAM16位邊界
ROM
RAM00h.text.con.bss.vec.dataFF80h運(yùn)行時(shí)800h.text.text.text第42頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.5
SECTIONS指令3.
MEMORY和SECTIONS命令的默認(rèn)使用
如果沒(méi)有利用MEMORY和SECTIONS命令,鏈接器就按默認(rèn)算法來(lái)定位輸出段。
將所有的.text輸入段鏈接成一個(gè).text輸出段,并配置到PAGE
0上的存儲(chǔ)器;
將所有的.data輸入段組合成.data輸出段,定位到PAGE
0上的存儲(chǔ)器;
第43頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具3.
MEMORY和SECTIONS命令的默認(rèn)使用
所有的.bss輸入段則組合成一個(gè).bss輸出段,并由鏈接器定位到配置為PAGE1上的存儲(chǔ)器。
如果輸入文件中包含有已初始化的命名段,則鏈接器將它們定位到程序存儲(chǔ)器,緊隨.data段之后。
如果輸入文件中包括有未初始化的命名段,則鏈接器將它們定位到數(shù)據(jù)存儲(chǔ)器,并緊隨.bss段之后。
第44頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具3.
MEMORY和SECTIONS命令的默認(rèn)使用
MEMORY{PAGE0:PROG:origin=0x0080,length=0xFF00PAGE1:DATA:origin=0x0080,length=0xFF80}SECTIONS{.text:PAGE=0.data:PAGE=0.cinit:PAGE=0.bss:PAGE=1}第45頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.6
多個(gè)文件的鏈接實(shí)例
下面以example.asm源程序?yàn)槔?,將?fù)位向量列為一個(gè)單獨(dú)的文件,對(duì)兩個(gè)目標(biāo)文件進(jìn)行鏈接。(1)編寫復(fù)位向量文件
vectors.asm文件清單:
.title“vectors.asm”.refstart.sect“.vectors”Bstart.end
第46頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具4.5.6
多個(gè)文件的鏈接實(shí)例(2)
編寫源程序文件清單:
.title“example.asm”.mmregsstack.usect“STACK”,10h;為堆棧指定空間
.bssa,4;為變量分配9個(gè)字的空間
.bssx,4.bssy,1.defstart.datatable:.word1,2,3,4;變量初始化
.word8,6,4,2.text第47頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具(2)
編寫源程序
文件清單:
start:STM#
0,SWWSR;插入0個(gè)等待狀態(tài)
STM#
STACK+10h,SP;設(shè)置堆棧指針
STM#
a,AR1;AR1指向aRPT#
7;移動(dòng)8個(gè)數(shù)據(jù)
MVPDtable,*AR1+;從程序存儲(chǔ)器到數(shù)據(jù)存儲(chǔ)器
CALLSUM;調(diào)用SUM子程序
end:BendSUM:STM#
a,AR3;子程序執(zhí)行
STM#
x,AR4RPTZA,#
3MAC*AR3+,*AR4+,ASTLA,@
yRET.end第48頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具(3)對(duì)源文件匯編(4)編寫鏈接命令文件
編寫的命令文件用來(lái)鏈接兩個(gè)目標(biāo)文件(輸入文件),生成一個(gè)映像文件example.map和一個(gè)可執(zhí)行的輸出文件example.out。標(biāo)號(hào)start是程序的入口。
假設(shè)目標(biāo)存儲(chǔ)器的配置如下:
程序存儲(chǔ)器
EPROME000h~FFFFh(片外)
數(shù)據(jù)存儲(chǔ)器
SPRAM0060h~007Fh(片內(nèi))DARAM0080h~017Fh(片內(nèi))
由匯編器分別對(duì)兩個(gè)源文件進(jìn)行匯編,生成目標(biāo)文件example.obj和vectors.obj。
第49頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具(4)編寫鏈接命令文件命令文件清單:
vectors.objexample.obj-oexample.out-mexample.map-estartMEMORY{PAGE0:EPROM:org=0E000h,len=100hVECS:org=0FF80h,len=04hPAGE1:SPRAM:org=0060h,len=20hDARAM:org=0080h,len=100h}第50頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具(4)編寫鏈接命令文件命令文件清單:
SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1STACK:>DARAMPAGE1.vectors:>VECSPAGE0}第51頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具(4)編寫鏈接命令文件
程序存儲(chǔ)器配置了一個(gè)空間VECS,它的起始地址0ff80h,長(zhǎng)度為04h,并將復(fù)位向量段.vectors放在VECS空間。
當(dāng)’C54x復(fù)位后,首先進(jìn)入0ff80h,再?gòu)?ff80h復(fù)位向量處跳轉(zhuǎn)到主程序。
在命令文件中,有一條命令-estart,是軟件仿真器的入口地址命令,目的是在軟件仿真時(shí),屏幕從start語(yǔ)句標(biāo)號(hào)處顯示程序清單,且PC也指向start位置(0e000h)。
第52頁(yè),共58頁(yè),2024年2月25日,星期天第4章匯編語(yǔ)言程序開發(fā)工具(5)鏈接
經(jīng)過(guò)鏈接器鏈接后,生成一個(gè)可執(zhí)行的輸出文件example.out和映像文件example.map。映像文件清單:
OUTPUTFILENAME:<example.out>ENTRYPOINTSYMBOL:“start”address:0000e000MEMORYCONFIGURATIONnameoriginlengthattributes
fill——————————————————PAGE
0:EPROM0000e000000000100RWIX
VECS0000FF80000000004RWIXPAGE
1:SPRAM00000060000000020RWIX
DARAM00000080000000100RWIX第53頁(yè),共5
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 五四的題目及答案
- 久治事業(yè)編招聘2022年考試模擬試題及答案解析40
- 初中學(xué)生安全教育
- 商標(biāo)代理公司項(xiàng)目管理辦法
- 2022~2023無(wú)人機(jī)資格證考試題庫(kù)及答案第375期
- 工人安全保證書錦集8篇
- 水泥行業(yè)環(huán)保培訓(xùn)課件
- 輔警職業(yè)能力培訓(xùn)課件
- 2026 年初中英語(yǔ)《同位語(yǔ)從句》專項(xiàng)練習(xí)與答案 (100 題)
- 原發(fā)性肝癌的護(hù)理團(tuán)隊(duì)建設(shè)
- 餐廳充值服務(wù)合同范本
- 2025年汽車洗滌器總成行業(yè)分析報(bào)告及未來(lái)發(fā)展趨勢(shì)預(yù)測(cè)
- 麻疹知識(shí)培訓(xùn)內(nèi)容總結(jié)
- 2025年事業(yè)單位招聘考試綜合類專業(yè)知識(shí)試題(體育)
- 高考語(yǔ)文強(qiáng)基試卷及答案
- 安全生產(chǎn)責(zé)任保險(xiǎn)培訓(xùn)課件
- 機(jī)械工程的奧秘之旅-揭秘機(jī)械工程的魅力與價(jià)值
- 五岳課件教學(xué)課件
- 2025年國(guó)家公務(wù)員考試公共基礎(chǔ)知識(shí)模擬試卷及答案(共五套)
- 雨污分流監(jiān)理工作總結(jié)報(bào)告
- 《益生菌與藥食同源植物成分協(xié)同作用評(píng)價(jià)》-編制說(shuō)明 征求意見稿
評(píng)論
0/150
提交評(píng)論