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

下載本文檔

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

文檔簡介

第4章匯編語言程序開發(fā)工具匯編偽指令匯編器偽指令是匯編語言程序的一個(gè)重要內(nèi)容。用于為程序提供數(shù)據(jù),并控制匯編程序如何匯編源程序。

將代碼和數(shù)據(jù)匯編進(jìn)指定的段●

為未初始化的變量在存儲器中保留空間●

控制清單文件是否產(chǎn)生

初始化存儲器●

匯編條件代碼塊

定義全局變量●

為匯編器指定從中可以獲得宏的庫●

考察符號調(diào)試信息

匯編器偽指令可完成以下工作:

2023/2/281第4章匯編語言程序開發(fā)工具匯編偽指令偽指令和它所帶的參數(shù)必須書寫在一行。在包含匯編偽指令的源程序中,偽指令可以帶有標(biāo)號和注釋。雖然標(biāo)號一般不作為偽指令語法的一部分列出,但是有些偽指令必須帶有標(biāo)號,此時(shí),標(biāo)號將作為偽指令的一部分出現(xiàn)。

2023/2/282第4章匯編語言程序開發(fā)工具COFF文件的基本單元

1.

段(sections)

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

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

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

.text

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

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

段(保留空間段),通常為未初始化變量保留存儲空間。2023/2/283第4章匯編語言程序開發(fā)工具COFF文件的基本單元

2.

段的基本類型

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

初始化段

未初始化段(1)

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

.text段——已初始化段;

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

2023/2/284第4章匯編語言程序開發(fā)工具COFF文件的基本單元

2.

段的基本類型

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

未初始化段

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

.bss段——未初始化段;.usect段——未初始化段,由匯編命令建立的命名段(自定義段)。2023/2/285第4章匯編語言程序開發(fā)工具匯編器對段的處理

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

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

.bss

.usect

.text

.data

.sect——定義未初始化段——定義未初始化段——定義已初始化段——定義已初始化段——定義已初始化段2023/2/286第4章匯編語言程序開發(fā)工具匯編器對段的處理

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

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

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

1.未初始化段

2023/2/287第4章匯編語言程序開發(fā)工具(1).bss偽指令1.未初始化段

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

格式:

.bss

符號,字?jǐn)?shù)符號——對應(yīng)于保留的存儲空間第一個(gè)字的變量名稱。可以讓其他段引用,也可以用.global命令定義為全局符號。

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

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

2023/2/288第4章匯編語言程序開發(fā)工具1.未初始化段

(2).usect偽指令

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

格式:符號.usect

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

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

2023/2/289第4章匯編語言程序開發(fā)工具匯編器對段的處理

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

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

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

已初始化段2023/2/2810第4章匯編語言程序開發(fā)工具已初始化命令的句法:

2.

已初始化段

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

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

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

2023/2/2811第4章匯編語言程序開發(fā)工具

匯編器對段的處理

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

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

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

命名段(自定義段)2023/2/2813第4章匯編語言程序開發(fā)工具

.usect偽指令產(chǎn)生類似.bss的段,為變量在RAM中保留存儲空間。.sect偽指令產(chǎn)生類似.text和.data的段,可以包含代碼或數(shù)據(jù)。.sect偽指令產(chǎn)生可重新定位地址的命名段。3.

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

符號

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

.sect“段名”

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

2023/2/2814第4章匯編語言程序開發(fā)工具

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

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

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

命名段2023/2/2815第4章匯編語言程序開發(fā)工具匯編器對段的處理

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

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

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

段程序計(jì)數(shù)器SPC2023/2/2816第4章匯編語言程序開發(fā)工具【例】

段偽指令的使用。

1

************************************

2

*

開始匯編到.text段*

3

************************************

4

000000

.text

5

000000

0001

.word1,2

000001

0002

6

000002

0003

.word3,4

000003

000471.定義段的偽指令

;定義文本段

;初始化值為1,2

;初始化值為3,42023/2/2817第4章匯編語言程序開發(fā)工具【例】

段偽指令的使用。

8

************************************

9

*

開始匯編到.data段*

10

************************************

11

000000

.data

12

000000

0009

.word9,10

000001

000A

13

000002

000B

.word11,12

000003

000C141.定義段的偽指令

;定義數(shù)據(jù)段

;初始化值為9,10

;初始化值為11,122023/2/2818第4章匯編語言程序開發(fā)工具【例】

段偽指令的使用。

15

************************************

16

*

開始匯編到命名的初始化段*

