版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國社區(qū)養(yǎng)老服務(wù)行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國美甲行業(yè)并購重組擴(kuò)張戰(zhàn)略制定與實(shí)施研究報(bào)告
- 脂肪酶活檢測原理及方法
- 服裝品牌意向調(diào)查問卷
- 建設(shè)廉潔政治讀書心得體會(huì)-總結(jié)報(bào)告模板
- 2024年游記作文300字
- 商品知識(shí)培訓(xùn)課件下載
- 打造高績效團(tuán)隊(duì)培訓(xùn)課件2
- 年產(chǎn)7000噸銅、鋁電磁線項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)拿地
- 二零二五年度安全生產(chǎn)標(biāo)準(zhǔn)化體系完善與維護(hù)服務(wù)合同3篇
- 青島版數(shù)學(xué)五年級下冊第二單元《分?jǐn)?shù)的意義和性質(zhì)》教學(xué)評一致性的單元整體備課
- 清朝的八旗制度及其影響
- 拇外翻護(hù)理查房課件
- 2023年采購電子主管年度總結(jié)及下一年展望
- 高考語用必考點(diǎn)-理解詞語的含義+課件
- 混凝土采購組織供應(yīng)、運(yùn)輸、售后服務(wù)方案
- PDCA在靜脈留置針規(guī)范管理中的應(yīng)用
- (完整)中國象棋教案
- 熱工自動(dòng)化系統(tǒng)檢修運(yùn)行維護(hù)規(guī)程
- 顱內(nèi)壓增高病人的護(hù)理
- 裝配式混凝土建筑構(gòu)件識(shí)圖-疊合板識(shí)讀(裝配式混凝土建筑)
評論
0/150
提交評論