DSP原理與應用匯編語言程序開發(fā)工具課件_第1頁
DSP原理與應用匯編語言程序開發(fā)工具課件_第2頁
DSP原理與應用匯編語言程序開發(fā)工具課件_第3頁
DSP原理與應用匯編語言程序開發(fā)工具課件_第4頁
DSP原理與應用匯編語言程序開發(fā)工具課件_第5頁
已閱讀5頁,還剩171頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

DSP原理與應用匯編語言程序開發(fā)工具DSP原理與應用匯編語言程序開發(fā)工具DSP原理與應用匯編語言程序開發(fā)工具DSP原理及應用2第6章匯編語言程序開發(fā)工具6.1TMS320C54x軟件開發(fā)過程’C54x的應用軟件開發(fā)主要完成以下工作:(1)選擇編程語言編寫源程序’C54x提供2種編程語言,即匯編語言和C/C++語言。

(2)選擇開發(fā)工具和環(huán)境’C54x提供了兩種開發(fā)環(huán)境。即非集成開發(fā)環(huán)境和集成開發(fā)環(huán)境CCS。DSP原理與應用匯編語言程序開發(fā)工具DSP原理與應用匯編語言1第6章匯編語言程序開發(fā)工具6.1TMS320C54x軟件開發(fā)過程

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

選擇編程語言編寫源程序

’C54x提供2種編程語言,即匯編語言和C/C++語言。

(2)

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

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

2DSP原理及應用第6章匯編語言程序開發(fā)工具6.1TMS320C54x軟件第6章匯編語言程序開發(fā)工具6.1TMS320C54x軟件開發(fā)過程

1.

’C54x應用軟件開發(fā)流程C源文件C編譯器匯編源文件匯編器匯編源文件COFF目標文件鏈接器可執(zhí)行的COFF文件宏源文件存檔器宏庫存檔器目標文件庫建庫工具運行時支持庫EPROM編程器交叉引用列表器調試工具TMS320C54x絕對地址列表器HEX代碼轉換工具3DSP原理及應用第6章匯編語言程序開發(fā)工具6.1TMS320C54x軟件第6章匯編語言程序開發(fā)工具2.

’C54x的開發(fā)工具

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

代碼生成工具代碼調試工具

實時操作系統(tǒng)4DSP原理及應用第6章匯編語言程序開發(fā)工具2.’C54x的開發(fā)工具第6章匯編語言程序開發(fā)工具2.

’C54x的開發(fā)工具(1)代碼生成工具:C編譯器

匯編器鏈接器文檔管理器建庫實用程序十六進制轉換程序5DSP原理及應用第6章匯編語言程序開發(fā)工具2.’C54x的開發(fā)工具(1)第6章匯編語言程序開發(fā)工具2.

’C54x的開發(fā)工具(2)代碼調試工具:

C/匯編語言源碼調試器:與軟件仿真器、評價模塊、軟件開發(fā)系統(tǒng)、軟件仿真器等配合使用。

軟件仿真器:是一種模擬DSP芯片各種功能并在非實時條件下進行軟件調試的調試工具,它不需目標硬件支持,只需在計算機上運行。初學者工具DSK:是TI公司提供給初學者進行DSP編程練習的一套廉價的實時軟件調試工具。

