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

下載本文檔

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

文檔簡介

會(huì)計(jì)學(xué)1DSP精講匯編語言程序開發(fā)工具2023年1月18日2第4章匯編語言程序開發(fā)工具4.2匯編語言程序的編輯、匯編和鏈接過程示意圖匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件.cmd鏈接命令文件.lst列表文件.map存儲(chǔ)器映像文件十六進(jìn)制轉(zhuǎn)換程序HEX500-

o-

m-

l第1頁/共30頁2023年1月18日3第4章匯編語言程序開發(fā)工具4.3

COFF的一般概念

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

在編寫匯編語言程序時(shí),COFF采用代碼段和數(shù)據(jù)段的形式,以便于模塊化的編程,使編程和管理變得更加方便。這些代碼段和數(shù)據(jù)段簡稱為段。匯編器和鏈接器提供一些偽指令來建立和管理各種各樣的段。第2頁/共30頁2023年1月18日4第4章匯編語言程序開發(fā)工具4.3.1

COFF文件的基本單元

1.

段(sections)

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

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

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

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

段(保留空間段),通常為未初始化變量保留存儲(chǔ)空間。第3頁/共30頁2023年1月18日5第4章匯編語言程序開發(fā)工具4.3.1

COFF文件的基本單元

2.

段的基本類型

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

初始化段

未初始化段(1)

初始化段初始化段中包含有數(shù)據(jù)或程序代碼。主要有:.text段——已初始化段;.data段——已初始化段;.sect段——已初始化段,由匯編器偽指令建立的自定義段。

第4頁/共30頁2023年1月18日6第4章匯編語言程序開發(fā)工具4.3.1

COFF文件的基本單元

2.

段的基本類型

(2)

未初始化段

在存儲(chǔ)空間中,為未初始化數(shù)據(jù)保留存儲(chǔ)空間。它包括:.bss段——未初始化段;.usect段——未初始化段,由匯編命令建立的命名段(自定義段)。第5頁/共30頁2023年1月18日7第4章匯編語言程序開發(fā)工具3.

段與目標(biāo)存儲(chǔ)器的對應(yīng)關(guān)系目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器之間的關(guān)系

目標(biāo)文件目標(biāo)存儲(chǔ)器.bss.data.textRAME2PROMROM第6頁/共30頁2023年1月18日8第4章匯編語言程序開發(fā)工具(1).bss偽指令1.未初始化段

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

符號,字?jǐn)?shù)符號——對應(yīng)于保留的存儲(chǔ)空間第一個(gè)字的變量名稱??梢宰屍渌我?,也可以用.global命令定義為全局符號。

字?jǐn)?shù)——表示在bss段或標(biāo)有名字的段中保留若干個(gè)存儲(chǔ)單元。第7頁/共30頁2023年1月18日9第4章匯編語言程序開發(fā)工具1.未初始化段

(2).usect偽指令

用于為指定的命名段保留若干個(gè)空間。格式:符號.usect

“段名”,字?jǐn)?shù)段名——程序員為未初始化的命名段定義的名字。第8頁/共30頁2023年1月18日10第4章匯編語言程序開發(fā)工具已初始化命令的句法:2.

已初始化段

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

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

.sect

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

第9頁/共30頁2023年1月18日11第4章匯編語言程序開發(fā)工具4.3.2

匯編器對段的處理

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

可用.usect和.sect兩個(gè)偽指令產(chǎn)生命名段。3.

命名段(自定義段)第10頁/共30頁2023年1月18日12第4章匯編語言程序開發(fā)工具

.usect偽指令產(chǎn)生類似.bss的段,為變量在RAM中保留存儲(chǔ)空間。.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è)字符。第11頁/共30頁2023年1月18日13第4章匯編語言程序開發(fā)工具經(jīng)匯編后,得列表文件(部分):2*******************************3**匯編一個(gè)初始化表到.data段**4

*******************************50000.data600000044coeff.word044h,055h,066h00010055000200667*******************************8**在.bss段中為變量保留空間**9*******************************100000.bssbuffer,811*******************************12**仍然在.data段中**13*******************************1400030456prt.word0456h目標(biāo)代碼段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088

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

004400550066.bss

沒有數(shù)據(jù)保留8個(gè)字0456第12頁/共30頁2023年1月18日14第4章匯編語言程序開發(fā)工具15********************************16**匯編代碼到.text段**17********************************180000.text190000100dadd:LD0Dh,A200001f010aloop:SUB#1,A00020001210003f842BCaloop,AGEQ

00040001’

22**********************************23**匯編另一個(gè)初始化表到.data段**24**********************************250004.data26000400ccivals.word0CCh,0DDh,0EEh000500dd000600ee27********************************28**為更多的變量定義另一個(gè)段**29********************************300000var2.usect“newvars”,2310001inbuf.usect“newvars”,8目標(biāo)代碼段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee.data00440088

沒有數(shù)據(jù)保留8個(gè)字.bss沒有數(shù)據(jù)保留10個(gè)字.text

