




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章匯編語(yǔ)言程序開(kāi)發(fā)工具
可編程DSP芯片開(kāi)發(fā)需要一套完整的軟、硬件開(kāi)發(fā)工具。通??煞殖纱a生成工具和代碼調(diào)試工具兩大類。
代碼生成工具是指將高級(jí)語(yǔ)言或匯編語(yǔ)言編寫(xiě)的DSP程序轉(zhuǎn)換成可執(zhí)行的DSP芯片目標(biāo)代碼的工具程序,主要包括C編譯器、匯編器和鏈接器以及一些輔助工具程序等。
代碼調(diào)試工具包括C/匯編語(yǔ)言源碼調(diào)試器、仿真器等。
本章主要介紹代碼生成工具,包括C54x軟件開(kāi)發(fā)流程、匯編語(yǔ)言程序的編寫(xiě)、編輯、匯編和鏈接過(guò)程、COFF段的一般概念等。
2023/2/31DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具
3.1
TMS320C54x軟件開(kāi)發(fā)過(guò)程
3.2匯編語(yǔ)言程序的編寫(xiě)方法3.3匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程3.4
COFF的一般概念3.5匯編偽指令3.6鏈接器命令文件的編寫(xiě)和使用2023/2/32DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.1TMS320C54x軟件開(kāi)發(fā)過(guò)程
’C54x的應(yīng)用軟件開(kāi)發(fā)主要完成以下工作:(1)
選擇編程語(yǔ)言編寫(xiě)源程序
’C54x提供2種編程語(yǔ)言,即匯編語(yǔ)言和C/C++語(yǔ)言。(2)
選擇開(kāi)發(fā)工具和環(huán)境
’C54x提供了兩種開(kāi)發(fā)環(huán)境。即非集成開(kāi)發(fā)環(huán)境和集成開(kāi)發(fā)環(huán)境CCS。
2023/2/33DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.1TMS320C54x軟件開(kāi)發(fā)過(guò)程1.
’C54x應(yīng)用軟件開(kāi)發(fā)流程
’C54x應(yīng)用軟件的開(kāi)發(fā)可在TI公司提供的開(kāi)發(fā)環(huán)境中進(jìn)行,用戶可以用C/C++語(yǔ)言或匯編語(yǔ)言編寫(xiě)源文件,經(jīng)C編譯器、匯編器生成COFF格式的目標(biāo)文件,再用鏈接器進(jìn)行鏈接,生成在’C54x上可執(zhí)行的目標(biāo)代碼,然后利用調(diào)試工具對(duì)可執(zhí)行的目標(biāo)代碼進(jìn)行仿真和調(diào)試。
當(dāng)調(diào)試完成后,通過(guò)Hex代碼轉(zhuǎn)換工具,將調(diào)試后的可執(zhí)行目標(biāo)代碼轉(zhuǎn)換成EPROM編程器能接受的代碼,并將該代碼固化到EPROM中或加載到用戶的應(yīng)用系統(tǒng)中,以便DSP目標(biāo)系統(tǒng)脫離計(jì)算機(jī)單獨(dú)運(yùn)行。
2023/2/34DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
’C54x應(yīng)用軟件開(kāi)發(fā)流程開(kāi)發(fā)過(guò)程的目的是產(chǎn)生一個(gè)可以由’C54x目標(biāo)系統(tǒng)執(zhí)行的模塊。C源文件C編譯器匯編源文件匯編器匯編源文件COFF目標(biāo)文件鏈接器可執(zhí)行的COFF文件宏源文件存檔器宏庫(kù)存檔器目標(biāo)文件庫(kù)建庫(kù)工具運(yùn)行時(shí)支持庫(kù)EPROM編程器交叉引用列表器調(diào)試工具TMS320C54x絕對(duì)地址列表器HEX代碼轉(zhuǎn)換工具2023/2/35DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具
TI公司提供的DSP開(kāi)發(fā)環(huán)境和工具主要包括以下兩個(gè)部分:
代碼生成工具代碼調(diào)試工具2023/2/36DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具(1)代碼生成工具:C編譯器:用來(lái)將C/C++語(yǔ)言源程序自動(dòng)編譯為’C54x匯編語(yǔ)言源程序。
匯編器:用來(lái)將匯編語(yǔ)言源文件匯編成機(jī)器語(yǔ)言COFF目標(biāo)文件。
鏈接器:將匯編生成的COFF目標(biāo)文件組合成一個(gè)可執(zhí)行的COFF目標(biāo)文件。
文檔管理器:允許用戶將一組文件(源文件或目標(biāo)文件)組合成一個(gè)文檔或庫(kù)。
2023/2/37DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具助記符指令—代數(shù)式指令翻譯器:用來(lái)將助記符指令的匯編語(yǔ)言源文件轉(zhuǎn)換成代數(shù)式指令的匯編語(yǔ)言源文件。
建庫(kù)實(shí)用程序:用來(lái)建立用戶自己使用的、并用C/C++語(yǔ)言編寫(xiě)的支持運(yùn)行的庫(kù)函數(shù)。
十六進(jìn)制轉(zhuǎn)換程序:可以很方便地將COFF目標(biāo)文件轉(zhuǎn)換成TI、Intel、Motorola等公司的目標(biāo)文件格式。以便燒制EPROM。(1)代碼生成工具:2023/2/38DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具(1)代碼生成工具:絕對(duì)制表程序:將鏈接后的目標(biāo)文件作為輸入,生成.abs輸出文件。
交叉引用制表程序:利用目標(biāo)文件生成一個(gè)交叉引用清單,列出鏈接的源文件中的符號(hào)以及它們的定義和引用情況。2023/2/39DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具(2)代碼調(diào)試工具:
軟件仿真器:是一種模擬DSP芯片各種功能并在非實(shí)時(shí)條件下進(jìn)行軟件調(diào)試的調(diào)試工具,它不需目標(biāo)硬件支持,只需在計(jì)算機(jī)上運(yùn)行。初學(xué)者工具DSK:是TI公司提供給初學(xué)者進(jìn)行DSP編程練習(xí)的一套廉價(jià)的實(shí)時(shí)軟件調(diào)試工具。評(píng)價(jià)模塊EVM板:是一種低成本的開(kāi)發(fā)板,可進(jìn)行DSP芯片評(píng)價(jià)、性能評(píng)估和有限的系統(tǒng)調(diào)試。
可擴(kuò)展的開(kāi)發(fā)系統(tǒng)仿真器(XDS510):可用來(lái)進(jìn)行系統(tǒng)級(jí)的集成調(diào)試,是進(jìn)行DSP芯片軟硬件開(kāi)發(fā)的最佳工具。
2023/2/310DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2.
’C54x的開(kāi)發(fā)工具評(píng)價(jià)模塊EVM板:XDS510:2023/2/311DSP原理及應(yīng)用3.2匯編語(yǔ)言程序的編寫(xiě)方法程序行一般包含4個(gè)部分,其一般組成形式為:[標(biāo)號(hào)][:]助記符[操作數(shù)][;注釋]1.標(biāo)號(hào)區(qū)所有匯編指令和大多數(shù)匯編偽指令前面都可以帶有標(biāo)號(hào);標(biāo)號(hào)最多可達(dá)32個(gè)字符,由A~Z、a~z、0~9、_、和$符號(hào)組成;且第一個(gè)字符不能是數(shù)字,區(qū)分大小寫(xiě)。
如果不用標(biāo)號(hào),則第一個(gè)字母必須為空格、分號(hào)或星號(hào)。第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2023/2/312DSP原理及應(yīng)用2.助記符區(qū)助記符指令、匯編偽指令、宏指令和宏調(diào)用。助記符區(qū)不能從第一列開(kāi)始,否則被認(rèn)為是標(biāo)號(hào)。3.操作數(shù)區(qū)操作數(shù)區(qū)是一個(gè)操作數(shù)列表,可以是常數(shù)、符號(hào)或常數(shù)與符號(hào)構(gòu)成的表達(dá)式。操作數(shù)間需用“,”號(hào)隔開(kāi)。有的指令無(wú)操作數(shù)。第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2023/2/313DSP原理及應(yīng)用4.注釋區(qū)注釋用分號(hào)(;)標(biāo)注,可以從任何一列開(kāi)始,如果從第一列開(kāi)始也可用星號(hào)(*)標(biāo)注;可以包含ASCII字符和空格;是任選項(xiàng)。
常用的匯編偽指令(匯編命令)如表3-1。第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2023/2/314DSP原理及應(yīng)用表3-1常用匯編偽指令2023/2/315DSP原理及應(yīng)用補(bǔ)充:.def定義一個(gè)或多個(gè)符號(hào),可在別的模塊中使用;
.ref
標(biāo)識(shí)當(dāng)前模塊中使用的符號(hào)是在另一個(gè)模塊中定義的;
.global
可以是上面隨便哪一種情況;
.mmregs
將‘C54X各寄存器名定義為全局符號(hào),這樣可以無(wú)須再定義這些符號(hào),而直接引用寄存器;第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2023/2/316DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.3匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程示意圖匯編器調(diào)試程序鏈接器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件.cmd鏈接命令文件.lst列表文件.map存儲(chǔ)器映像文件十六進(jìn)制轉(zhuǎn)換程序HEX500-
o-
m-
l2023/2/317DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.3匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程1.
編輯
利用各種文本編輯器,如記事本、WORD、EDIT和TC等,可編寫(xiě)匯編語(yǔ)言源程序。
2.
匯編當(dāng)匯編語(yǔ)言源程序編寫(xiě)好以后,可利用C54x的匯編器ASM500,對(duì)一個(gè)或多個(gè)源程序分別進(jìn)行匯編,并生成列表文件(.lst)和目標(biāo)文件(.obj)。
2023/2/318DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.3匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程3.
鏈接所謂鏈接,就是利用C54x的鏈接器LNK500,根據(jù)鏈接器命令文件(.cmd)對(duì)已匯編過(guò)的一個(gè)或多個(gè)目標(biāo)文件(.obj)進(jìn)行鏈接,生成輸出文件(.out)和存儲(chǔ)器映像文件(.map)
。
2023/2/319DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4
COFF的一般概念匯編器和鏈接器生成的目標(biāo)文件,是一個(gè)可以由C54x器件執(zhí)行的文件。這些目標(biāo)文件的格式稱為公共目標(biāo)文件格式(COFF-CommonObjectFileFormat)。
在編寫(xiě)匯編語(yǔ)言程序時(shí),COFF采用代碼段和數(shù)據(jù)段的形式,以便于模塊化的編程,使編程和管理變得更加方便。這些代碼段和數(shù)據(jù)段簡(jiǎn)稱為段。匯編器和鏈接器提供一些偽指令來(lái)建立和管理各種各樣的段。
2023/2/320DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.1
COFF文件的基本單元
1.
段(sections)
是COFF文件中最重要的概念,一個(gè)段就是最終在存儲(chǔ)器中占據(jù)連續(xù)空間的一個(gè)數(shù)據(jù)或代碼塊。每個(gè)目標(biāo)文件都分成若干段,每一個(gè)段都是相互獨(dú)立的。
COFF目標(biāo)文件都包含以下3種形式的段:
.text
段(文本段),通常包含可執(zhí)行代碼;.data
段(數(shù)據(jù)段),通常包含初始化數(shù)據(jù);.bss
段(保留空間段),通常為未初始化變量保留存儲(chǔ)空間。2023/2/321DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.1
COFF文件的基本單元
2.
段的基本類型
COFF目標(biāo)文件中的段有兩種基本類型。
初始化段
未初始化段(1)
初始化段初始化段中包含有數(shù)據(jù)或程序代碼。主要有:
.text段——已初始化段;.data段——已初始化段;.sect段——已初始化段,由匯編器偽指令建立的自定義段。
2023/2/322DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.1
COFF文件的基本單元
(2)
未初始化段
在存儲(chǔ)空間中,為未初始化數(shù)據(jù)保留存儲(chǔ)空間。它包括:
.bss段——未初始化段;.usect段——未初始化段,由匯編命令建立的命名段(自定義段)。2023/2/323DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.
段與目標(biāo)存儲(chǔ)器的對(duì)應(yīng)關(guān)系目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器之間的關(guān)系
目標(biāo)文件目標(biāo)存儲(chǔ)器.bss.data.textRAME2PROMROM2023/2/324DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.2
匯編器對(duì)段的處理
匯編器對(duì)段的處理是通過(guò)段偽指令來(lái)區(qū)別各個(gè)段的,并將段名相同的語(yǔ)句匯編在一起。
匯編器有5條偽指令可識(shí)別匯編語(yǔ)言程序的各個(gè)部分:
●
.bss
●
.usect
●
.text
●
.data
●
.sect——定義未初始化段——定義未初始化段——定義已初始化段——定義已初始化段——定義已初始化段2023/2/325DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.2匯編器對(duì)段的處理
未初始化段就是在C54x存儲(chǔ)器中保留空間,通常它們被定位在RAM區(qū)。在目標(biāo)文件中,這些段中沒(méi)有確切的內(nèi)容。
由這些段定義的空間僅作為臨時(shí)存儲(chǔ)空間,在程序運(yùn)行時(shí),可以利用這些存儲(chǔ)空間存放變量。
未初始化段分為默認(rèn)的和命名的兩種,分別由匯編器偽指令.bss和.usect產(chǎn)生。
1.未初始化段
2023/2/326DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具(1).bss偽指令1.未初始化段
用于在bss段中保留若干個(gè)空間。
格式:.bss
符號(hào),字?jǐn)?shù)符號(hào)——保留的存儲(chǔ)空間第一個(gè)單元的符號(hào)地址??梢宰屍渌我?,也可以用.global命令定義為全局符號(hào)。
字?jǐn)?shù)——表示在bss段保留多少個(gè)存儲(chǔ)單元。2023/2/327DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.未初始化段
(2).usect偽指令
用于為指定的命名段保留若干個(gè)空間。
格式:符號(hào).usect
“段名”,字?jǐn)?shù)段名——程序員為未初始化的命名段定義的名字。2023/2/328DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.2匯編器對(duì)段的處理
已初始化段中包含有可執(zhí)行代碼或初始化數(shù)據(jù)。
已初始化段由.text、.data和.sect三個(gè)偽指令建立。句法為:2.
已初始化段
.text[段起點(diǎn)]
.data[段起點(diǎn)]
.sect“段名”[,段起點(diǎn)]2023/2/329DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.2匯編器對(duì)段的處理
命名段由用戶指定,與默認(rèn)的.text,.data和.bss段的使用相同,但它們被分開(kāi)匯編。
假如一部分可執(zhí)行代碼(例如初始化程序)不希望和.text段分配在一起,可將它們匯編進(jìn)一個(gè)命名段,這樣就可定位在與.text不同的地方。
可用.usect和.sect兩個(gè)偽指令產(chǎn)生命名段。3.
命名段(自定義段)2023/2/330DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.
命名段
產(chǎn)生命名段偽指令格式:符號(hào)
.usect“段名”,字?jǐn)?shù)
.sect“段名”
可以產(chǎn)生多達(dá)32767個(gè)不同的命名段。段名可長(zhǎng)達(dá)200個(gè)字符。
2023/2/331DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.2匯編器對(duì)段的處理
子段是較大段中的小段。子段結(jié)構(gòu)可用來(lái)對(duì)存儲(chǔ)器空間進(jìn)行更緊湊的控制,使存儲(chǔ)器空間分配更緊密。
4.
子段子段命名格式:基段名:子段名用.sect命令建立的段是已初始化的子段;用.usect命令建立的段是未初始化的子段。
例:
.sect“.text:_func”
2023/2/332DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.2匯編器對(duì)段的處理
匯編器為每個(gè)段都安排了一個(gè)單獨(dú)的程序計(jì)數(shù)器稱之為段程序計(jì)數(shù)器SPC。SPC表示一個(gè)代碼段或數(shù)據(jù)段內(nèi)當(dāng)前的地址。開(kāi)始時(shí)匯編器將每個(gè)SPC置0。當(dāng)匯編器將程序代碼或數(shù)據(jù)加到段內(nèi)時(shí),增加相應(yīng)的SPC值。若再繼續(xù)對(duì)某個(gè)段匯編,則相應(yīng)的SPC就在先前的數(shù)值上繼續(xù)增加。
5.
段程序計(jì)數(shù)器SPC2023/2/333DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.3
鏈接器對(duì)段的處理
鏈接器是對(duì)段處理時(shí)有2個(gè)主要任務(wù):
①
將一個(gè)或多個(gè)COFF目標(biāo)文件中的各種段作為鏈接器的輸入段,經(jīng)鏈接后產(chǎn)生一個(gè)可執(zhí)行的COFF輸出文件,并在該文件中建立各個(gè)輸出段;
②
為各個(gè)輸出段配置存儲(chǔ)器地址。
2023/2/334DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.3鏈接器對(duì)段的處理
鏈接器有2條偽指令支持上述任務(wù):
●
MEMORY偽指令——用來(lái)定義目標(biāo)系統(tǒng)的存儲(chǔ)器空間,包括對(duì)存儲(chǔ)器各部分命名,以及規(guī)定它們的起始地址和長(zhǎng)度。
●
SECTIONS偽指令——用來(lái)指定鏈接器將輸入段組合成輸出段的方式,以及定位輸出段在存儲(chǔ)器中的位置,也可用于指定子段。
若未使用偽指令,則鏈接器將使用默認(rèn)的方法將段放入存儲(chǔ)空間。
2023/2/335DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.默認(rèn)的存儲(chǔ)器分配
①將所有.text段組合在一起,形成一個(gè).text段,并分配到程序存儲(chǔ)器中;
②將多個(gè)目標(biāo)文件中的.data段組合在一起,分配到緊接著.text段的程序存儲(chǔ)空間中;
③將.bss段組合,配置到數(shù)據(jù)存儲(chǔ)器中;
④組合命名段。初始化的命名段按順序分配到緊隨.data段的程序存儲(chǔ)器,而未初始化命名段將被配置到緊隨.bss段的數(shù)據(jù)存儲(chǔ)器中。
2023/2/336DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具默認(rèn)的存儲(chǔ)器分配過(guò)程:File1.obj.text.data.bsstable_1(初始化的命名段)u_vars(未初始化的命名段)File2.obj.text.data.bsstable_1(初始化的命名段)u_vars(未初始化的命名段)FFT(初始化的命名段)程序存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器.text.text.text.data.data.data.bss.bss.bsstabletable_1table_1u_varsu_varsu_varsFFTFFT沒(méi)有使用沒(méi)有配置沒(méi)有配置沒(méi)有使用2023/2/337DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.3鏈接器對(duì)段的處理2.段放入存儲(chǔ)器空間
若不希望鏈接器將所有的.text段結(jié)合在一起形成單個(gè)的.text段,就不能采用默認(rèn)的方式。若不采用默認(rèn)的方式,通常需要建立一個(gè)鏈接器命令文件,在命令文件中用MEMORY和SECTIONS偽指令定義存儲(chǔ)器和配置段地址。
2023/2/338DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.4.4
程序裝入
鏈接器產(chǎn)生可執(zhí)行的COFF目標(biāo)文件。為了脫離計(jì)算機(jī)DSP系統(tǒng)能單獨(dú)運(yùn)行,該文件必須裝入目標(biāo)系統(tǒng)存儲(chǔ)器中。
可以采用以下方法裝入程序:
使用調(diào)試工具裝入程序’C54x的調(diào)試工具包括軟件模擬器,XDS仿真器和集成系統(tǒng)CCS。它們都具有內(nèi)部的裝入器,調(diào)用裝入器的LOAD命令,裝入器將程序復(fù)制到目標(biāo)系統(tǒng)的存儲(chǔ)器中。
采用Hex轉(zhuǎn)換工具裝入程序可以使用轉(zhuǎn)換工具Hex500,將可執(zhí)行COFF目標(biāo)文件轉(zhuǎn)換成幾種其他目標(biāo)格式文件,然后將轉(zhuǎn)換后的文件通過(guò)編程器將程序裝(燒)進(jìn)ROM或EPROM。
2023/2/339DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5匯編偽指令匯編偽指令是匯編語(yǔ)言程序的一個(gè)重要內(nèi)容。用于為程序提供數(shù)據(jù),并控制匯編程序如何匯編源程序。沒(méi)有機(jī)器指令與它對(duì)應(yīng),是不可執(zhí)行的語(yǔ)句。
●
將代碼和數(shù)據(jù)匯編進(jìn)指定的段●為未初始化的變量在存儲(chǔ)器中保留空間●控制清單文件是否產(chǎn)生
●初始化存儲(chǔ)器●匯編條件代碼塊
●定義全局變量●為匯編器指定從中可以獲得宏的庫(kù)●考察符號(hào)調(diào)試信息
匯編器偽指令可完成以下工作:
2023/2/340DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5匯編偽指令
偽指令和它所帶的參數(shù)必須書(shū)寫(xiě)在一行。在包含匯編偽指令的源程序中,偽指令可以帶有標(biāo)號(hào)和注釋。雖然標(biāo)號(hào)一般不作為偽指令語(yǔ)法的一部分列出,但是有些偽指令必須帶有標(biāo)號(hào),此時(shí),標(biāo)號(hào)將作為偽指令的一部分出現(xiàn)。
2023/2/341DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5匯編偽指令
’C54x匯編器共有64條匯編偽指令,根據(jù)它們的功能,可以將其分成8類:
⑴
對(duì)各種段進(jìn)行定義的偽指令
如.bss、.data、.sect、.text、.usect等。
⑵
對(duì)存儲(chǔ)器進(jìn)行初始化的偽指令
如.bes、.byte、.field、.float、.int、.log、.space、.string、.pstring、.xfloat、.xlong、.word等。
2023/2/342DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5匯編偽指令⑶
調(diào)整SPC的偽指令
如.align等。
⑷
對(duì)輸出列表文件格式化的偽指令
如.drlist、.drnolist等。
⑸
引用其他文件的偽指令
如copy、.def、.global、.include、.mlib、.ref等。
2023/2/343DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5匯編偽指令⑹
控制條件匯編的偽指令
如.break、.else、.elseif、.endif、.endloop、.if、.loop等。
⑺
在匯編時(shí)定義符號(hào)的偽指令
如.asg、.endstruct、.equ、.eval、.label、.set、.sruct等。
⑻執(zhí)行其他功能的偽指令
如.algebraic、.emsg、.end、.mmregs、.mmsg、.newblock、.sblock、.version、.vmsg等。2023/2/344DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5匯編偽指令1.定義段的偽指令
用于定義相應(yīng)的匯編語(yǔ)言程序段。
助記符及語(yǔ)法格式
說(shuō)明
.bsssymbol,sizeinwords[,blocking][,alignment]
為未初始化的數(shù)據(jù)保留存儲(chǔ)空間。
.text
指定.text后面的代碼為文本段,通常包含可執(zhí)行的代碼。
.data指定.data后面的代碼為數(shù)據(jù)段,通常包含初始化的數(shù)據(jù)。
.sect“sectionname”
定義初始化的命名段,可以包含可執(zhí)行代碼或數(shù)據(jù)。
symbol.usect“sectionname”,sizeinwords[,blocking][,alignmentflag]
為未初始化的命名段保留空間。類似.bss偽指令,但允許保留與.bss段不同的空間。
2023/2/345DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5.3
匯編偽指令2.常數(shù)初始化的偽指令
用于為當(dāng)前的段匯編常數(shù)值。助記符及語(yǔ)法格式
說(shuō)明
.bytevalue[,…,value]
初始化當(dāng)前段中的一個(gè)或多個(gè)連續(xù)字。將8位的值放入單元中。.fieldvalue[,sizeinbits]
初始化一個(gè)可變長(zhǎng)度的域。將單個(gè)值放入當(dāng)前字的指定位域中。
.floatvalue[,…,value]
初始化一個(gè)或多個(gè)IEEE的單精度(32位)浮點(diǎn)數(shù)。.xfloatvalue[,…,value]
初始化一個(gè)或多個(gè)IEEE的單精度(32位)浮點(diǎn)數(shù)。并將它保存在當(dāng)前段的兩個(gè)連續(xù)的字中。不自動(dòng)對(duì)準(zhǔn)最接近的長(zhǎng)字邊界。
2023/2/346DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具2.初始化常數(shù)的偽指令助記符及語(yǔ)法格式
說(shuō)明
.intvalue[,…,value]
初始化一個(gè)或多個(gè)無(wú)符號(hào)16位整數(shù)。.shortvalue[,…,value]初始化一個(gè)或多個(gè)16位整數(shù)。.wordvalue[,…,value]
初始化一個(gè)或多個(gè)帶符號(hào)16位整數(shù)。.doublevalue[,…,value]
初始化一個(gè)或多個(gè)雙精度(64位)浮點(diǎn)數(shù)。.longvalue[,…,value]初始化一個(gè)或多個(gè)32位整數(shù)。
.string“string[,…,“string”]”
初始化一個(gè)或多個(gè)字符串。2023/2/347DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具【例】比較.byte,.int,.long,.xlong,.float,.xfloat,.word和.string偽指令。
源程序:
.byte
0AAh,0BBh
.word
0CCCh
.xlong
0EEEEFFFh
.long
0EEEEFFFFh
.int
0DDDDh
.xfloat
1.99999
.float
1.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
00702023/2/348DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5匯編偽指令3.調(diào)準(zhǔn)段程序計(jì)數(shù)器的偽指令調(diào)準(zhǔn)段程序計(jì)數(shù)器的偽指令包括:.align偽指令和.even偽指令。助記符及語(yǔ)法格式
說(shuō)明
.align[sizeinwords]
用于將段程序計(jì)數(shù)器(SPC)對(duì)準(zhǔn)在1~128字的邊界。
.even
用于使SPC指到下一個(gè)字的邊界(偶字邊界)。
2023/2/349DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5
匯編偽指令4.格式化輸出清單文件的偽指令用于格式化輸出清單文件。助記符及語(yǔ)法格式
說(shuō)明
.drnolist用于抑制某些偽指令在清單文件中的出現(xiàn)。
.drlist允許.drnolist抑制的偽指令在清單文件中重新出現(xiàn)。
.fclist允許按源代碼在清單文件中列出條件為假的代碼塊。匯編器默認(rèn)狀態(tài)。
.fcnolist只列出實(shí)際匯編的條件為真的代碼塊。
.lengthpagelength調(diào)節(jié)清單文件輸出頁(yè)面的長(zhǎng)度??舍槍?duì)不同的輸出設(shè)備靈活調(diào)節(jié)輸出頁(yè)面的長(zhǎng)度。
.list允許匯編器將所選擇的源語(yǔ)句輸出到清單文件。2023/2/350DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具4.格式化輸出清單文件的偽指令助記符及語(yǔ)法格式
說(shuō)明
.nolist禁止匯編器將所選擇的源語(yǔ)句輸出到清單文件。
.mlist允許列出所有的宏擴(kuò)展和循環(huán)塊。.mnolist禁止列出所有的宏擴(kuò)展和循環(huán)塊。.option
{B│L│M│R│T│W│X}
用于控制清單文件的某些功能。.page把新頁(yè)列在輸出清單文件中。.sslist允許列出替代符號(hào)擴(kuò)展。.ssnolist禁止列出替代符號(hào)擴(kuò)展。.title“string”
在每頁(yè)的頂部打印文件標(biāo)題。.widthpagewidth調(diào)節(jié)清單文件頁(yè)面的寬度。2023/2/351DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5
匯編偽指令5.引用其他文件的偽指令該指令主要為引用其他文件提供信息。助記符及語(yǔ)法格式
說(shuō)明
.copy[”]filename[”]通知匯編器開(kāi)始從其他文件讀取源程序語(yǔ)句。.include[”]filename[”]通知匯編器開(kāi)始從其他文件讀取源程序語(yǔ)句。.defsymbil[,…,symbil]識(shí)別定義在當(dāng)前模塊中,但可被其他模塊使用的符號(hào)。.globalsymbil
[,…,symbil]聲明當(dāng)前符號(hào)為全局符號(hào)。對(duì)定義了的符號(hào),其作用相當(dāng)于.def;對(duì)沒(méi)有定義的符號(hào),其作用相當(dāng)于.ref。.refsymbil[,…,symbil]識(shí)別在當(dāng)前模塊中使用的,但在其他模塊中定義的符號(hào)。2023/2/352DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5
匯編偽指令6.條件匯編偽指令
用來(lái)通知匯編器按照表達(dá)式計(jì)算出的結(jié)果的真假,決定是否對(duì)某段代碼進(jìn)行匯編。
有兩組偽指令用于條件代碼塊的匯編:
(1).if/.elseif/.else/.endif偽指令
用于通知匯編器按照表達(dá)式的計(jì)算結(jié)果,對(duì)某段代碼塊進(jìn)行條件匯編。要求表達(dá)式和偽指令必須在同一行。
(2).loop/.break/.endloop偽指令
用于通知匯編器按照表達(dá)式的計(jì)算結(jié)果重復(fù)匯編一個(gè)代碼塊。要求表達(dá)式和偽指令必須在同一行。
2023/2/353DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具6.條件匯編偽指令助記符及語(yǔ)法格式
說(shuō)明
.ifwell-definedexpression標(biāo)記條件塊的開(kāi)始。僅當(dāng).if條件為真時(shí),對(duì)緊接著的代碼塊進(jìn)行匯編。.elseifwell-definedexpression
若.if條件為假,而.elseif條件為真時(shí),
對(duì)緊接著的代碼塊進(jìn)行匯編。
.elsewell-definedexpression
若.if條件為假,對(duì)緊接著的代碼塊進(jìn)行匯編。
.endif標(biāo)記條件代碼塊的結(jié)束,并終止該條件代碼塊。.loop[well-definedexpression]按照表達(dá)式確定的次數(shù)進(jìn)行重復(fù)匯編的代碼塊的開(kāi)始。表達(dá)式是循環(huán)的次數(shù)。.break[well-definedexpression]
若.break表達(dá)式為假,通知匯編器繼續(xù)重復(fù)匯編;而當(dāng)表達(dá)式為真時(shí),跳到緊接著.endloop后面的代碼。
.endloop
標(biāo)記代碼塊的結(jié)束。
2023/2/354DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5
匯編偽指令7.定義宏的偽指令常用的定義宏的偽指令:助記符及語(yǔ)法格式
說(shuō)明
macname.macro[parameter][,...parameter]modelstatementsormacrodirectives.endm定義宏
.endm中止宏
.varsym
[,sym2,...,sym]定義宏替代符號(hào)2023/2/355DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具7.定義宏的偽指令
宏指令與子程序一樣,都是重復(fù)執(zhí)行某一段程序,但兩者是有區(qū)別的,主要區(qū)別:
⑴宏指令和子程序都可以被多次調(diào)用,但是把子程序匯編成目標(biāo)代碼的過(guò)程只進(jìn)行一次,而在用到宏指令的每個(gè)地方都要對(duì)宏指令中的語(yǔ)句逐條地進(jìn)行匯編。
⑵
在調(diào)用前,由于子程序不使用參數(shù),故子程序所需要的寄存器等都必須事先設(shè)置好;而對(duì)于宏指令來(lái)說(shuō),由于可以使用參數(shù),調(diào)用時(shí)只要直接代入?yún)?shù)就行了。
2023/2/356DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具【例】宏定義、宏調(diào)用和宏展開(kāi)舉例
1*2*add34*5*ADDRP=P1+P2+P36
7add3.macroP1,P2,P3,ADDRP8
9LDP1,A10ADDP2,A11ADDP3,A12STLA,ADDRP13.endm14
第7~14行
定義宏:add3
4個(gè)參數(shù):P1P2P3ADDRP2023/2/357DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具【例】宏定義、宏調(diào)用和宏展開(kāi)舉例
15
16.globalabc,def,ghi,adr1718000000add3abc,def,ghi,adr
110000001000!LDabc,A10000010000!ADDdef,A10000020000!ADDghi,A10000038000!STLA,adr
第18行
調(diào)用宏:add3
所用變量:abcdefghiadr匯編時(shí)
將變量傳遞給參數(shù)abc
P1def
P2ghi
P3adr
ADDRP2023/2/358DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5
匯編偽指令8.匯編時(shí)定義符號(hào)的偽指令用于使符號(hào)名與常數(shù)值或字符串等價(jià)。助記符及語(yǔ)法格式
說(shuō)明
.asg[”]characterstring[”],substitutionsymbol
把一個(gè)字符串賦給一個(gè)替代符號(hào)。替代符號(hào)也可以重新被定義。
.evalwell-definedexpresion,substitutionsymbol計(jì)算一個(gè)表達(dá)式,將其結(jié)果轉(zhuǎn)換成字符,并將字符串賦給替代符號(hào)。.labelsymbol定義一個(gè)特殊的符號(hào),用來(lái)指向在當(dāng)前段裝載時(shí)的地址。
symbol.setvalue用于給符號(hào)賦值。符號(hào)被存放在符號(hào)表中,而且不能被重新定義。
2023/2/359DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具8.匯編時(shí)定義符號(hào)的偽指令助記符及語(yǔ)法格式
說(shuō)明
.struct
設(shè)置類似C語(yǔ)言的結(jié)構(gòu)體。
.tag偽指令把結(jié)構(gòu)體賦給一個(gè)標(biāo)號(hào)。
.endstruct
結(jié)束結(jié)構(gòu)體。.union建立類似C語(yǔ)言的union(聯(lián)合)定義
.endunion結(jié)束union(聯(lián)合)例:.asg AR0,INDEX_PN.set172023/2/360DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.5
匯編偽指令9.混合偽指令助記符及語(yǔ)法格式
說(shuō)明
.end
終止匯編,位于匯編語(yǔ)言源程序的最后一行。
.far_mode
通知匯編器調(diào)用為遠(yuǎn)調(diào)用。.mmregs
定義存儲(chǔ)器映像寄存器的符號(hào)名。
.newblock用于復(fù)位局部標(biāo)號(hào)。.version[value]確定運(yùn)行指令的處理器,每個(gè)’C54x器件都有一個(gè)與之對(duì)應(yīng)的值。.emsgstring把錯(cuò)誤消息送到標(biāo)準(zhǔn)的輸出設(shè)備。.mmsgstring把匯編時(shí)的消息送到標(biāo)準(zhǔn)的輸出設(shè)備。.wmsgstring把警告消息送到標(biāo)準(zhǔn)的輸出設(shè)備。2023/2/361DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.6
鏈接器命令文件的編寫(xiě)和使用
鏈接命令文件用來(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)成及存放位置。
2023/2/362DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.6.1鏈接器命令文件的編寫(xiě)與使用鏈接命令文件為ASCⅡ文件,可包含以下內(nèi)容:
(1)
輸入文件名,用來(lái)指定要鏈接的目標(biāo)文件。
(2)
鏈接器選項(xiàng),它們?cè)诿钗募械氖褂梅椒ㄅc在命令行中相同。
(3)
MEMORY和SECTIONS鏈接偽指令,用來(lái)指定目標(biāo)存儲(chǔ)器結(jié)構(gòu)和地址分配。
(4)
賦值說(shuō)明,用于給全局符號(hào)定義和賦值。2023/2/363DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具
【例】鏈接器命令文件舉例。
a.objb.obj/*輸入文件名*/
-lrts.lib/*指定庫(kù)文件的選項(xiàng)*/-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}
2023/2/364DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具注:在鏈接器命令文件中,不能采用下列符號(hào)作為段名或符號(hào)名:
alignDSECTlenorunALIGNflengthorgRUNattrfillLENGTHoriginSECTIONSATTRFILLloadORIGINspareblockgroupLOADpagetypeBLOCKGROUPMEMORYPAGETYPECOPYl(小寫(xiě)L)NOLOADrangeUNION2023/2/365DSP原理及應(yīng)用
MEMORY偽指令用來(lái)規(guī)定目標(biāo)存儲(chǔ)器的結(jié)構(gòu)。在實(shí)際的應(yīng)用中,目標(biāo)系統(tǒng)所配置的存儲(chǔ)器是各不相同的,通過(guò)MEMORY偽指令,可以進(jìn)行各種各樣的存儲(chǔ)器配置。第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.6.2MEMORY偽指令的使用MEMORY偽指令的句法:
MEMORY{PAGE0:name1[(attr)]:origin=constant,length=constant;PAGEn:namen[(attr)]:origin=constant,length=constant;}
偽指令存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句書(shū)寫(xiě)方式:①由大寫(xiě)MEMORY偽指令字開(kāi)始;
②由大括號(hào)括起存儲(chǔ)器區(qū)間的說(shuō)明。存儲(chǔ)區(qū)間:存儲(chǔ)頁(yè)面區(qū)間名稱區(qū)間屬性起始地址區(qū)間長(zhǎng)度2023/2/366DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.6.2MEMORY偽指令的使用存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
PAGE:
對(duì)存儲(chǔ)空間加以標(biāo)記,每一個(gè)PAGE代表一個(gè)完全獨(dú)立的地址空間。
通常,PAGE0定為程序存儲(chǔ)器;
PAGE1定為數(shù)據(jù)存儲(chǔ)器。
若沒(méi)有設(shè)定PAGE,則鏈接器默認(rèn)為PAGE0。2023/2/367DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.6.2MEMORY偽指令的使用存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
name:
存儲(chǔ)器區(qū)間名稱。可由用字母、$、.、_等組成。
存儲(chǔ)器區(qū)間為內(nèi)部記號(hào),不同PAGE上的存儲(chǔ)器區(qū)間可以取相同的名字;但在同一PAGE內(nèi)的名字不能相同,且不許重疊配置。
2023/2/368DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.6.2MEMORY偽指令的使用存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
attr:
為任選項(xiàng),用來(lái)為存儲(chǔ)器區(qū)間規(guī)定屬性。屬性選項(xiàng)共有4項(xiàng):
R
規(guī)定可以對(duì)存儲(chǔ)器執(zhí)行讀操作。
W規(guī)定可以對(duì)存儲(chǔ)器執(zhí)行寫(xiě)操作。
X
規(guī)定存儲(chǔ)器可以裝入可執(zhí)行的程序代碼。I規(guī)定可以對(duì)存儲(chǔ)器進(jìn)行初始化。任何一個(gè)沒(méi)有規(guī)定屬性的存儲(chǔ)器(包括所有默認(rèn)方式的存儲(chǔ)器)都有全部4項(xiàng)屬性。2023/2/369DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.6.2MEMORY偽指令的使用存儲(chǔ)區(qū)間說(shuō)明語(yǔ)句:
origin:用來(lái)指定存儲(chǔ)區(qū)間的起始地址,可簡(jiǎn)寫(xiě)為org或o。其值可以用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。
Length:
用來(lái)指定存儲(chǔ)器空間的長(zhǎng)度,可簡(jiǎn)寫(xiě)為len或l,其值以字為單位,可以用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。2023/2/370DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具【例】用MEMORY偽指令編寫(xiě)連接命令文件。要求:
程序存儲(chǔ)器:起始地址為C00h,長(zhǎng)為1000h,取名為PROG
數(shù)據(jù)存儲(chǔ)器:起始地址為60h,長(zhǎng)為20h,取名為DATA起始地址為80h,長(zhǎng)為200h,取名為CHIPfile1.objfiel2.obj-oProg.outMEMORY{
PAGE0:
PROG:origin=C00h,length=1000h
PAGE1:
DATA
:origin=60h,length=20h
CHIP:origin=80h,length=200h}
兩個(gè)輸入文件鏈接命令選項(xiàng)偽指令頁(yè)面名稱區(qū)間名稱起始地址區(qū)間長(zhǎng)度2023/2/371DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具【例】用MEMORY偽指令編寫(xiě)連接命令文件。file1.objfiel2.obj-oProg.outMEMORY{ PAGE0:
PROG:org=C00h,len=1000hPAGE1:
DATA:org=60h,len=20h
CHIP:org=80h,len=200h}
PAGE0:PROG:org=C00h,len=1000h程序存儲(chǔ)器00000h0FFFFh00C00h1000h01BFFhPROGPAGE1:
DATA:org=60h,len=20h數(shù)據(jù)存儲(chǔ)器00000h0FFFFh00060h0007Fh20hDATA
CHIP:org=80h,len=200h00080h200h0027FhCHIP2023/2/372DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具3.6.3SECTIONS偽指令的使用用來(lái)控制輸出段的構(gòu)成與地址分配。指令功能:
①說(shuō)明如何將輸入段組合成輸出段;
②
在可執(zhí)行程序中定義輸出段;③
規(guī)定輸出段在存儲(chǔ)器中的存放位置;④
允許重新命名輸出段。1.
SECTIONS偽指令語(yǔ)法
2023/2/373DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具SECTIONS偽指令的句法:
SECTIONS{name:[property,property,property,…]name:[property,property,property,…]name:[property,property,property,…]}
偽指令輸出段說(shuō)明語(yǔ)句
段名:定義輸出段的名稱。
屬性:定義該段的內(nèi)容和存儲(chǔ)器的分配。段名1.
SECTIONS偽指令語(yǔ)法屬性屬性屬性2023/2/374DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
SECTIONS偽指令語(yǔ)法段屬性用來(lái)定義輸出段的內(nèi)容和存儲(chǔ)地址的分配。包括的內(nèi)容如下:①裝入存儲(chǔ)器分配
②運(yùn)行存儲(chǔ)器分配③輸入段④
段的類型2023/2/375DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
SECTIONS偽指令語(yǔ)法①裝入存儲(chǔ)器分配
用于定義將輸出段加載到存儲(chǔ)器的什么位置。語(yǔ)法格式:load=allocation
或>allocation或allocationallocation:關(guān)于段地址的說(shuō)明,即給段分配的存儲(chǔ)單元。
2023/2/376DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
SECTIONS偽指令語(yǔ)法①裝入存儲(chǔ)器分配例如:
.text:load=0x1000.text:load>ROM.text:>0x80PAGE0.text:PAGE0
將.text段定位到地址0x1000開(kāi)始的單元
將.text段定位到命名為ROM的存儲(chǔ)區(qū)間
將.text段定位到地址0x80開(kāi)始的單元將.text段定位到PAGE02023/2/377DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
SECTIONS偽指令語(yǔ)法②運(yùn)行存儲(chǔ)器分配
用于定義輸出段在存儲(chǔ)器的什么位置上開(kāi)始運(yùn)行。語(yǔ)法格式:run=allocation
或
run>allocation
2023/2/378DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
SECTIONS偽指令語(yǔ)法鏈接器為段在目標(biāo)存儲(chǔ)器中分配兩個(gè)地址:
加載的地址和執(zhí)行程序的地址。通常,這兩個(gè)地址是相同的。
若要想把程序的加載區(qū)和運(yùn)行區(qū)分開(kāi),先將程序加載到ROM,然后在RAM中運(yùn)行,則在SECTIONS命令中讓鏈接器對(duì)這個(gè)段定位兩次即可。
例如:
.fir:load=ROM,run=RAM
2023/2/379DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(fā)工具1.
SECTIONS偽指令語(yǔ)法③輸入段用于定義組成輸出段的輸入段。語(yǔ)法格式:{input_sections}
大多數(shù)情況下,在SECTIONS命令中是不列出每個(gè)輸入文件的輸入段的段名。
例如:
SECTIONS{.text:.data:.bss
}鏈接時(shí):將所有輸入文件中的所有.text段鏈接成.text輸出段所有.data段鏈接成.data輸出段所有.bss段鏈接成.bss輸出段2023/2/380DSP原理及應(yīng)用第3章匯編語(yǔ)言程序開(kāi)發(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段*/
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建三支一扶考試熱搜試題及答案解析
- 一年級(jí)毒品教育
- 炭黑生產(chǎn)工(初級(jí))職業(yè)技能鑒定理論備考試題(附答案)
- 學(xué)生會(huì)的工作總結(jié)
- 畢業(yè)實(shí)習(xí)工作個(gè)人總結(jié)
- 統(tǒng)計(jì)半年度工作總結(jié)
- 財(cái)務(wù)上半年工作總結(jié)報(bào)告
- 2025福州企業(yè)勞動(dòng)合同
- 家庭裝修裝飾工程合同
- 2025年天津商品房預(yù)售合同
- 煤礦防滅火細(xì)則
- 超星爾雅學(xué)習(xí)通《紅色經(jīng)典影片與近現(xiàn)代中國(guó)發(fā)展》章節(jié)測(cè)試答案
- 小學(xué)道德與法治-圓明園的訴說(shuō)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 復(fù)式條形統(tǒng)計(jì)圖22
- GB/T 622-2006化學(xué)試劑鹽酸
- 周三多管理學(xué)精華重點(diǎn)
- GB/T 41097-2021非公路用旅游觀光車(chē)輛使用管理
- 常見(jiàn)急救知識(shí)培訓(xùn)課件
- 分離工程試習(xí)題庫(kù)-葉慶國(guó)
- 《了凡四訓(xùn)》課件
- Aspen-中文培訓(xùn)資料課件
評(píng)論
0/150
提交評(píng)論