17

*

var_defs

*

18

************************************

19

000000

.sect“var_defs”

20

000000

0011

.word17,18

000001

0012

21

1.定義段的偽指令

;定義命名段

;初始化值為17,182023/2/2819第4章匯編語言程序開發(fā)工具【例】

段偽指令的使用。

22

************************************

23

*

再繼續(xù)匯編到.data段*

24************************************

25

000004

.data

26

000004

000D

.word13,14

000005

000E

27

000000

.bsssym,1928

000006

000F

.word15,16

000007

001029

1.定義段的偽指令

;繼續(xù)匯編數(shù)據(jù)段

;初始化值為13,14

;定義未初始化段,保留19個(gè)空間;仍然在.data段中;初始化值為15,162023/2/2820第4章匯編語言程序開發(fā)工具【例】

段偽指令的使用。

30

************************************

31

*

再繼續(xù)匯編到.text段*

32

************************************

33

000004

.text

34

000004

0005

.word5,6

000005

0006

35

000000

usym

.usect“xy”,2036

000006

0007

.word7,8

000007

0008

1.定義段的偽指令

;繼續(xù)匯編文本段

;初始化值為5,6

;定義xy段,保留20個(gè)空間

;仍然在.text段中

;初始化值為7,82023/2/2821第4章匯編語言程序開發(fā)工具【例】

段偽指令的使用。

.text初始化值為1,2,3,4,5,6,7,8的字;

.data初始化值為9,10,11,12,13,14,15,16的字;

var_defs初始化值為17,18的字;

.bss保留19個(gè)字的空間;

.usect保留20個(gè)字的空間。1.定義段的偽指令

.bss和.usect偽指令既不結(jié)束當(dāng)前的段也不開始新段,它們保留指定數(shù)量的空間,然后匯編器開始將代碼或數(shù)據(jù)匯編進(jìn)當(dāng)前的段。