180000.text190000100dadd:LD0Dh,A100d200001f010aloop:SUB#1,Af0100001210003f842BCaloop,AGEQf8420001250004.data26000400ccivals.word0CCh,0DDh,0EEh.data

00cc00dd00ee300000var2.usect“newvars”,2newvars

保留2個(gè)字310001inbuf.usect“newvars”,8保留8個(gè)字第13頁/共30頁2023年1月18日15第4章匯編語言程序開發(fā)工具32*********************************33**匯編更多代碼到.text段**34*********************************350005.text360005110ampy:LD0Ah,B370006f166mloopMPY#0Ah,B0007000a380008f868BCmloop,BNOV00090006’

39****************************************40**為中斷向量.vectors定義一個(gè)自定義段**41****************************************420000.sect“vectors”

4300000044.word044h,088h00010088目標(biāo)代碼段名100df0100001f8420001110af166000aF8680006.text004400550066045600cc00dd00ee.data00440088

沒有數(shù)據(jù)保留8個(gè)字.bss沒有數(shù)據(jù)保留10個(gè)字newvars350005.text.text

360005110ampy:LD0Ah,B110a370006f166mloopMPY#0Ah,Bf168000a380008f868BCmloop,BNOVf8680006420000.sect“vectors”vectors

4300000044.word044h,088h00440088第14頁/共30頁2023年1月18日16第4章匯編語言程序開發(fā)工具4.3.3

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

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

SECTIONS偽指令——用來指定鏈接器將輸入段組合成輸出段方式,以及輸出段在存儲(chǔ)器中的位置,也可用于指定子段。若未使用偽指令,則鏈接器將使用目標(biāo)處理器默認(rèn)的方法將段放入存儲(chǔ)空間。

第15頁/共30頁2023年1月18日17第4章匯編語言程序開發(fā)工具默認(rèn)的存儲(chǔ)器分配過程: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沒有使用沒有配置沒有配置沒有使用第16頁/共30頁2023年1月18日18第4章匯編語言程序開發(fā)工具4.4.3

匯編偽指令1.定義段的偽指令

用于定義相應(yīng)的匯編語言程序的段。

助記符及語法格式

說明

.bsssymbol,sizeinwords[,blocking][,alignment]

為未初始化的數(shù)據(jù)段.bss保留存儲(chǔ)空間。

.data指定.data后面的代碼為數(shù)據(jù)段,通常包含初始化的數(shù)據(jù)。

.sect“sectionname”

定義初始化的命名段,可以包含可執(zhí)行代碼或數(shù)據(jù)。

.text

指定.text后面的代碼為文本段,通常包含可執(zhí)行的代碼。

symbol.usect“sectionname”,sizeinwords[,blocking][,alignmentflag]

為未初始化的命名段保留空間。類似.bss偽指令,但允許保留與.bss段不同的空間。

第17頁/共30頁2023年1月18日19第4章匯編語言程序開發(fā)工具【例4.4.2】

段偽指令的使用。

1

************************************2

*

開始匯編到.text段*3

************************************4

000000

.text5

000000

0001

.word1,2

000001

00026

000002

0003

.word3,4

000003

000471.定義段的偽指令

;定義文本段

;初始化值為1,2

;初始化值為3,4第18頁/共30頁2023年1月18日20第4章匯編語言程序開發(fā)工具【例4.4.2】

段偽指令的使用。

8

************************************9

*

開始匯編到.data段*10

************************************11

000000

.data12

000000

0009

.word9,10

000001

000A13

000002

000B

.word11,12

000003

000C141.定義段的偽指令

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

;初始化值為9,10

;初始化值為11,12第19頁/共30頁2023年1月18日21第4章匯編語言程序開發(fā)工具【例4.4.2】

段偽指令的使用。

15

************************************16

*

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

*

var_defs

*18

************************************19

000000

.sect“var_defs”

20

000000

0011

.word17,18

000001

0012211.定義段的偽指令

;定義命名段

;初始化值為17,18第20頁/共30頁2023年1月18日22第4章匯編語言程序開發(fā)工具【例4.4.2】

段偽指令的使用。

22

************************************23

*

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

000004

.data26

000004

000D

.word13,14

000005

000E27

000000

.bsssym,1928

000006

000F

.word15,16

000007

0010291.定義段的偽指令

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

;初始化值為13,14

;定義未初始化段,保留19個(gè)空間;仍然在.data段中;初始化值為15,16第21頁/共30頁2023年1月18日23第4章匯編語言程序開發(fā)工具【例4.4.2】

段偽指令的使用。

30

************************************31

*

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

************************************33

000004

.text34

000004

0005

.word5,6

000005

000635

000000

usym

.usect“xy”,2036

000006

0007

.word7,8

000007

00081.定義段的偽指令

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

;初始化值為5,6

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

;仍然在.text段中

;初始化值為7,8第22頁/共30頁2023年1月18日24第4章匯編語言程序開發(fā)工具4.4.3

匯編偽指令2.初始化常數(shù)的偽指令用于為當(dāng)前的段匯編常數(shù)值。助記符及語法格式

說明

