TMS320C55x匯編語言編程精簡課件_第1頁
TMS320C55x匯編語言編程精簡課件_第2頁
TMS320C55x匯編語言編程精簡課件_第3頁
TMS320C55x匯編語言編程精簡課件_第4頁
TMS320C55x匯編語言編程精簡課件_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、TMS320C55x軟件開發(fā)流程TMS320C55x目標(biāo)文件格式TMS320C55x匯編器TMS320C55x匯編偽指令TMS320C55x匯編語言源文件的書寫格式TMS320C55x鏈接器第4章 TMS320C55x匯編語言編程第1頁,共59頁。4.1 TMS320C55x軟件開發(fā)流程軟件開發(fā)流程軟件開發(fā)工具第2頁,共59頁。編程語言匯編語言 編程過程復(fù)雜,但程序執(zhí)行效率高C/C+語言 編程容易,但程序執(zhí)行效率不如匯編語言軟件開發(fā)環(huán)境集成開發(fā)環(huán)境CCS(Code Composer Studio)非集成開發(fā)環(huán)境4.1.1 軟件開發(fā)流程第3頁,共59頁。圖4-1 非集成開發(fā)環(huán)境下C55x軟件開發(fā)

2、的流程圖 第4頁,共59頁。用戶采用C/C+語言或匯編語言編寫源文件(.c或.asm),經(jīng)C/C+編譯器、匯編器生成COFF格式的目標(biāo)文件(.obj),再用鏈接器進(jìn)行鏈接,生成在C55x上可執(zhí)行的目標(biāo)代碼(.out),然后利用調(diào)試工具(軟件仿真器simulator或硬件仿真器emulator)對(duì)可執(zhí)行的目標(biāo)代碼進(jìn)行仿真和調(diào)試。當(dāng)調(diào)試完成后,通過Hex代碼轉(zhuǎn)換工具,將調(diào)試后的可執(zhí)行目標(biāo)代碼(.out)轉(zhuǎn)換成EPROM編程器能接受的代碼(.hex),并將該代碼固化到EPROM中或加載到用戶的應(yīng)用系統(tǒng)中,以便DSP目標(biāo)系統(tǒng)脫離計(jì)算機(jī)單獨(dú)運(yùn)行。 非集成開發(fā)環(huán)境下軟件開發(fā)的流程圖 第5頁,共59頁。4.

3、1.2 軟件開發(fā)工具 代碼生成工具源代碼編輯器 采用匯編語言或C/C+語言編寫的源程序均為文本文件,可以在任何一種文本編輯器中進(jìn)行。如WORD、EDIT、TC、Windows操作系統(tǒng)自帶的筆記本等C/C+編譯器 用來將C/C+語言源程序(.C或.CPP)自動(dòng)編譯為C55x的匯編語言源程序(.asm)第6頁,共59頁。匯編器 用來將匯編語言源文件(.asm)匯編成機(jī)器語言COFF目標(biāo)文件(.obj)鏈接器 將匯編生成的、可重新定位的COFF目標(biāo)模塊(.obj)組合成一個(gè)可執(zhí)行的COFF目標(biāo)模塊(.out)文檔管理器 允許用戶將一組文件(源文件或目標(biāo)文件)集中為一個(gè)文檔文件庫 第7頁,共59頁。建

4、庫實(shí)用程序 用來建立用戶自己使用的、并用C/C+語言編寫的支持運(yùn)行的庫函數(shù)十六進(jìn)制轉(zhuǎn)換程序 可以很方便地將COFF目標(biāo)文件(.out)轉(zhuǎn)換成TI、Intel、Motorola等公司的目標(biāo)文件格式(.hex)絕對(duì)制表程序 將鏈接后的目標(biāo)文件作為輸入,生成.abs輸出文件 交叉引用制表程序 利用目標(biāo)文件生成一個(gè)交叉引用清單,列出鏈接的源文件中的符號(hào)以及它們的定義和引用情況第8頁,共59頁。代碼調(diào)試工具 軟件仿真器(Simulator) 是一種模擬DSP芯片各種功能并在非實(shí)時(shí)條件下進(jìn)行軟件調(diào)試的調(diào)試工具,它不需目標(biāo)硬件支持,只需在計(jì)算機(jī)上運(yùn)行硬件仿真器(Emulator:XDS510、560) 可用