6DSP原理及應用第6章匯編語言程序開發(fā)工具2.’C54x的開發(fā)工具(2)第6章匯編語言程序開發(fā)工具DSK(DSPStarterKitm)7DSP原理及應用第6章匯編語言程序開發(fā)工具DSK(DSPStarter第6章匯編語言程序開發(fā)工具C5402DSK實物圖8DSP原理及應用第6章匯編語言程序開發(fā)工具C5402DSK實物圖8DS第6章匯編語言程序開發(fā)工具2.

’C54x的開發(fā)工具(2)代碼調試工具:

可擴展的開發(fā)系統(tǒng)仿真器(XDS510):可用來進行系統(tǒng)級的集成調試,是進行DSP芯片軟硬件開發(fā)的最佳工具。評價模塊EVM板:是一種低成本的開發(fā)板,可進行DSP芯片評價、性能評估和有限的系統(tǒng)調試。

9DSP原理及應用第6章匯編語言程序開發(fā)工具2.’C54x的開發(fā)工具(2)第6章匯編語言程序開發(fā)工具6.2匯編語言程序的編輯、匯編和鏈接過程示意圖匯編器調試程序鏈接器文本編輯器.asm源文件.obj目標文件.out輸出文件.cmd鏈接命令文件.lst列表文件.map存儲器映像文件十六進制轉換程序HEX500-

o-

m-

l10DSP原理及應用第6章匯編語言程序開發(fā)工具6.2匯編語言程序的編輯、匯編第6章匯編語言程序開發(fā)工具6.2匯編語言程序的編輯、匯編和鏈接過程匯編語言源程序以.asm為其擴展名匯編語言源程序的每一行都可以由四個部分組成,語法如下:[標號][:] 助記符 [操作數] [;注釋]1.

編輯

11DSP原理及應用第6章匯編語言程序開發(fā)工具6.2匯編語言程序的編輯、匯編第6章匯編語言程序開發(fā)工具6.2匯編語言程序的編輯、匯編和鏈接過程2.

匯編常用的匯編命令:

asm500%1-s-1-x調用匯編器命令

源文件名

將程序所有定義的符號放在目標文件的符號表中

生成一個列表文件.lst

生成一個交叉匯編表12DSP原理及應用第6章匯編語言程序開發(fā)工具6.2匯編語言程序的編輯、匯編第6章匯編語言程序開發(fā)工具6.2匯編語言程序的編輯、匯編和鏈接過程3.

鏈接常用的匯編器命令:

lnk500%1.cmd

lnk500:

調用鏈接器命令

%1.cmd:

鏈接命令文件名,該文件須指明目標文件、輸入文件、輸出文件、鏈接選項和存儲器配置要求等。13DSP原理及應用第6章匯編語言程序開發(fā)工具6.2匯編語言程序的編輯、匯編第6章匯編語言程序開發(fā)工具6.3

COFF的一般概念

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

FileHeaderOptionalHeaderSectionHeader1

SectionHeadernSectionDataRelocationDirectivesLineNumbersSymbolTableStringTable14DSP原理及應用第6章匯編語言程序開發(fā)工具6.3COFF的一般概念第6章匯編語言程序開發(fā)工具6.3

COFF的一般概念

6.3.1

COFF文件的基本單元

COFF文件有3種類型:COFF0、COFF1、COFF2。

鏈接器能夠讀/寫所有類型的COFF文件,默認時鏈接器生成的是COFF2文件,采用-vn鏈接選項可以選擇不同類型的COFF文件。

’C54x匯編器和C編譯器產生的是COFF2文件。

15DSP原理及應用第6章匯編語言程序開發(fā)工具6.3COFF的一般概念6.第6章匯編語言程序開發(fā)工具6.3.1

COFF文件的基本單元

1.

段(sections)

段——是存儲器中占據相鄰空間的代碼或數據塊。一個目標文件中的每個段都是分開的和各不相同的。

COFF目標文件都包含以下3種形式的段:

.text

段(文本段).data

段(數據段).bss

段(保留空間段)16DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.1COFF文件的基本單第6章匯編語言程序開發(fā)工具6.3.1

COFF文件的基本單元

2.

段的基本類型

COFF目標文件中的段有兩種基本類型。

初始化段

未初始化段(1)

初始化段

初始化段中包含有數據或程序代碼。主要有:

.text段——已初始化段;

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

17DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.1COFF文件的基本單第6章匯編語言程序開發(fā)工具6.3.1

COFF文件的基本單元

2.

段的基本類型

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

未初始化段

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

.bss段——未初始化段;.usect段——未初始化段,由匯編命令建立的命名段(自定義段)。18DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.1COFF文件的基本單第6章匯編語言程序開發(fā)工具6.3.1

COFF文件的基本單元

3.

段與目標存儲器的對應關系

匯編器的任務:在匯編過程中,根據匯編命令用適當的段將各部分程序代碼和數據連在一起,構成目標文件。

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

19DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.1COFF文件的基本單第6章匯編語言程序開發(fā)工具3.

段與目標存儲器的對應關系目標文件中的段與目標存儲器之間的關系目標文件目標存儲器.bss.data.textRAME2PROMROM20DSP原理及應用第6章匯編語言程序開發(fā)工具3.段與目標存儲器的對應關系目第6章匯編語言程序開發(fā)工具6.3.2

匯編器對段的處理

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

●.bss

●.usect

●.text

●.data

●.sect——定義未初始化段——定義未初始化段——定義已初始化段——定義已初始化段——定義已初始化段21DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.2匯編器對段的處理第6章匯編語言程序開發(fā)工具6.3.2

匯編器對段的處理

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

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

未初始化段分為默認的和命名的兩種,分別由匯編器偽指令.bss和.usect產生。1.未初始化段

22DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.2匯編器對段的處理第6章匯編語言程序開發(fā)工具(1).bss偽指令1.未初始化段

用于在bss段中保留若干個空間。

格式:

.bss

符號,字數.bssx,1.bssbuffer,1023DSP原理及應用第6章匯編語言程序開發(fā)工具(1).bss偽指令1.未初第6章匯編語言程序開發(fā)工具1.未初始化段

(2).usect偽指令

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

格式:符號.usect

“段名”,字數24DSP原理及應用第6章匯編語言程序開發(fā)工具1.未初始化段(2).第6章匯編語言程序開發(fā)工具6.3.2

匯編器對段的處理

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

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

已初始化段25DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.2匯編器對段的處理第6章匯編語言程序開發(fā)工具

已初始化命令的句法:

2.

已初始化段

.text[段起點]

.data[段起點]

.sect

“段名”[,段起點]26DSP原理及應用第6章匯編語言程序開發(fā)工具已初始化命令的句法:第6章匯編語言程序開發(fā)工具6.3.2

匯編器對段的處理

命名段由用戶指定,與默認的.text,.data和.bss段的使用相同,但它們被分開匯編。

可用.usect和.sect兩個偽指令產生命名段。3.

命名段(自定義段)27DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.2匯編器對段的處理第6章匯編語言程序開發(fā)工具

.usect偽指令產生類似.bss的段,為變量在RAM中保留存儲空間。

.sect偽指令產生類似.text和.data的段,可以包含代碼或數據。.sect偽指令產生可重新定位地址的命名段。3.

命名段

產生命名段偽指令格式:

符號

.usect

“段名”,字數

.sect

“段名”28DSP原理及應用第6章匯編語言程序開發(fā)工具.usect偽指令產生類第6章匯編語言程序開發(fā)工具6.3.2

匯編器對段的處理

匯編器為每個段都安排了一個單獨的程序計數器稱之為段程序計數器SPC。鏈接器在鏈接時要對每個段進行重新定位。4.

段程序計數器SPC29DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.2匯編器對段的處理第6章匯編語言程序開發(fā)工具【例6.3.1】段命令應用舉例。

匯編語言源程序:

.datacoeff.word044h,055h,066h.bssbuffer,8prt.word0456h.textadd:LD0Dh,Aaloop:SUB#1,A

BCaloop,AGEQ.dataivals.word0CCh,0DDh,0EEh

;初始化數據段

;3組數據放入.data段

;在.bss段保留8個單元

;0456h放入.data段

;初始化文本段

;1字指令

;2字指令

;2字指令共計5個字

;初始化數據段

;3組數據放入.data段30DSP原理及應用第6章匯編語言程序開發(fā)工具【例6.3.1】段命令應用舉例。第6章匯編語言程序開發(fā)工具匯編語言源程序:var2.usect“newvars”,2inbuf.usect“newvars”,8

.text

mpy:LD0Ah,B

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

.word044h,088h

;建立newvars命名段,保留2個單元

;在newvars段保留8個單元

;初始化文本段

;1字指令

;2字指令

;2字指令共計5個字;建立vectors命名段

;2組數據放入vectors命名段31DSP原理及應用第6章匯編語言程序開發(fā)工具匯編語言源程序:var2第6章匯編語言程序開發(fā)工具經匯編后,得列表文件(部分):2**********************************3

**匯編一個初始化表到.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原理及應用第6章匯編語言程序開發(fā)工具經匯編后,得列表文件(部分):第6章匯編語言程序開發(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

**匯編另一個初始化表到.data段**

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

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

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

**為更多的變量定義另一個段**29**********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

33DSP原理及應用第6章匯編語言程序開發(fā)工具15第6章匯編語言程序開發(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定義一個自定義段**41****************************************42

0000

.sect“vectors”

43

0000

0044

.word044h,088h

0001

0088

34DSP原理及應用第6章匯編語言程序開發(fā)工具32第6章匯編語言程序開發(fā)工具

匯編語言源程序經過匯編后,共建立了5個段:

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

的程序代碼。

.data段——已初始化的數據段,段內有7

個字的數據。

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

段內有2個字的初始化數據。

.bss段——未初始化的數據段,在存儲器中

為變量保留8個存儲單元。

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

35DSP原理及應用第6章匯編語言程序開發(fā)工具匯編語言源程序經過匯編后第6章匯編語言程序開發(fā)工具經匯編后,得列表文件(部分):2*******************************3

**匯編一個初始化表到.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行號目標代碼段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088

沒有數據保留10個字5

0000.data600000044coeff.word044h,055h,066h100000.bssbuffer,81400030456prt.word0456h.data

6

00446

00556

006610

.bss

沒有數據保留8個字14

045636DSP原理及應用第6章匯編語言程序開發(fā)工具經匯編后,得列表文件(部分):第6章匯編語言程序開發(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

**匯編另一個初始化表到.data段**

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

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

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

**為更多的變量定義另一個段**29********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

行號目標代碼段名100df0100001f8420001110af166000aF868000666614004400550066045600cc00dd00ee.data00440088

10沒有數據保留8個字.bss沒有數據保留10個字.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個字310001inbuf.usect“newvars”,831

保留8個字newvars

37DSP原理及應用第6章匯編語言程序開發(fā)工具15*第6章匯編語言程序開發(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定義一個自定義段**41****************************************42

0000

.sect“vectors”

430000

0044

.word044h,088h0001

0088

行號目標代碼段名1920202121100df0100001f8420001110af166000aF8680006.text66614262626004400550066045600cc00dd00ee.data00440088

10沒有數據保留8個字.bss3031沒有數據保留10個字newvars350005.text.text

360005110ampy:LD0Ah,B36

110a370006f166mloopMPY#0Ah,B37

f16837

000a380008f868BCmloop,BNOV38

f86838

0006420000.sect“vectors”vectors

4300000044.word044h,088h43

004443

008838DSP原理及應用第6章匯編語言程序開發(fā)工具32*第6章匯編語言程序開發(fā)工具6.3.3

鏈接器對段的處理

鏈接器是開發(fā)’C54x器件必不可少的開發(fā)工具之一,它對段處理時有2個主要任務:

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

②在程序裝入時對其重新定位,為各個輸出段選定存儲器地址。39DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.3鏈接器對段的處理第6章匯編語言程序開發(fā)工具6.3.3

鏈接器對段的處理

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

MEMORY偽指令

SECTIONS偽指令40DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.3鏈接器對段的處理第6章匯編語言程序開發(fā)工具6.3.3

鏈接器對段的處理默認的存儲器分配

①將所有.text段組合在一起,形成一個.text段,并分配到程序存儲器中;②將多個目標文件中的.data段組合在一起,分配到緊接著.text段的程序存儲空間中;

③將.bss段組合,配置到數據存儲器中;

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

41DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.3鏈接器對段的處理默第6章匯編語言程序開發(fā)工具默認的存儲器分配過程:File1.obj.text1.data1.bss1table_1(初始化的命名段)u_vars1(未初始化的命名段)File2.obj.text2.data2.bss2table_2(初始化的命名段)u_vars2(未初始化的命名段)FFT(初始化的命名段)程序存儲器數據存儲器.text.text1.text2.data.data1.data2.bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT沒有使用沒有配置沒有配置沒有使用42DSP原理及應用第6章匯編語言程序開發(fā)工具默認的存儲器分配過程:F第6章匯編語言程序開發(fā)工具6.3.4

鏈接器對程序的重新定位1.

鏈接器重新定位

重新定位的方法:

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

將符號變量調整到相對于新的段地址的位置;

將引用調整到重新定位后的符號,這些符號反映了調整后的新符號值。

43DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.4鏈接器對程序的重新定第6章匯編語言程序開發(fā)工具6.3.4

鏈接器對程序的重新定位2.

運行時間重新定位

利用SECTIONS偽指令選項可讓鏈接器對其定位2次,其方法:

①使用運行關鍵字設置它的運行地址;

②使用裝入關鍵字設置裝入地址。44DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.4鏈接器對程序的重新定第6章匯編語言程序開發(fā)工具6.3.5

程序裝入

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

使用調試工具轉入程序

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

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

45DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.5程序裝入可第6章匯編語言程序開發(fā)工具6.3.6

COFF文件中的符號1.

外部符號

是指在一個模塊中定義、而在另一個模塊中引用的符號。它可以用偽指令.def、.ref或.global來定義。

●.def在當前模塊中定義,并可在別的模塊中使用的符號;

●.ref在當前模塊中使用,但在別的模塊中定義的符號;

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

46DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.6COFF文件中的符號第6章匯編語言程序開發(fā)工具1.

外部符號【例6.3.2】說明代碼段中外部符號的定義。

x:ADD#56h,ABy.defx

.refy

;定義x

;引用y

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

的模塊引用

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

塊中定義

47DSP原理及應用第6章匯編語言程序開發(fā)工具1.外部符號【例6.3.2】說第6章匯編語言程序開發(fā)工具6.3.6

COFF文件中的符號2.

符號表

每當遇到一個外部符號,無論是定義的還是引用的,匯編器都將在符號表中產生一個條目。匯編器還產生一個指到每段的專門符號,鏈接器使用這些符號將其他引用符號重新定位。

48DSP原理及應用第6章匯編語言程序開發(fā)工具6.3.6COFF文件中的符號第6章匯編語言程序開發(fā)工具6.4源程序的匯編

匯編器包括如下功能:

將匯編語言源程序匯編成一個可重新定位的目標文件(.obj文件)。

根據需要,可以生成一個列表文件(.lst文件),并對該列表進行控制。

將程序代碼分成若干個段,每個段的目標代碼都有一個SPC(段程序計數器)管理。

49DSP原理及應用第6章匯編語言程序開發(fā)工具6.4源程序的匯編匯編器包括第6章匯編語言程序開發(fā)工具6.4源程序的匯編

匯編器包括如下功能:

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

對條件程序塊進行匯編。

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

為每個目標代碼塊設置一個程序計數器SPC。

50DSP原理及應用第6章匯編語言程序開發(fā)工具6.4源程序的匯編匯編器包括第6章匯編語言程序開發(fā)工具6.4源程序的匯編

6.4.1

匯編程序的運行

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

[inputfile

[objectfile[listingfile]]]

[-options]

Asm500

:運行匯編程序asm

500.exe的命令。

inputfile

:匯編源文件名,默認擴展名為.asm。objectfile

:匯編程序生成的’C54x目標文件,擴展名為.obj。listingfile

:匯編器產生的列表文件名,默認擴展名為.lst。-options

:

匯編器的選項,為匯編器的使用提供各種選擇。51DSP原理及應用第6章匯編語言程序開發(fā)工具6.4源程序的匯編6.4.1第6章匯編語言程序開發(fā)工具匯編器asm500的選項及其功能

選項功能-@

-@filemane(文件名)可以將文件名的內容附加到命令行上。使用該選項可以避免命令行長度的限制。如果在一個命令文件、文件名或選項參數中包含了嵌入的空格或連字號,則必須使用引號括起來,例如:“this-file.asm”。

-a建立一個絕對列表文件。當選用-a時,匯編器不產生目標文件。-c

使匯編語言文件中大小寫沒有區(qū)別。-d為名字符號設置初值。格式為-dname[=value]時,與匯編文件被插入name.set[=value]是等效的。如果value被省略,則此名字符號被置為1。

-f

抑制匯編器給沒有.asm擴展名的文件添加擴展名的默認行為。

52DSP原理及應用第6章匯編語言程序開發(fā)工具匯編器asm500的選項及其功能第6章匯編語言程序開發(fā)工具匯編器asm500的選項及其功能

選項功能-g

允許匯編器在源代碼中進行代碼調試。匯編語言源文件中每行的信息輸出到COFF文件中。注意:用戶不能對已經包含.line偽指令的匯編代碼使用-g

選項。例如由C/C++編譯器運行-g選項產生的代碼。

-h,-help,-?

這些選項的任一個將顯示可供使用的匯編器選項的清單。

-hc

將選定的文件復制到匯編模塊。格式為-hcfilename

所選定的文件包含到源文件語句的前面,復制的文件將出現在匯編列表文件中。

-hi

將選定的文件包含到匯編模塊。格式為-hifilename

所選定的文件包含到源文件語句的前面,所包含的文件不出現在匯編列表文件中。

53DSP原理及應用第6章匯編語言程序開發(fā)工具匯編器asm500的選項及其功能第6章匯編語言程序開發(fā)工具匯編器asm500的選項及其功能

選項功能-i

規(guī)定一個目錄。匯編器可以在這個目錄下找到.copy、

.include或.mlib命令所命名的文件。格式為-ipathname,最多可規(guī)定10個目錄,每一條路徑名的前面都必須加上-i選項。

-l

(小寫L)生成一個列表文件。

-mf

指定匯編調用擴展尋址方式

-mg

源文件是代數式指令。

-q

抑制匯編的標題以及所有的進展信息。

-r,-r[num]

壓縮匯編器由num標識的標志。該標志是報告給匯編器的消息,這種消息不如警告嚴重。若不對num指定值,則所有標志都將被壓縮。54DSP原理及應用第6章匯編語言程序開發(fā)工具匯編器asm500的選項及其功能第6章匯編語言程序開發(fā)工具匯編器asm500的選項及其功能

選項功能-pw對某些匯編代碼的流水線沖突發(fā)出警告。

-u

-uname取消預先定義的常數名,從而不考慮由任何-d

選項所指定的常數。

-v-vvalue確定使用的處理器,可用541,542,543,545,5451p,5461p,548,549值中的一個。

-s

把所有定義的符號放進目標文件的符號表中。匯編程序通常只將全局符號放進符號表。當利用-s選項時,所定義的標號以及匯編時定義的常數也都放進符號表內。-x產生一個交叉引用表,并將它附加到列表文件的最后,還在目標文件上加上交叉引用信息。即使沒有要求生成列表文件,匯編程序總還是要建立列表文件的。

55DSP原理及應用第6章匯編語言程序開發(fā)工具匯編器asm500的選項及其功能第6章匯編語言程序開發(fā)工具6.4.2

匯編時的列表文件列表文件包括4個部分:

源程序語句編號段程序計數器目標代碼源程序語句56DSP原理及應用第6章匯編語言程序開發(fā)工具6.4.2匯編時的列表文件列第6章匯編語言程序開發(fā)工具目標代碼后記符含義

!

未定義的外部引用;

,

可重新定位的文本段;

可重新定位的數據段;

+

可重新定位的初始化命名段;

-

可重新定位的未初始化段;

%

復雜的重新定位的表達式。57DSP原理及應用第6章匯編語言程序開發(fā)工具目標代碼后記符含義第6章匯編語言程序開發(fā)工具6.4.3

匯編偽指令

將代碼和數據匯編進指定的段●

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

控制清單文件是否產生

初始化存儲器●

匯編條件代碼塊

定義全局變量●

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

考察符號調試信息

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

58DSP原理及應用第6章匯編語言程序開發(fā)工具6.4.3匯編偽指令第6章匯編語言程序開發(fā)工具6.4.3

匯編偽指令⑴

對各種段進行定義的命令

如.bss、.data、.sect、.text、.usect等。

對常數(數據和存儲器)進行初始化的命令如.bes、.byte、.field、.float、.int、.log、.space、.string、.pstring、.xfloat、.xlong、.word等。

59DSP原理及應用第6章匯編語言程序開發(fā)工具6.4.3匯編偽指令⑴對各第6章匯編語言程序開發(fā)工具6.4.3

匯編偽指令⑶

調整SPC的指令

如.align等。

對輸出列表文件格式化的命令

如.drlist、.drnolist等。

引用其他文件的命令

如copy、.def、.global、.include、.mlib、.ref等。

60DSP原理及應用第6章匯編語言程序開發(fā)工具6.4.3匯編偽指令⑶調整第6章匯編語言程序開發(fā)工具6.4.3

匯編偽指令⑹

控制條件匯編的命令如.break、.else、.elseif、.endif、.endloop、.if、.loop等。

在匯編時定義符號的命令如.asg、.endstruct、.equ、.eval、.label、.set、.sruct等。

⑻執(zhí)行其他功能的命令如.algebraic、.emsg、.end、.mmregs、.mmsg、.newblock、.sblock、.version、.vmsg等。61DSP原理及應用第6章匯編語言程序開發(fā)工具6.4.3匯編偽指令⑹控制第6章匯編語言程序開發(fā)工具6.5

鏈接器的使用1.

運行鏈接程序

’C54x鏈接器的運行命令:

lnk500

[-options]filename1…filenamen

lnk500:

運行鏈接器命令。-options:

鏈接命令選項。filenames:

文件名。62DSP原理及應用第6章匯編語言程序開發(fā)工具6.5鏈接器的使用1.運行第6章匯編語言程序開發(fā)工具1.

運行鏈接程序

’C54x鏈接器的運行,有三種方法:

(1)鍵入命令:

lnk500

鏈接器會提示如下信息:

Commandfiles:Objectfiles[.obj]:

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

(要求鍵入一個或多個需要鏈接的目標文件)

(要求鍵入一個鏈接器所生成的輸出文件名)(要求附加一個鏈接選項)63DSP原理及應用第6章匯編語言程序開發(fā)工具1.運行鏈接程序’C第6章匯編語言程序開發(fā)工具1.

運行鏈接程序

(2)

鍵入命令:

lnk500

file1.obj

file2.obj

-o

link.out

目標文件:

file1.obj、file2.obj

命令選項:

-o

輸出文件:

link.out64DSP原理及應用第6章匯編語言程序開發(fā)工具1.運行鏈接程序(2)鍵入第6章匯編語言程序開發(fā)工具1.

運行鏈接程序

(3)

鍵入命令:

lnk500

linker.cmd

linker.cmd:鏈接命令文件。

例如:希望完成第二種命令的鏈接,在鏈接命令文件中,應包含如下內容:

file1.objfile2.obj-olink.out

65DSP原理及應用第6章匯編語言程序開發(fā)工具1.運行鏈接程序(3)鍵入第6章匯編語言程序開發(fā)工具6.5.1

鏈接器的運行

2.

鏈接命令選項鏈接命令選項選項含義-a

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

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

-ar

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

-eglobal_symbol

定義一個全局符號,這個符號所對應的程序存儲器地址,就是使用開發(fā)工具調試這個鏈接后的可執(zhí)行文件時程序開始執(zhí)行時的地址(稱為入口地址)。當加載器將一個程序加載到目標存儲器時,程序計數器(PC)被初始化到入口地址,然后從這個地址開始執(zhí)行程序。

66DSP原理及應用第6章匯編語言程序開發(fā)工具6.5.1鏈接器的運行2.第6章匯編語言程序開發(fā)工具2.

鏈接命令選項鏈接命令選項選項含義-ffill_vale

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

-idir

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

-lfilename

命名一個文檔庫文件作為鏈接器的輸入文件;filename為文檔庫的某個文件名。此選項必須出現在-i選項之后。

-mfilename

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

-ofilename

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

-r

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

67DSP原理及應用第6章匯編語言程序開發(fā)工具2.鏈接命令選項鏈接命令選項第6章匯編語言程序開發(fā)工具6.5.2

鏈接器命令文件的編寫與使用

鏈接命令文件為ASCⅡ文件,可包含以下內容:

(1)

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

(2)

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

MEMORY和SECTIONS鏈接偽指令,用來指定目標存儲器結構和地址分配。

68DSP原理及應用第6章匯編語言程序開發(fā)工具6.5.2鏈接器命令文件的編寫第6章匯編語言程序開發(fā)工具

例如:可根據給出鏈接命令,編寫完成該命令操作的鏈接器命令文件link.cmd。

lnk500a.objb.obj-mprog.map-oprog.out

鏈接命令文件的內容如下:

a.obj/*第一個輸入文件名*/b.obj/*第二個輸入文件名*/-mprog.map/*指定map文件的選項*/-oprog.out/*指定輸出文件的選項*/69DSP原理及應用第6章匯編語言程序開發(fā)工具例如:可根據給出鏈接命令第6章匯編語言程序開發(fā)工具

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

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

-oprog.out/*指定輸出文件的選項*/-mprog.map/*指定map文件的選項*/

MEMORY/*MEMORY偽指令*/

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

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

70DSP原理及應用第6章匯編語言程序開發(fā)工具【例6.5.1】鏈接器命第6章匯編語言程序開發(fā)工具注意:在命令文件中,不能采用下列符號作為段名或符號名:

alignDSECTlenorunALIGNflengthorgRUNattrfillLENGTHoriginSECTIONSATTRFILLloadORIGINspareblockgroupLOADpagetypeBLOCKGROUPMEMORYPAGETYPECOPYl(小寫L)NOLOADrangeUNION71DSP原理及應用第6章匯編語言程序開發(fā)工具注意:在命令文件中,不能采用下列第6章匯編語言程序開發(fā)工具6.5.3CMD文件

1.

CMD文件組成

file.obj

//子目標文件名1

file2.obj

//子目標文件名2

file3.obj

//子目標文件名3

-oprog.out

//連接器操作指令,用來指定輸出文件

-mprog.m

//用來指定MAP文件

MEMORY

{略

}

SECTIONS

{略

}

otherlink.cmd

72DSP原理及應用第6章匯編語言程序開發(fā)工具6.5.3CMD文件1.C第6章匯編語言程序開發(fā)工具6.5.3CMD文件

2.

MEMORY偽指令

MEMORY的語法如下:

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原理及應用第6章匯編語言程序開發(fā)工具6.5.3CMD文件2.M第6章匯編語言程序開發(fā)工具【例4.5.2】用MEMORY偽指令編寫連接命令文件。要求:

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

數據存儲器: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}

兩個輸入文件鏈接命令選項指令字頁面名稱區(qū)間名稱起始地址區(qū)間長度74DSP原理及應用第6章匯編語言程序開發(fā)工具【例4.5.2】用MEMORY偽第6章匯編語言程序開發(fā)工具【例6.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程序存儲器00000h0FFFFh00C00h1000h01C00hROMPAGE1:

SCR:org=60h,len=20h數據存儲器00000h0FFFFh00060h0007Fh20hSCR

CHIP:org=80h,len=200h00080h200h0027FhCHIP75DSP原理及應用第6章匯編語言程序開發(fā)工具【例6.5.2】用MEMORY偽第6章匯編語言程序開發(fā)工具6.5.3CMD文件

3.

SECTIONS偽指令

SECTIONS的語法如下:

SECTIONS

{

.text:

{所有.text輸入段名}

load=加載地址

run=運行地址

.data:

{所有.data輸入段名}

load=加載地址

run=運行地址

.bss:

{所有.bss輸入段名}

load=加載地址

run=運行地址

.other:{所有.other輸入段名}

load=加載地址

run=運行地址

}

76DSP原理及應用第6章匯編語言程序開發(fā)工具6.5.3CMD文件3.S第6章匯編語言程序開發(fā)工具SECTIONS指令語法輸入段

用文件名和段名來規(guī)定輸入段。

SECTIONS{.text:/*創(chuàng)建.text輸出段*/{

f1.obj(.text)/*鏈接來自f1.obj文件中的.text段*/

f2.obj(sec1)/*鏈接來自f2.obj文件中的sec1段*/

f3.obj/*鏈接來自f3.obj文件中的所有段*/

f4.obj(.text,sec2)/*鏈接f4.obj文件中的.text段和sec2段*/}

溫馨提示

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

評論

0/150

提交評論