.bytevalue[,…,value]

初始化當(dāng)前段里的一個(gè)或多個(gè)連續(xù)字。每個(gè)值的寬度被限制為8位。即把8位的值放入當(dāng)前段的連續(xù)字。

.charvalue[,…,value]

初始化當(dāng)前段里的一個(gè)或多個(gè)連續(xù)字。每個(gè)值的寬度被限制為8位。即把8位的值放入當(dāng)前段的連續(xù)字。

.fieldvalue[,sizeinbits]

初始化一個(gè)可變長度的域。將單個(gè)值放入當(dāng)前字的指定位域中。

.floatvalue[,…,value]

初始化一個(gè)或多個(gè)IEEE的單精度(32位)浮點(diǎn)數(shù),即計(jì)算浮點(diǎn)數(shù)的單精度(32位)IEEE浮

.xfloatvalue[,…,value]

初始化一個(gè)或多個(gè)IEEE的單精度(32位)浮點(diǎn)數(shù),即計(jì)算浮點(diǎn)數(shù)的單精度(32位)IEEE浮點(diǎn)表示,并將它保存在當(dāng)前段的兩個(gè)連續(xù)的字中。不自動(dòng)對準(zhǔn)最接近的長字邊界。

第23頁/共30頁2023年1月18日25第4章匯編語言程序開發(fā)工具2.初始化常數(shù)的偽指令助記符及語法格式

說明

.intvalue[,…,value]

初始化一個(gè)或多個(gè)16位整數(shù)。即把16位的值放到當(dāng)前段的連續(xù)的字中。

.shortvalue[,…,value]初始化一個(gè)或多個(gè)16位整數(shù)。即把16位的值放到當(dāng)前段的連續(xù)的字中。

.wordvalue[,…,value]

初始化一個(gè)或多個(gè)16位整數(shù)。即把16位的值放到當(dāng)前段的連續(xù)的字中。

.doublevalue[,…,value]

初始化一個(gè)或多個(gè)雙精度(64位)浮點(diǎn)數(shù)。即計(jì)算浮點(diǎn)數(shù)的單精度(32位)

浮點(diǎn)表示,并將它存儲(chǔ)在當(dāng)前段的2個(gè)連續(xù)的字中。該偽指令自動(dòng)對準(zhǔn)長字邊界。

.longvalue[,…,value]初始化一個(gè)或多個(gè)32位整數(shù)。即把32位的值放到當(dāng)前段的2個(gè)連續(xù)的字中。

.string“string[,…,“string”]”

初始化一個(gè)或多個(gè)字符串。把8位字符從一個(gè)或多個(gè)字符串放進(jìn)當(dāng)前段。

第24頁/共30頁2023年1月18日26第4章匯編語言程序開發(fā)工具【例4.4.3】比較.byte,.int,.long,.xlong,.float,.xfloat,.word和.string偽指令。

源程序:

.byte0AAh,0BBh.word0CCCh.xlong0EEEEFFFh.long0EEEEFFFF0DDDDh.xfloat1.99999.float1.99999.string“help”

.byte:將一個(gè)或多個(gè)8位值放入當(dāng)前段的連續(xù)字中。word15

01500,100AA

00BB

.word:將一個(gè)或多個(gè)16位值放入當(dāng)前段的連續(xù)字中。20CCC

.xlong:將32位值放入當(dāng)前段的2個(gè)連續(xù)的字中,先存最高有效位。3,40EEE

EFFF

.long:將32位值放入當(dāng)前段的2個(gè)連續(xù)的字中,先存最高有效位。6,7

EEEE

FFFF

.int:將一個(gè)或多個(gè)16位值放入當(dāng)前段的連續(xù)的字中。8

DDDD

.xfloat:初始化單精度(32位)浮點(diǎn)數(shù),并保存在當(dāng)前段的兩個(gè)連續(xù)的字中。9,A3FFF

FFAC

.float:初始化單精度(32位)浮點(diǎn)數(shù),并保存在當(dāng)前段的兩個(gè)連續(xù)的字中。C,D3FFF

FFAC

.string:將一個(gè)或多個(gè)字符串中的8位字符放入當(dāng)前段中。heE,F0068

0065lp10,11006C

0070第25頁/共30頁2023年1月18日27第4章匯編語言程序開發(fā)工具4.4.4

宏定義和宏調(diào)用

’C54x匯編器支持宏指令語言。如果程序中有一段程序需要執(zhí)行多次,就可以把這一段程序定義(宏定義)為一條宏指令,然后在需要重復(fù)執(zhí)行這段程序的地方調(diào)用這條宏指令(宏調(diào)用)。利用宏指令,可以使源程序變得簡短。宏的使用分以下3個(gè)步驟:

①定義宏在調(diào)用宏時(shí),必須首先定義宏;②調(diào)用宏在定義宏之后,可在源程序中調(diào)用宏;③擴(kuò)展宏在源程序調(diào)用宏指令時(shí),匯編器將對宏指令進(jìn)行擴(kuò)展。

第26頁/共30頁2023年1月18日

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論