5、來進(jìn)行系統(tǒng)級(jí)的集成調(diào)試,是進(jìn)行DSP芯片軟硬件開發(fā)的最佳工具第9頁,共59頁。4.2 TMS320C55x目標(biāo)文件格式COFF文件的基本單元段匯編器對(duì)段的處理鏈接器對(duì)段的處理鏈接器對(duì)程序的重新定位COFF文件中的符號(hào)第10頁,共59頁。通用目標(biāo)文件格式 COFF,common object file format段(section)是COFF文件的基本單元。一個(gè)段是一個(gè)占據(jù)存儲(chǔ)器里連續(xù)地址的代碼或者數(shù)據(jù)塊,COFF目標(biāo)文件的每個(gè)段都是分開和不同的COFF目標(biāo)文件通常包括3個(gè)默認(rèn)段,即.text段,通常包含可執(zhí)行代碼.data段,通常包含初始化數(shù)據(jù).bss段,通常為未初始化變量保留存儲(chǔ)空間4.2

6、.1 COFF文件的基本單元段第11頁,共59頁。一些匯編偽指令可將代碼和數(shù)據(jù)的各個(gè)部分與相應(yīng)的段相聯(lián)系圖4-2目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器的關(guān)系第12頁,共59頁。4.2.2 匯編器對(duì)段的處理匯編器通過段偽指令自動(dòng)識(shí)別各個(gè)段,并將段名相同的語句匯編在一起匯編器有5條偽指令可以識(shí)別匯編語言程序的各個(gè)不同段.text、.data、.sect創(chuàng)建初始化段.bss和.usect創(chuàng)建未初始化段.sect與.usect創(chuàng)建自定義段和子段第13頁,共59頁。1.未初始化段未初始化段占用處理器存儲(chǔ)空間,常常分配到RAM未初始化段在目標(biāo)文件里沒有實(shí)際內(nèi)容,僅僅用于保留存儲(chǔ)空間,當(dāng)程序在運(yùn)行時(shí)用這些空間來創(chuàng)建和存

7、儲(chǔ)變量匯編命令.bss和.usect用來創(chuàng)建未初始化數(shù)據(jù)區(qū)域 .bss symbol,size,blocking flag,alignment flag .usect symbol”section name”,size,blocking flag,alignment flagsize:為對(duì)應(yīng)段開辟的存儲(chǔ)空間大小,單位為字blocking flag:可選參數(shù)。如果賦予一個(gè)非零值給該參數(shù),匯編器會(huì)連續(xù)分配字節(jié)空間,這些區(qū)域不會(huì)超出一頁邊界,除非該段大于一頁(在這種情況下,目標(biāo)文件會(huì)在頁邊界開始)alignment flag: 可選參數(shù)。如果賦予一個(gè)非零值給該參數(shù),該段會(huì)在一個(gè)長字邊界開始symbo

8、l:指向.bss或者.usect指令創(chuàng)建的段的第一個(gè)字,對(duì)應(yīng)該存儲(chǔ)空間的變量名。可被其他段引用,被聲明為一個(gè)全局符號(hào)section name:段名第14頁,共59頁。每次使用.bss指令,匯編器就在對(duì)應(yīng)的段開辟更多的存儲(chǔ)空間每次使用.usect指令,匯編器就在指定的自定義段開辟更多的存儲(chǔ)空間.bss和.usect指令不結(jié)束當(dāng)前段的匯編去開始一個(gè)新的段,它們僅僅讓匯編器暫時(shí)退出當(dāng)前段的編輯.bss和.usect指令可以出現(xiàn)在一個(gè)初始化段的任何地方而不會(huì)影響該段的內(nèi)容第15頁,共59頁。2.初始化段初始化段包含可執(zhí)行代碼或者初始化數(shù)據(jù);當(dāng)程序被裝載時(shí),它們就被放到處理器存儲(chǔ)空間里每個(gè)初始化段獨(dú)立分