2023/2/2822第4章匯編語言程序開發(fā)工具【例】段命令應(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個(gè)單元

;0456h放入.data段

;初始化文本段

;1字指令

;2字指令

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

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

;3組數(shù)據(jù)放入.data段2023/2/2823第4章匯編語言程序開發(fā)工具匯編語言源程序: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/2/2824第4章匯編語言程序開發(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/2/2825第4章匯編語言程序開發(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/2/2826第4章匯編語言程序開發(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

源程序的行號

段程序計(jì)數(shù)器目標(biāo)代碼匯編語言源程序2023/2/2827第4章匯編語言程序開發(fā)工具

匯編語言源程序經(jīng)過匯編后,共建立了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ù)段,在存儲器中

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

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

2023/2/2828第4章匯編語言程序開發(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行號目標(biāo)代碼段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088

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

6

00446

00556

006610

.bss

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

04562023/2/2829第4章匯編語言程序開發(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

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

10沒有數(shù)據(jù)保留8個(gè)字.bss沒有數(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/2/2830第4章匯編語言程序開發(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

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

10沒有數(shù)據(jù)保留8個(gè)字.bss3031沒有數(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/2/2831第4章匯編語言程序開發(fā)工具匯編偽指令5.引用其他文件的偽指令該指令主要為引用其他文件提供信息。助記符及語法格式

說明

.copy[”]filename[”]通知匯編器開始從其他文件讀取源程序語句。.include[”]filename[”]通知匯編器開始從其他文件讀取源程序語句。.defsymbil[,…,symbil]識別定義在當(dāng)前模塊中,但可被其他模塊使用的符號。.globalsymbil

[,…,symbil]聲明當(dāng)前符號為全局符號。對定義了的符號,其作用相當(dāng)于.def;對沒有定義的符號,其作用相當(dāng)于.ref。.refsymbil[,…,symbil]識別在當(dāng)前模塊中使用的,但在其他模塊中定義的符號。2023/2/2832第4章匯編語言程序開發(fā)工具鏈接器的主要任務(wù)是根據(jù)鏈接命令文件(d),將一個(gè)或多個(gè)COFF目標(biāo)文件鏈接起來,生成存儲器映像文件(.map)和可執(zhí)行的輸出文件(.out)。

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

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

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

解決輸入文件之間未定義的外部引用。鏈接器2023/2/2833第4章匯編語言程序開發(fā)工具鏈接器

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

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

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

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

2023/2/2834第4章匯編語言程序開發(fā)工具鏈接器1.默認(rèn)的存儲器分配

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

每個(gè)目標(biāo)文件都有.text,.data、.bss段和命名段。若采用默認(rèn)鏈接,鏈接器將對多個(gè)目標(biāo)文件中的各個(gè)段進(jìn)行組合,形成各自的對應(yīng)段,并將各個(gè)段配置到所指定的存儲器中,形成可執(zhí)行的目標(biāo)模塊。

在默認(rèn)的方式下,鏈接器將從存儲器的0080h開始,對組合后的各段進(jìn)行存儲器配置。2023/2/2835第4章匯編語言程序開發(fā)工具默認(rèn)的存儲器分配:

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

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

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

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

1.默認(rèn)的存儲器分配2023/2/2836第4章匯編語言程序開發(fā)工具默認(rèn)的存儲器分配過程: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沒有使用沒有配置沒有配置沒有使用2023/2/2837第4章匯編語言程序開發(fā)工具鏈接器2.段放入存儲器空間若不希望鏈接器將所有的.text段結(jié)合在一起形成單個(gè)的.text段,就不能采用默認(rèn)的方式。由于DSP硬件系統(tǒng)中可能配置多種類型的存儲器,若要把某一段分配到特定類型的存儲器中,或?qū)⒚闻渲锰囟ǖ牡刂罚瑒t需采用MEMORY和SECTIONS偽指令來配置。

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

2023/2/2838第4章匯編語言程序開發(fā)工具鏈接器命令文件的編寫與使用鏈接命令文件用來為鏈接器提供鏈接信息,可將鏈接操作所需的信息放在一個(gè)文件中,這在多次使用同樣的鏈接信息時(shí),可以方便地調(diào)用。

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

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

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

2023/2/2839第4章匯編語言程序開發(fā)工具鏈接器命令文件的編寫與使用鏈接命令文件為ASCⅡ文件,可包含以下內(nèi)容:

(1)

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

(2)

鏈接器選項(xiàng),它們在命令文件中的使用方法與在命令行中相同。

(3)

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

(4)

賦值說明,用于給全局符號定義和賦值。2023/2/2840第4章匯編語言程序開發(fā)工具例如:可根據(jù)給出鏈接命令,編寫完成該命令操作的鏈接器命令文件linkd。

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

/*第一個(gè)輸入文件名*/

/*第二個(gè)輸入文件名*/-mprog.map/*指定map文件的選項(xiàng)*/-o/*指定輸出文件的選項(xiàng)*/2023/2/2841第4章匯編語言程序開發(fā)工具

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

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

-o/*指定輸出文件的選項(xiàng)*/-m/*指定map文件的選項(xiàng)*/

MEMORY/*MEMORY偽指令*/

{PAGE0:ROM:origin=1000h,length=0100hPAGE1:RAM:origin=0100h,length=0100h}SECTIONS/*SECTIONS偽指令*/

{.text:>ROM.data:>ROM.bss:>RAM}

2023/2/2842第4章匯編語言程序開發(fā)工具M(jìn)EMORY指令

MEMORY指令用來規(guī)定目標(biāo)存儲器的結(jié)構(gòu)。在實(shí)際的應(yīng)用中,目標(biāo)系統(tǒng)所配置的存儲器是各不相同的,通過MEMORY指令,可以進(jìn)行各種各樣的存儲器配置。MEMORY指令的句法:

MEMORY{PAGE0:name1[(attr)]:origin=constant,length=constant;PAGEn:namen[(attr)]:origin=constant,length=constant;}

指令字存儲區(qū)間說明語句書寫方式:①由大寫MEMORY指令字開始;

②由大括號括起來的存儲器區(qū)間說明。存儲區(qū)間:存儲頁面區(qū)間名稱區(qū)間屬性起始地址區(qū)間長度2023/2/2843第4章匯編語言程序開發(fā)工具M(jìn)EMORY指令存儲區(qū)間說明語句:

PAGE:

指定存儲器空間頁面,最多為255頁,取決于目標(biāo)存儲器的配置。

每一個(gè)PAGE代表一個(gè)完全獨(dú)立的地址空間。

通常,PAGE0用于程序存儲器;

PAGE1用于數(shù)據(jù)存儲器。

若沒有規(guī)定PAGE,則鏈接器默認(rèn)為PAGE0。2023/2/2844第4章匯編語言程序開發(fā)工具M(jìn)EMORY指令存儲區(qū)間說明語句:

name:

存儲器區(qū)間名稱。可由用字母、$、.、_等組成。

存儲器區(qū)間為內(nèi)部記號,因此不需要保留在輸出文件或者符號表中。

不同PAGE上的存儲器區(qū)間可以取相同的名字,但在同一PAGE內(nèi)的名字不能相同,且不許重疊配置。

2023/2/2845第4章匯編語言程序開發(fā)工具M(jìn)EMORY指令存儲區(qū)間說明語句:

attr:

為任選項(xiàng),用來為命名的存儲器區(qū)間規(guī)

定1~4個(gè)屬性。

當(dāng)對輸出段定位時(shí),可利用屬性限制輸出段分配到一定的存儲區(qū)間。

屬性選項(xiàng)共有4項(xiàng):

R

規(guī)定可以對存儲器執(zhí)行讀操作。

W規(guī)定可以對存儲器執(zhí)行寫操作。

X

規(guī)定存儲器可以裝入可執(zhí)行的程序代碼。I規(guī)定可以對存儲器進(jìn)行初始化。若未選屬性,可將輸出段不受限制地定位到任何一個(gè)存儲器的位置。任何一個(gè)沒有規(guī)定屬性的存儲器(包括所有默認(rèn)方式的存儲器)都有全部4項(xiàng)屬性。

2023/2/2846第4章匯編語言程序開發(fā)工具M(jìn)EMORY指令存儲區(qū)間說明語句:

origin:用來指定存儲區(qū)間的起始地址,可簡寫為org或o。其值以字為單位,可以用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。

Length:

用來指定存儲器空間的長度,可簡寫為len或l,其值以字為單位,可以用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。2023/2/2847第4章匯編語言程序開發(fā)工具M(jìn)EMORY指令存儲區(qū)間說明語句:

fill:

為任選項(xiàng)。用來為沒有定位輸出段的存儲器空單元充填一個(gè)數(shù),鍵入fill或f均可。該值是2個(gè)字節(jié)的整型常數(shù),可以是十進(jìn)制數(shù)、八進(jìn)制數(shù)或十六制數(shù)。2023/2/2848第4章匯編語言程序開發(fā)工具【例】用MEMORY偽指令編寫連接命令文件。要求:

程序存儲器:4K字ROM,起始地址為C00h,取名為ROM。

數(shù)據(jù)存儲器: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)指令字頁面名稱區(qū)間名稱起始地址區(qū)間長度2023/2/2849第4章匯編語言程序開發(fā)工具【例】用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程序存儲器00000h0FFFFh00C00h1000h01C00hROMPAGE1:

SCR:org=60h,len=20h數(shù)據(jù)存儲器00000h0FFFFh00060h0007Fh20hSCR

CHIP:org=80h,len=200h00080h200h0027FhCHIP2023/2/2850第4章匯編語言程序開發(fā)工具SECTIONS指令用來控制段的構(gòu)成與地址分配。指令功能:

①說明如何將輸入段組合成輸出段;

在可執(zhí)行程序中定義輸出段;③

規(guī)定輸出段在存儲器中的存放位置;④

允許重新命名輸出段。1.

SECTIONS指令語法

2023/2/2851第4章匯編語言程序開發(fā)工具SECTIONS指令的句法:

SECTIONS{name:[property,property,property,…]name:[property,property,property,…]name:[property,property,property,…]}

指令字輸出段說明語句

段名:定義輸出段的名稱。

屬性:定義該段的內(nèi)容和存儲器的分配。段名1.

SECTIONS指令語法屬性屬性屬性2023/2/2852第4章匯編語言程序開發(fā)工具1.

SECTIONS指令語法段屬性用來定義輸出段的內(nèi)容和存儲地址的分配。包括的內(nèi)容如下:①裝入存儲器分配

②運(yùn)行存儲器分配③輸入段④

段的類型⑤充填值2023/2/2853第4章匯編語言程序開發(fā)工具1.

SECTIONS指令語法①裝入存儲器分配

用于定義段裝入時(shí)的存儲器地址。語法格式:load=allocation

或allocation

或>allocation

allocation:關(guān)于段地址的說明,即給段分配存儲單元。

2023/2/2854第4章匯編語言程序開發(fā)工具1.

SECTIONS指令語法①裝入存儲器分配例如:

.text:load=0x1000

.text:load>ROM.bss:load>(RW).text:align=0x80.text:PAGE0.bss:load=block(0x80)

將.text段定位到一個(gè)特定的地址。

將.text段定位到命名為ROM的存儲區(qū)。

將.bss段定位到屬性為R、W的存儲區(qū)。

將.t

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論