9、配空間,可以引用在其他段定義的標(biāo)識(shí)(symbol),鏈接器自動(dòng)處理這些段間引用定義初始化段的指令:.text value.data value .sect ”section name”,valuevalue表示段指針(SPC)的開始值,只可以指定一次,必須在段第一次出現(xiàn)時(shí)指定。默認(rèn)SPC從0開始。第16頁,共59頁。3.自定義段.usect 創(chuàng)建像.bss段那樣的段,這些段為變量在RAM開辟存儲(chǔ)空間。.sect創(chuàng)建像.text和.data段那樣包含代碼和數(shù)據(jù)的段,可以創(chuàng)建可重分配地址的自定義段。用戶可以創(chuàng)建多達(dá)32767個(gè)自定義段,段名可以多至200個(gè)字符。每次使用這兩個(gè)指令可以用不同的sec

10、tion name來創(chuàng)建不同的段,如果用一個(gè)已經(jīng)使用的section name,那么匯編器將代碼和數(shù)據(jù)都匯編到同一個(gè)段。第17頁,共59頁。4.子段 子段是更大的段中的較小的段,鏈接器可以像段一樣操作它 子段讓用戶可以更好的控制存儲(chǔ)器映射 可以使用.sect或者.usect指令來創(chuàng)建子段,格式為: section name:subsection name 同一個(gè)段中的子段可以獨(dú)自分配地址,也可以一起分配存儲(chǔ)空間例,在段.text中創(chuàng)建一個(gè)_func子段如下: .sect “text:_func” 用戶可以為其單獨(dú)分配地址,也可以和.text段的其他部分一起分配地址第18頁,共59頁。5.段指針

11、匯編器為每個(gè)段分配一個(gè)程序指針,這些程序指針稱為段指針(SPCs)一個(gè)SPC指向一個(gè)段的當(dāng)前地址初始時(shí),匯編器設(shè)置每個(gè)SPC為0當(dāng)匯編器在段中填充代碼和數(shù)據(jù)時(shí),SPC跟著增加如果重新開始匯編一個(gè)段,匯編器會(huì)記得該段SPC的原來值,并繼續(xù)增加SPC第19頁,共59頁。例4-1,段偽指令的使用。 這是一個(gè)匯編語言程序經(jīng)匯編后生成的.lst文件,每行包含4個(gè)區(qū)域:Field 1: 源代碼行號(hào)Field 2: 段指針Field 3: 目標(biāo)代碼Field 4: 初始源代碼第20頁,共59頁。第21頁,共59頁。第22頁,共59頁。第23頁,共59頁。這個(gè)例子創(chuàng)建了5個(gè)段:.text段:包含17字節(jié)目標(biāo)代

12、碼.data 段:包含7字的目標(biāo)代碼vectors段:.sect指令創(chuàng)建的自定義段,包含兩個(gè)字的初始化數(shù)據(jù).bss段:在存儲(chǔ)器占用10個(gè)字newvars段:.usect指令創(chuàng)建的自定義段,在存儲(chǔ)器中占用8個(gè)字圖4-3 例4-1產(chǎn)生的目標(biāo)代碼第24頁,共59頁。4.2.3 鏈接器對(duì)段的處理鏈接器對(duì)段的處理:將一個(gè)或多個(gè)COFF目標(biāo)文件(.obj)中的各種段作為鏈接器的輸入段,經(jīng)鏈接后在一個(gè)可執(zhí)行的COFF模塊(.out)中建立各個(gè)輸出段為各個(gè)輸出段選定存儲(chǔ)器地址鏈接器有2條偽指令支持上述任務(wù)(通常放在鏈接器命令文件(.cmd)中執(zhí)行,是命令文件的主要內(nèi)容) :MEMORYSECTIONS 如果在

13、鏈接時(shí)不使用MEMORY和SECTIONS指令,則鏈接器使用目的處理器的默認(rèn)分配算法; 有時(shí)用戶不想使用默認(rèn)設(shè)置,要自己進(jìn)行存儲(chǔ)器映射,就要使用MEMORY和SECTIONS等鏈接指令。第25頁,共59頁。圖4-4 兩個(gè)文件的鏈接過程第26頁,共59頁。4.2.4 鏈接器對(duì)程序的重新定位1. 地址重新定位匯編器對(duì)每個(gè)段匯編時(shí)都是從0地址開始,所有需要重新定位的符號(hào)(標(biāo)號(hào))在段內(nèi)都是相對(duì)于0地址的事實(shí)上所有段都不可能從存儲(chǔ)器中0地址單元開始,因此鏈接器必須對(duì)各個(gè)段進(jìn)行重新定位 重新定位的方法:將各個(gè)段配置到存儲(chǔ)器中,使每個(gè)段都有一個(gè)合適的起始地址將符號(hào)變量調(diào)整到相對(duì)于新的段地址的位置 將引用調(diào)整

14、到重新定位后的符號(hào),這些符號(hào)反映了調(diào)整后的新符號(hào)值 第27頁,共59頁。2.運(yùn)行時(shí)間重新定位在實(shí)際運(yùn)行中,有時(shí)需要將代碼裝入存儲(chǔ)器的一個(gè)地方,而在另一個(gè)地方運(yùn)行。如:一些關(guān)鍵的執(zhí)行代碼必須裝在系統(tǒng)的ROM中,但運(yùn)行時(shí)希望在較快的RAM中進(jìn)行。利用SECTIONS偽指令選項(xiàng)可讓鏈接器對(duì)其定位2次,方法如下:使用load關(guān)鍵字設(shè)置裝入地址使用run關(guān)鍵字設(shè)置它的運(yùn)行地址第28頁,共59頁。4.2.5 COFF文件中的符號(hào)COFF文件中有一個(gè)符號(hào)表,主要用來存儲(chǔ)程序中有關(guān)符號(hào)的信息 鏈接器在執(zhí)行程序定位時(shí),要使用符號(hào)表提供的信息,而調(diào)試工具也要使用該表來提供符號(hào)調(diào)試 第29頁,共59頁。1. 外部符

15、號(hào)在一個(gè)模塊中定義、而在另一個(gè)模塊中引用的符號(hào)可以用偽指令.def、.ref或.global來定義或引用 .def :定義符號(hào)。用來定義在當(dāng)前模塊中定義、可在別的模塊中引用的符號(hào).ref :引用符號(hào)。在當(dāng)前模塊中引用在別的模塊中定義的符號(hào).global:定義全局符號(hào)??梢允巧厦娴娜魏我环N情況第30頁,共59頁。例4-3,外部符號(hào)的使用。.def x ; 定義內(nèi)部符號(hào)x.ref y ; 引用外部符號(hào),y在其它文件中已定義x: ADD #86,AC0,AC1 ; 定義x B y ; 引用y第31頁,共59頁。2. 符號(hào)表每當(dāng)遇到一個(gè)外部符號(hào),無論是定義的還是引用的,匯編器都將在符號(hào)表中產(chǎn)生一個(gè)條目

16、匯編器還產(chǎn)生一個(gè)指到每段的專門符號(hào),鏈接器使用這些符號(hào)將其他引用符號(hào)重新定位 第32頁,共59頁。4.5 TMS320C55x匯編語言源文件的書寫格式匯編語言源文件格式匯編語言中的常數(shù)與字符串匯編源程序中的符號(hào)匯編源程序中的表達(dá)式內(nèi)建數(shù)學(xué)函數(shù) TMS320C55x匯編語言源程序由源語句組成。這些語句可以包含匯編語言指令、匯編偽指令和注釋。 程序的編寫必須符合一定的格式,以便匯編器將源文件轉(zhuǎn)換成機(jī)器語言的目標(biāo)文件。第33頁,共59頁。4.5.1 匯編語言源文件格式匯編語言程序以.asm為擴(kuò)展名一條語句占源程序的一行總長度可以是源文件編輯器格式允許的長度語句的執(zhí)行部分必須限制在200個(gè)字符以內(nèi)第3

17、4頁,共59頁。1. 源語句格式助記符指令源語句的每一行通常包含4個(gè)部分:標(biāo)號(hào)區(qū)、助記符區(qū)、操作數(shù)區(qū)和注釋區(qū)助記符指令語法格式: 標(biāo)號(hào) : 助記符 操作數(shù) ; 注釋例4-11,助記符指令源語句SYM1.set 2 ;SYM1 = 2Begin: MOV #SYM1,AR1;AR1=2.data.byte 016h; 初始化(016h)第35頁,共59頁。 語句的書寫規(guī)則:所有語句必須以標(biāo)號(hào)、空格、星號(hào)或分號(hào)(*或;)開始標(biāo)號(hào)是可選項(xiàng),若使用標(biāo)號(hào),則標(biāo)號(hào)必須從第一列開始 所有包含有匯編偽指令的語句必須在一行完成指定各部分之間必須用空格分開,Tab字符與空格等效注釋是可選項(xiàng)。如果注釋在第一列開始時(shí)

18、,前面必須標(biāo)上星號(hào)或分號(hào),在其他列開始的注釋前面必須以分號(hào)開頭 如果源程序很長,需要書寫若干行,可以在前一行用反斜杠字符()結(jié)束,余下部分接著在下一行繼續(xù)書寫第36頁,共59頁。2. 標(biāo)號(hào)所有匯編指令和大多數(shù)匯編偽指令都可以選用標(biāo)號(hào),供本程序或其它程序調(diào)用標(biāo)號(hào)必須從語句的第1列寫起,其后的冒號(hào)“:”可任選 標(biāo)號(hào)為任選項(xiàng),若不使用標(biāo)號(hào),則語句的第一列必須是空格、星號(hào)或分號(hào) 標(biāo)號(hào)是由字母、數(shù)字以及下劃線和美元符號(hào)等組成,最多可達(dá)32個(gè)字符標(biāo)號(hào)分大小寫,且第一個(gè)字符不能是數(shù)字在使用標(biāo)號(hào)時(shí),標(biāo)號(hào)的值是段程序計(jì)數(shù)器SPC的當(dāng)前值第37頁,共59頁。3.助記符 助記符用來表示指令所完成的操作,可以是匯編語

19、言指令、匯編偽指令、宏指令。助記符指令:一般用大寫,不能從第一列開始 匯編偽指令:用來為程序提供數(shù)據(jù)和控制匯編進(jìn)程,以句號(hào)“.”開始,且用小寫宏指令:用來定義一段程序,以便宏調(diào)用來調(diào)用這段程序,以句號(hào)“.”開始,且用小寫 宏調(diào)用:用來調(diào)用由宏偽指令定義的程序段第38頁,共59頁。4.操作數(shù) 操作數(shù)是指令中參與操作的數(shù)值或匯編偽指令定義的內(nèi)容,緊跟在助記符的后面,由一個(gè)或多個(gè)空格分開操作數(shù)之間必須用逗號(hào)“,”分隔 操作數(shù)可以是常數(shù)、符號(hào)或表達(dá)式 操作數(shù)中的常數(shù)、符號(hào)或表達(dá)式可用來作為地址、立即數(shù)或間接地址第39頁,共59頁。作為操作數(shù)的前綴有三種情況:使用“#”號(hào)作為前綴,匯編器將操作數(shù)作為立即

20、數(shù)處理使用“*”符號(hào)作為前綴,匯編器將操作數(shù)作為間接地址,即把操作數(shù)的內(nèi)容作為地址使用“” 符號(hào)作為操作數(shù)的前綴。匯編器將操作數(shù)作為直接地址,即操作數(shù)由直接地址碼賦值第40頁,共59頁。5.注釋 用來說明指令功能,便于用戶閱讀。注釋可位于句首或句尾,位于句首時(shí),以“*”或“;”開始,位于句尾時(shí),以分號(hào)“;”開始注釋可單獨(dú)一行或數(shù)行注釋是任選項(xiàng) 第41頁,共59頁。4.6 TMS320C55x鏈接器 鏈接器的運(yùn)行 鏈接器命令文件的編寫與使用 MEMORY指令 SECTIONS指令第42頁,共59頁。4.6.1 概述TMS320C55x鏈接器有兩個(gè)功能強(qiáng)大的指令,即MEMORY和SECTIONS。

21、MEMORY指令允許用戶定義一個(gè)目標(biāo)系統(tǒng)的存儲(chǔ)器映射,可以命名存儲(chǔ)器的各個(gè)部分,并且指定開始地址和大小。SECTIONS指令告訴鏈接器合成輸入段為輸出段,并且告訴鏈接器把這些輸出段放在存儲(chǔ)器的某個(gè)位置。第43頁,共59頁。4.6.2 鏈接器的運(yùn)行鍵入命令:lnk55 鍵入命令: lnk55 a.obj b.obj -o link.out鍵入命令:lnk55 linker.cmd 1、C55x鏈接器的三種運(yùn)行方法:鏈接器會(huì)提示如下信息: Command files:(要求鍵入一個(gè)或多個(gè)命令文件) Object files .obj:(要求鍵入一個(gè)或多個(gè)需要鏈接的目標(biāo)文件) Output File

22、s a.out:(要求鍵入一個(gè)鏈接器所生成的輸出文件名)Options:(要求附加一個(gè)鏈接選項(xiàng))在命令行中指定選項(xiàng)和文件名:目標(biāo)文件: a.obj、b.obj 命令選項(xiàng): -o輸出文件: link.outlinker.cmd: 鏈接命令文件。 在執(zhí)行上述命令之前,需將鏈接的目標(biāo)文件、鏈接命令選項(xiàng)以及存儲(chǔ)器配置要求等編寫到鏈接命令文件linker.cmd中第44頁,共59頁。例4-18,鏈接器命令文件舉例。 將兩個(gè)目標(biāo)文件a.obj和b.obj進(jìn)行鏈接,生成一個(gè)映像文件prog.map和一個(gè)可執(zhí)行的輸出文件prog.out。a.obj /* 第一個(gè)輸入文件 */b.obj /*第二個(gè)輸入文件*/

23、o prog.out /* 產(chǎn)生.out文件選項(xiàng) */m prog.map /*產(chǎn)生.map文件選項(xiàng) */第45頁,共59頁。2.鏈接命令選項(xiàng) 選 項(xiàng)含 義-a生成一個(gè)絕對(duì)地址的、可執(zhí)行的輸出模塊。如果既不用-a選項(xiàng),也不用-r選項(xiàng),鏈接器就像規(guī)定-a選項(xiàng)那樣處理。-ar生成一個(gè)可重新定位、可執(zhí)行的目標(biāo)模塊。這里采用了-a和-r兩個(gè)選項(xiàng)(可以分開寫成-a -r,也可以連在一起 寫作-ar),與-a選項(xiàng)相比,-ar選項(xiàng)還在輸出文件中保留有重新定位信息。-c使用TMS320C55x C/C+編譯器的ROM自動(dòng)初始化模型所定義的鏈接約定-cr使用TMS320C55x C/C+編譯器的RAM自動(dòng)初始化

24、模型所定義的鏈接約定-e global_symbol定義一個(gè)全局符號(hào),該符號(hào)指定輸出模塊的入口地址-f fill_vale對(duì)輸出模塊各段之間的空單元設(shè)置一個(gè)16位數(shù)值(fill_value),如果不用-f選項(xiàng),則這些空單元都置0。 -h使所有全局符號(hào)均為靜態(tài)的第46頁,共59頁。選 項(xiàng)含 義-help 或?顯示鏈接器所有命令行選項(xiàng)列表heap size設(shè)置存儲(chǔ)器heap塊的大小(用于C/C+程序中動(dòng)態(tài)存儲(chǔ)器分配),缺省值為2000字節(jié)-i dir更改搜索文檔庫算法,先到dir(目錄)中搜索。此選項(xiàng)必須出現(xiàn)在-l選項(xiàng)之前。 -l filename命名一個(gè)文檔庫文件作為鏈接器的輸入文件;filen

25、ame為文檔庫的某個(gè)文件名。此選項(xiàng)必須出現(xiàn)在-i選項(xiàng)之后。 -m filename生成一個(gè).map映像文件,filename是映像文件的文件名。.map文件中說明存儲(chǔ)器配置、輸入、輸出段布局以及外部符號(hào)重定位之后的地址等。 -o filename 對(duì)可執(zhí)行輸出模塊命名。如果默認(rèn),則此文件名為a.out。 -r生成一個(gè)可重新定位的輸出模塊。當(dāng)利用-r選項(xiàng)且不用 -a選項(xiàng)時(shí),鏈接器生成一個(gè)不可執(zhí)行的文件。 stack size設(shè)置主堆棧大小,缺省值為1000字節(jié)sysstack size設(shè)置次級(jí)堆棧大小,缺省值為1000字節(jié)第47頁,共59頁。在鏈接時(shí),連接器通過鏈接命令選項(xiàng)控制鏈接操作。鏈接命令

26、選項(xiàng)可以放在命令行或命令文件中,所有選項(xiàng)前面必須加一短劃線“-”。除-l和-i選項(xiàng)外,其他選項(xiàng)的先后順序并不重要。選項(xiàng)之間可以用空格分開。最常用選項(xiàng)為-m和-o,分別表示輸出的地址分配表映像文件名和輸出可執(zhí)行文件名。第48頁,共59頁。4.6.3 鏈接器命令文件的編寫與使用鏈接命令文件用來為鏈接器提供鏈接信息,可將鏈接操作所需的信息放在一個(gè)文件中,這在多次使用同樣的鏈接信息時(shí),可以方便地調(diào)用在鏈接命令文件中,可使用MEMORY和SECTIONS偽指令,為實(shí)際應(yīng)用指定存儲(chǔ)器結(jié)構(gòu)和地址的映射MEMORY:用來指定目標(biāo)存儲(chǔ)器結(jié)構(gòu)SECTIONS:用來控制段的構(gòu)成與地址分配 第49頁,共59頁。鏈接命

27、令文件為ASC文件,可包含以下內(nèi)容:輸入文件名,用來指定目標(biāo)文件、存檔庫或其他命令文件鏈接器選項(xiàng),它們?cè)诿钗募械氖褂梅椒ㄅc在命令行中相同鏈接偽指令MEMORY和SECTIONS,用來指定目標(biāo)存儲(chǔ)器結(jié)構(gòu)和地址分配賦值說明,用于給全局符號(hào)定義和賦值第50頁,共59頁。4.6.4 MEMORY指令MEMORY PAGE 0: name_1(attr):origin=constant,length=constant; PAGE n: name_n(attr):origin=constant,length=constant;PAGE: 用于識(shí)別一個(gè)存儲(chǔ)空間,可以使用多達(dá)255個(gè)頁,具體決定于配置情況

28、。 通常頁0對(duì)應(yīng)程序存儲(chǔ)空間,頁1對(duì)應(yīng)存儲(chǔ)器空間。每個(gè)頁面表現(xiàn)為一個(gè)完全獨(dú)立的地址空間。頁0上的已配置空間和頁1上的已配置空間可以交疊。Name:命名一個(gè)存儲(chǔ)空間范圍。名字可以是一到任意個(gè)字符,合法字符包括大小寫26個(gè)字母、$和_。存儲(chǔ)空間名字僅對(duì)鏈接器有用,在輸出文件或者符號(hào)里不再保留。在不同頁的存儲(chǔ)空間范圍可以有相同的名字,但在一頁內(nèi)不允許不同空間段有相同名字和交疊。Attr: 指定與命名的存儲(chǔ)空間范圍相聯(lián)系的14個(gè)屬性,使用時(shí)必須放在小括號(hào)里。 屬性限制輸出段在存儲(chǔ)空間的分配。如果不使用任何屬性,可以把輸出段分配到任何存儲(chǔ)空間范圍合法的屬性包括: R:表示該存儲(chǔ)空間可讀 W:表示該存儲(chǔ)空

29、間可寫 X:表示該存儲(chǔ)空間可以包含可執(zhí)行代碼 I:表示該存儲(chǔ)空間可以初始化Origin: 指定存儲(chǔ)段的開始地址。 值為24位常數(shù),可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制,單位為字節(jié),也可以寫為org或者oLength: 指定存儲(chǔ)段的長度 值為24位常數(shù),可以是十進(jìn)制、八進(jìn)制或者十六進(jìn)制,單位為字節(jié),也可以寫len或者l第51頁,共59頁。4.6.5 SECTIONS指令SECTIONS name_1:property, property, property name_2:property, property, property name_3:property, property, property 以

30、name開始的一行定義了一個(gè)輸出段。段名name后是屬性列表,這些屬性定義了段的內(nèi)容和段如何分配到存儲(chǔ)器。 第52頁,共59頁。 一個(gè)段可能的屬性包括:Load allocation 定義在存儲(chǔ)器中段被裝載的位置: load=allocation 或 allocation 或 allocationRun allocation 定義在存儲(chǔ)器中段運(yùn)行的位置: run=allocation 或run allocationInput sections 定義組成輸出段的輸入段: 句法為 input_sectionsSection type定義特殊種類段的標(biāo)志: 句法為 type=COPY 或 type=DSECT 或 type=NOLOADFill value定義用來填充未初始化空間的值: 句法為fill=value或Name:=value第53頁,共59頁。例4-19,鏈接器的使用。a.obj b.obj /*輸入文件 */-o prog.out /* 用-o參數(shù)指定輸出文件名 */SECTIONS .text: load =ROM, run=800h .const: load=ROM .bss : load=RAM .vectors: load=FF80h .data: al

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論