第4章TMS320C55x匯編語(yǔ)言_第1頁(yè)
第4章TMS320C55x匯編語(yǔ)言_第2頁(yè)
第4章TMS320C55x匯編語(yǔ)言_第3頁(yè)
第4章TMS320C55x匯編語(yǔ)言_第4頁(yè)
第4章TMS320C55x匯編語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章

TMS320C55x匯編語(yǔ)言編程4.1TMS320C55x軟件開發(fā)流程編程語(yǔ)言匯編語(yǔ)言

編程過(guò)程復(fù)雜,但程序執(zhí)行效率高軟件開發(fā)環(huán)境集成開發(fā)環(huán)境CCS(CodeComposerStudio)非集成開發(fā)環(huán)境C/C++語(yǔ)言

編程容易,但程序執(zhí)行效率不如匯編語(yǔ)言用戶采用C/C++語(yǔ)言或匯編語(yǔ)言編寫源文件(.c或.asm)利用調(diào)試工具(軟件仿真器simulator或硬件仿真器emulator)對(duì)可執(zhí)行的目標(biāo)代碼進(jìn)行仿真和調(diào)試。用鏈接器進(jìn)行鏈接,生成在C55x上可執(zhí)行的目標(biāo)代碼(.out)經(jīng)C/C++編譯器、匯編器生成COFF格式的目標(biāo)文件(.obj),軟件開發(fā)的流程代碼調(diào)試工具

軟件仿真器(Simulator)是一種模擬DSP芯片各種功能并在非實(shí)時(shí)條件下進(jìn)行軟件調(diào)試的調(diào)試工具,它不需目標(biāo)硬件支持,只需在計(jì)算機(jī)上運(yùn)行硬件仿真器(XDS510)可用來(lái)進(jìn)行系統(tǒng)級(jí)的集成調(diào)試,是進(jìn)行DSP芯片軟硬件開發(fā)的最佳工具4.2TMS320C55x目標(biāo)文件格式COFF文件的基本單元—段匯編器對(duì)段的處理鏈接器對(duì)段的處理通用目標(biāo)文件格式COFF,commonobjectfileformat段(section)是COFF文件的基本單元。4.2.1COFF文件的基本單元—段

COFF目標(biāo)文件通常包括3個(gè)默認(rèn)段.text段,通常包含可執(zhí)行代碼.data段,通常包含初始化數(shù)據(jù).bss段,通常為未初始化變量保留存儲(chǔ)空間一個(gè)段是一個(gè)占據(jù)存儲(chǔ)器里連續(xù)地址的代碼或者數(shù)據(jù)塊,COFF目標(biāo)文件的每個(gè)段都是分開和不同的一些匯編偽指令可將代碼和數(shù)據(jù)的各個(gè)部分與相應(yīng)的段相聯(lián)系圖4-1目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器的關(guān)系可以更有效地利用存儲(chǔ)器,用戶可以將任何段放到存儲(chǔ)器的任何存儲(chǔ)塊上*主程序

.bssbuffer8

.datacoeff.word011h,022h,033h

.text.globalstartstart;填寫程序內(nèi)容

endnop Bend*命令文件MEMORY{ DARAM:o=000100h,l=8000h SARAM:o=010000h,l=8000h}SECTIONS{ .data:{}>DARAM .text:{}>SARAM .bss:{}>SARAM}4.2.2匯編器對(duì)段的處理匯編器通過(guò)段偽指令自動(dòng)識(shí)別各個(gè)段,并將段名相同的語(yǔ)句匯編在一起匯編器有5條偽指令可以識(shí)別匯編語(yǔ)言程序的各個(gè)不同段.text、.data、.sect創(chuàng)建初始化段.bss和.usect創(chuàng)建未初始化段.sect與.usect創(chuàng)建自定義段和子段1.未初始化段未初始化段占用處理器存儲(chǔ)空間,常常分配到RAM未初始化段在目標(biāo)文件里沒(méi)有實(shí)際內(nèi)容,僅僅用于保留存儲(chǔ)空間,當(dāng)程序在運(yùn)行時(shí)用這些空間來(lái)創(chuàng)建和存儲(chǔ)變量匯編命令.bss和.usect用來(lái)創(chuàng)建未初始化數(shù)據(jù)區(qū)域.bsssymbol,size[,[blockingflag][,alignmentflag]]symbol.usect“sectionname”,size[,[blockingflag][,alignmentflag]]symbol:指向.bss指令創(chuàng)建的段的第一個(gè)字,對(duì)應(yīng)該存儲(chǔ)空間的變量名??杀黄渌我?,被聲明為一個(gè)全局符號(hào)size:為對(duì)應(yīng)段開辟的存儲(chǔ)空間大小,單位為字blockingflag:可選參數(shù)。如果賦予一個(gè)非零值給該參數(shù),匯編器會(huì)連續(xù)分配字節(jié)空間,這些區(qū)域不會(huì)超出一頁(yè)邊界,alignmentflag:可選參數(shù)。如果賦予一個(gè)非零值給該參數(shù),該段會(huì)在一個(gè)長(zhǎng)字邊界開始sectionname:段名每次使用.bss指令,匯編器就在對(duì)應(yīng)的段開辟更多的存儲(chǔ)空間例1.bssbuffer,10var2.usect“newvars”,1每次使用.usect指令,匯編器就在指定的自定義段開辟更多的存儲(chǔ)空間2.初始化段初始化段包含可執(zhí)行代碼或者初始化數(shù)據(jù);當(dāng)程序被裝載時(shí),它們就被放到處理器存儲(chǔ)空間里每個(gè)初始化段獨(dú)立分配空間,可以引用在其他段定義的標(biāo)識(shí)(symbol),鏈接器自動(dòng)處理這些段間引用定義初始化段的指令:.text.data

.sect”sectionname”[,value]3.自定義段.usect

創(chuàng)建像.bss段那樣的段,這些段為變量在RAM開辟存儲(chǔ)空間。

.sect創(chuàng)建像.text和.data段那樣包含代碼和數(shù)據(jù)的段,可以創(chuàng)建可重分配地址的自定義段。用戶可以創(chuàng)建多達(dá)32767個(gè)自定義段,段名多至200個(gè)字符。每次使用這兩個(gè)指令可以用不同的sectionname來(lái)創(chuàng)建不同的段,如果用一個(gè)已經(jīng)使用的sectionname,那么匯編器將代碼和數(shù)據(jù)都匯編到同一個(gè)段。4.子段

子段是更大的段中的較小的段,鏈接器可以像段一樣操作它例,在段.text中創(chuàng)建一個(gè)_func子段如下:.sect“text:_func”子段讓用戶可以更好的控制存儲(chǔ)器映射可以使用.sect或者.usect指令來(lái)創(chuàng)建子段,格式為:

sectionname:subsectionname用戶可以為其單獨(dú)分配地址,也可以和.text段的其他部分一起分配地址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如果在鏈接時(shí)不使用MEMORY和SECTIONS指令,則鏈接器使用目的處理器的默認(rèn)分配算法;

有時(shí)用戶不想使用默認(rèn)設(shè)置,要自己進(jìn)行存儲(chǔ)器映射,就要使用MEMORY和SECTIONS等鏈接指令。圖4-2兩個(gè)文件的鏈接過(guò)程4.3TMS320C55x匯編偽指令?偽指令用于處理匯編和連接過(guò)程,是匯編語(yǔ)言源程序的重要組成部分,但是最后產(chǎn)生的目標(biāo)文件不包括它們。

偽指令

宏指令4.3.1匯編偽指令匯編偽指令為程序提供數(shù)據(jù)和匯編過(guò)程的控制,功能有:匯編偽指令和它的參數(shù)必須書寫在一行中,可以帶有標(biāo)號(hào)和注釋把代碼和數(shù)據(jù)匯編到指定的段在存儲(chǔ)區(qū)為非初始化變量保留存儲(chǔ)空間控制列表文件的內(nèi)容初始化存儲(chǔ)器聲明全局變量指定程序要調(diào)用宏指令的宏指令庫(kù)檢查符號(hào)調(diào)試信息表4-1定義段的匯編偽指令指令格式說(shuō)明.bsssymbol,size[,blocking][,alignment]定義一個(gè).bss段,段長(zhǎng)度size的單位為字.clink[“sectionname”]當(dāng)前段或者指定段使能有條件連接.data定義一個(gè).data段.sect“sectionname”定義一個(gè)自定義段.text定義一個(gè).text段symbol.usect“sectionname”,size[,blocking][,alignment]定義一個(gè)自定義段,段長(zhǎng)度size的單位為字表4-2初始化常數(shù)(數(shù)據(jù)和存儲(chǔ)器)偽指令(1)指令格式說(shuō)明.bytevalue_l[,…,value_n]當(dāng)前段初始化一個(gè)或者多個(gè)連續(xù)的字節(jié)或字.charvalue_l[,…,value_n].doublevalue_l[,…,value_n]初始化一個(gè)或者多個(gè)64位,IEEE雙精度浮點(diǎn)常數(shù).Idoublevalue_l[,…,value_n].fieldvalue[,size]初始化一個(gè)變量長(zhǎng)度的域.floatvalue_l[,…,value_n]初始化一個(gè)或者多個(gè)32位,IEEE單精度浮點(diǎn)常數(shù).halfvalue_l[,…,value_n]初始化一個(gè)或多個(gè)16位整數(shù).shortvalue_l[,…,value_n]初始化一個(gè)或多個(gè)16位整數(shù).intvalue_l[,…,value_n]初始化一個(gè)或多個(gè)16位整數(shù).longvalue_l[,…,value_n]初始化一個(gè)或多個(gè)32位整數(shù).pstring“string_1”[,…,“string_n”]初始化一個(gè)或多個(gè)文本字符串(打包)表4-2初始化常數(shù)(數(shù)據(jù)和存儲(chǔ)器)偽指令(2)指令格式說(shuō)明.spacesize在當(dāng)前段保留存儲(chǔ)空間,size的單位為位.string“string_1”[,…,“string_n”]初始化一個(gè)或多個(gè)文本字符串.ubytevalue_l[,…,value_n]初始化當(dāng)前段的連續(xù)字節(jié)或字.ucharvalue_l[,…,value_n].uhalfvalue_l[,…,value_n]初始化一個(gè)或多個(gè)無(wú)符號(hào)16位整數(shù).ushortvalue_l[,…,value_n].uintvalue_l[,…,value_n]初始化一個(gè)或多個(gè)無(wú)符號(hào)16位整數(shù).ulongvalue_l[,…,value_n]初始化一個(gè)或多個(gè)無(wú)符號(hào)32位整數(shù).uwordvalue_l[,…,value_n]初始化一個(gè)或多個(gè)無(wú)符號(hào)16位整數(shù).wordvalue_l[,…,value_n]初始化一個(gè)或多個(gè)16位整數(shù).xfloatvalue_l[,…,value_n]初始化一個(gè)或多個(gè)32位,IEEE單精度浮點(diǎn)常數(shù),但是在長(zhǎng)字邊界不對(duì)齊.xlongvalue_l[,…,value_n]初始化一個(gè)或多個(gè)32位整數(shù),但是在長(zhǎng)字邊界不對(duì)齊表4-3引用其他文件的指令指令格式說(shuō)明.copy[“]filename[”]從其他文件引用源代碼.defsymbol_1[,…,symbol_n]指定在當(dāng)前模塊定義并且可能在其他模塊使用的一個(gè)或多個(gè)符號(hào).globalsymbol_1[,…,symbol_n]指定一個(gè)或多個(gè)全局(外部)符號(hào).include[“]filename[”]從其他文件引用源代碼.refsymbol_1[,…,symbol_n]指定在當(dāng)前模塊使用并且可能在其他模塊定義的一個(gè)或多個(gè)符號(hào)4.3.2宏指令宏指令的作用主要是:定義自己的宏指令和重新定義已存在的宏指令簡(jiǎn)化長(zhǎng)的或者復(fù)雜的匯編代碼訪問(wèn)指令庫(kù)在一個(gè)宏里定義有條件和可重復(fù)塊在一個(gè)宏里操作字符串控制擴(kuò)展列表1.使用宏指令程序里常常包含執(zhí)行多次的程序段,可以定義一個(gè)宏來(lái)代替它,而不必重復(fù)寫代碼,在需要該程序段時(shí)只需引用宏如果需要多次引用一個(gè)宏,但是每次都有不同的數(shù)據(jù),可以在

宏里使用參數(shù),每次使用時(shí)賦予參數(shù)不同值即可使用宏的步驟:定義宏引用宏指令擴(kuò)展宏指令2.定義宏可以在程序的任何位置定義宏必須在使用前定義可以在源文件的開始,在.include/.copy文件或者在一個(gè)宏指令庫(kù)里定義一個(gè)宏宏定義可以嵌套??梢栽诙x里引用其他的宏,但是這些宏都必須和當(dāng)前定義的宏在同一個(gè)文件里

宏定義的格式宏名 .macro[參數(shù)1][,…,參數(shù)n] 指令或者匯編指令;即宏的內(nèi)容 [.mexit] .endm宏名必須放在聲明的最開始處(即所謂的標(biāo)簽域labelfield),如果超出32個(gè)字符,那么僅僅前32個(gè)字符有效。.macro

:宏定義偽指令,必須放在操作符位置[.mexit]:相當(dāng)于一條goto.endm語(yǔ)句,當(dāng)出錯(cuò)檢測(cè)證實(shí)宏擴(kuò)展會(huì)出錯(cuò)時(shí)有用.endm:結(jié)束宏定義偽指令例4-2,宏的定義和引用。1 * add32 * ADDRP=P1+P2+P33 * 4 * macrodefinition宏定義*5add3 .macroP1,P2,P3,ADDRP6 MOVP1,AC07 ADDP2,AC0,AC08 ADDP3,AC0,AC09 MOVAC0,ADDRP10 .endm11 12 .globalabc,def,ghi,adr13 14 * macrocall*15 add3abc,def,ghi,adr;調(diào)用宏163.其他宏指令指令格式說(shuō)明.var替換符號(hào)l…[替換符號(hào)n]定義局部宏符號(hào).if表達(dá)式條件匯編開始.esleif表達(dá)式可選條件匯編塊.else可選條件匯編塊.endif結(jié)束條件匯編.loop[表達(dá)式]循環(huán)塊的開始.break[表達(dá)式]當(dāng)滿足條件則跳出循環(huán).endloop結(jié)束循環(huán).emsg發(fā)送出錯(cuò)信息到標(biāo)準(zhǔn)輸出.wmsg發(fā)送警告信息到標(biāo)準(zhǔn)輸出.fclist允許出錯(cuò)條件代碼塊列表出來(lái)(缺?。?fcnolist禁止出錯(cuò)條件代碼列表出來(lái).mlist允許宏指令列表出來(lái)(缺?。?mnolist禁止宏指令列表出來(lái).sslist允許擴(kuò)展替換符號(hào)列表出來(lái).ssnolist禁止擴(kuò)展替換符號(hào)列表出來(lái)(缺?。?.4C55x匯編語(yǔ)言源文件的書寫格式

TMS320C55x匯編語(yǔ)言源程序由源語(yǔ)句組成。這些語(yǔ)句可以包含匯編語(yǔ)言指令、匯編偽指令和注釋。匯編語(yǔ)言程序以.asm為擴(kuò)展名程序的編寫必須符合一定的格式,以便匯編器將源文件轉(zhuǎn)換成機(jī)器語(yǔ)言的目標(biāo)文件。一條語(yǔ)句占源程序的一行總長(zhǎng)度可以是源文件編輯器格式允許的長(zhǎng)度語(yǔ)句的執(zhí)行部分必須限制在200個(gè)字符以內(nèi)匯編程序

→目標(biāo)代碼→鏈接器→可執(zhí)行程序1.源語(yǔ)句格式源語(yǔ)句的每一行通常包含4個(gè)部分:

標(biāo)號(hào)區(qū)、助記符區(qū)、操作數(shù)區(qū)和注釋區(qū)指令語(yǔ)法格式:

[標(biāo)號(hào)][:]助記符[操作數(shù)][;注釋]例4-3,助記符指令源語(yǔ)句SYM1 .set2 ;SYM1=2Begin: MOV#SYM1,AR1 ;AR1=2 .data .byte016h ;初始化(016h)語(yǔ)句的書寫規(guī)則:所有語(yǔ)句必須以標(biāo)號(hào)、空格、星號(hào)或分號(hào)(*或;)開始如果源程序很長(zhǎng),需要書寫若干行,可以在前一行用反斜杠字符(\)結(jié)束,余下部分接著在下一行繼續(xù)書寫

注釋是可選項(xiàng)。如果注釋在第一列開始時(shí),前面必須標(biāo)上星號(hào)或分號(hào),在其他列開始的注釋前面必須以分號(hào)開頭各部分之間必須用空格分開,Tab字符與空格等效所有包含有匯編偽指令的語(yǔ)句必須在一行完成指定標(biāo)號(hào)是可選項(xiàng),若使用標(biāo)號(hào),則標(biāo)號(hào)必須從第一列開始2.標(biāo)號(hào)

所有匯編指令和大多數(shù)匯編偽指令都可以選用標(biāo)號(hào),供本程序或其它程序調(diào)用標(biāo)號(hào)必須從語(yǔ)句的第1列寫起,其后的冒號(hào)“:”可任選

標(biāo)號(hào)為任選項(xiàng),若不用標(biāo)號(hào),則語(yǔ)句的第一列必須是空格、星號(hào)或分號(hào)標(biāo)號(hào)是由字母、數(shù)字以及下劃線和$等組成,最多可32個(gè)字符標(biāo)號(hào)分大小寫,且第一個(gè)字符不能是數(shù)字SYM1 .set2 Begin:MOV#SYM1,AR1MOV#SYM1,AR2 3.助記符助記符用來(lái)表示指令所完成的操作,可以是匯編語(yǔ)言指令、匯編偽指令、宏指令。助記符指令:一般用大寫,不能從第一列開始匯編偽指令:用來(lái)為程序提供數(shù)據(jù)和控制匯編進(jìn)程,

以句號(hào)“.”開始,且用小寫宏指令:用來(lái)定義一段程序,以便宏調(diào)用來(lái)調(diào)用這段程序,

以句號(hào)“.”開始,且用小寫宏調(diào)用:用來(lái)調(diào)用由宏偽指令定義的程序段SYM1 .set2 Begin:MOV#SYM1,AR1

MOVSYM1,AR2 4.操作數(shù)操作數(shù)是指令中參與操作的數(shù)值或匯編偽指令定義的內(nèi)容,緊跟在助記符的后面,由一個(gè)或多個(gè)空格分開操作數(shù)之間必須用逗號(hào)“,”分隔

操作數(shù)可以是常數(shù)、符號(hào)或表達(dá)式

操作數(shù)中的常數(shù)、符號(hào)或表達(dá)式可用來(lái)作為地址、立即數(shù)或間接地址SYM1 .set2

Begin:MOV#SYM1,AR1MOV#2,AR2

作為操作數(shù)的前綴有三種情況:使用“#”號(hào)作為前綴,匯編器將操作數(shù)作為立即數(shù)處理使用“*”符號(hào)作為前綴,匯編器將操作數(shù)作為間接地址,即把操作數(shù)的內(nèi)容作為地址使用“@”符號(hào)作為操作數(shù)的前綴。匯編器將操作數(shù)作為直接地址,即操作數(shù)由直接地址碼賦值MOV#1022h,AR1MOV@10h,AR1XDP=1012hMOV*AR1,AC15.注釋用來(lái)說(shuō)明指令功能,便于用戶閱讀。注釋可位于句首或句尾,位于句首時(shí),以“*”或“;”開始,位于句尾時(shí),以分號(hào)“;”開始注釋可單獨(dú)一行或數(shù)行注釋是任選項(xiàng)*主程序SYM1 .set2 ;SYM1=2Begin: MOV#SYM1,AR1 ;AR1=2

4.4.2匯編語(yǔ)言中的常數(shù)與字符串匯編器可支持7種類型的常數(shù)與字符串,見表4-5表4-5匯編器支持的常數(shù)與字符串?dāng)?shù)據(jù)類型舉例說(shuō)明二進(jìn)制1110001b或1110001B八進(jìn)制226q或572Q十進(jìn)制1234或+1234或-11234缺省型十六進(jìn)制0A40h或0A40H或0xA40浮點(diǎn)數(shù)1.623e-23僅用于C語(yǔ)言字符‘D’字符串“thisisastring”4.4.3匯編源程序中的符號(hào)匯編程序中的符號(hào)用于標(biāo)號(hào)、常數(shù)和替代字符。由字母、數(shù)字及下劃線和美元符號(hào)(A~Z,a~z,0~9,_和$)等組成。符號(hào)名最多可長(zhǎng)達(dá)200個(gè)字符。在符號(hào)中,第1位不能是數(shù)字,并且符號(hào)中不能含空格。1.標(biāo)號(hào)

缺省狀態(tài)下標(biāo)號(hào)分大小寫。如果在使用匯編器時(shí)選擇-c選項(xiàng),則不分大小寫。

標(biāo)號(hào)還可以作為.global,.ref,.def或.bss等匯編偽指令的操作數(shù)。

2.符號(hào)常數(shù)符號(hào)也可被設(shè)置成常數(shù)值。為了提高程序的可讀性,可以用有意義的名稱來(lái)代表一些重要的常數(shù)值。偽指令.set和.struct/.tag/.endstruct可以用來(lái)將常數(shù)賦給符號(hào)名符號(hào)常數(shù)不能被重新定義例4-5,符號(hào)常數(shù)K .set1024 ;常數(shù)定義maxbuf .set2*Kvalue .set0delta .set1item .struct ;item結(jié)構(gòu)定義 .intvalue ;常數(shù)value偏移量=0 .intdelta ;常數(shù)delta偏移量=1i_len .endstructarray .tagitem ;數(shù)組聲明 .bssarray,i_len*K4.4.4匯編源程序中的表達(dá)式表達(dá)式可以是常數(shù)、符號(hào),或者是由算術(shù)運(yùn)算符分開的一系列常數(shù)和符號(hào)。有效表達(dá)式的范圍為-32768~32767要求表達(dá)式中的符號(hào)或匯編時(shí)間常數(shù)在表達(dá)式之前已定義例4-6,有效定義的表達(dá)式。 .datalabel1 .word0 ;將16位值0,1,2放入標(biāo)號(hào)為 .word1 ;label1的當(dāng)前段連續(xù)字中 .word2label2 .word3 ;將3放入標(biāo)號(hào)為label2的字中X .set50h ;定義X的值goodsym1 .set100h+X;有效定義的表達(dá)式=150hgoodsym2 .setlabel1;=0goodsym3 .setlabel2-label1;有效定義的表達(dá)式=3h例4-7,無(wú)效定義的表達(dá)式。 .globalY ;定義Y為全局外部符號(hào)

badsym1 .setY ;Y在當(dāng)前文件中未定義

badsym2 .set50h+Y;無(wú)效的表達(dá)式badsym3 .set50h+Z;無(wú)效的表達(dá)式,Z還未定義

Z .set60h ;定義Z,但應(yīng)在表達(dá)式使用之前表4-6匯編源程序表達(dá)式中的運(yùn)算符序號(hào)符號(hào)運(yùn)算操作求值順序1+-~!取正、取負(fù)、按位求補(bǔ)、邏輯負(fù)從右至左2*/%乘法、除法、求模從左至右3+-加法、減法從左至右4<<>>左移、右移從左至右5<<=小于、小于等于從左至右6>>=大于、大于等于從左至右7!==不等于、等于從左至右8&按位與運(yùn)算從左至右9∧按位異或運(yùn)算從左至右10|按位或運(yùn)算從左至右4.4.5內(nèi)建數(shù)學(xué)函數(shù)匯編器支持如表4-7所示的內(nèi)建數(shù)學(xué)函數(shù)函數(shù)中的表達(dá)式必須為常數(shù)表4-7匯編器內(nèi)建數(shù)學(xué)函數(shù)4.5TMS320C55x鏈接器TMS320C55x鏈接器有兩個(gè)功能強(qiáng)大的指令,即MEMORY和SECTIONS。MEMORY指令允許用戶定義一個(gè)目標(biāo)系統(tǒng)的存儲(chǔ)器映射,可以命名存儲(chǔ)器的各個(gè)部分,并且指定開始地址和大小。SECTIONS指令告訴鏈接器合成輸入段為輸出段,并且告訴鏈接器把這些輸出段放在存儲(chǔ)器的某個(gè)位置。MEMORY:用來(lái)指定目標(biāo)存儲(chǔ)器結(jié)構(gòu)SECTIONS:用來(lái)控制段的構(gòu)成與地址分配4.5.1鏈接器命令文件的編寫與使用1、MEMORY指令MEMORY{[PAGE0:]name_1[(attr)]:o=constant,l=constant;

[PAGEn:]name_n[(attr)]:o=constant,l=constant;}PAGE:

用于識(shí)別一個(gè)存儲(chǔ)空間,可以使用多達(dá)255個(gè)頁(yè)通常頁(yè)0對(duì)應(yīng)程序存儲(chǔ)空間,頁(yè)1對(duì)應(yīng)存儲(chǔ)器空間每個(gè)頁(yè)面表現(xiàn)為一個(gè)完全獨(dú)立的地址空間Name:命名一個(gè)存儲(chǔ)空間可以是任意合法字符存儲(chǔ)空間名字僅對(duì)鏈接器有用,在輸出文件或者符號(hào)里不再保留在不同頁(yè)的存儲(chǔ)空間范圍可以有相同的名字,但在一頁(yè)內(nèi)不允許不同空間段有相同名字和交疊。1、MEMORY指令MEMORY{[PAGE0:]name_1[(attr)]:o=constant,l=constant;

[PAGEn:]name_n[(attr)]:o=constant,l=constant;}o:指定存儲(chǔ)段的開始地址。值為24位常數(shù),可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制,單位為字節(jié),也可寫為orgl:指定存儲(chǔ)段的長(zhǎng)度值為24位常數(shù),可以是十進(jìn)制、八進(jìn)制或者十六進(jìn)制,單位為字節(jié),也可以寫lenattr:指定與命名的存儲(chǔ)空間范圍相聯(lián)系的1~4個(gè)屬性,使用時(shí)必須放在小括號(hào)里合法的屬性包括:

R:表示該存儲(chǔ)空間可讀

W:表示該存儲(chǔ)空間可寫

X:表示該存儲(chǔ)空間可以包含可執(zhí)行代碼

I:表示該存儲(chǔ)空間可以初始化2、SECTIONS指令SECTIONS{oname_1:[property,property,property…]oname_2:[property,property,property…]oname_3:[property,property,property…]}以oname開始的一行定義了一個(gè)輸出段。段名oname后是屬性列表,這些屬性定義了段的內(nèi)容和段如何分配到存儲(chǔ)器。

一個(gè)段可能的屬性包括:Loadallocation

定義在存儲(chǔ)器中段被裝載的位置: load=allocation或allocation或>allocationRunallocation

定義在存儲(chǔ)器中段運(yùn)行的位置:

run=allocation或run>allocationInputsections

定義組成輸出段的輸入段:句法為{input_sections}例4-8,鏈接器的使用。a.objb.obj/*輸入文件*/-oprog.out/*用-o參數(shù)指定輸出文件名*/MEMORY{ DARAM:o=000100h,l=8000h SARAM:o=010000h,l=8000h}SECTIONS{ .data:>DARAM .text:>SARAM .bss:>DARAM}4.6一個(gè)完整的TMS320C55x匯編程序例,這是一個(gè)完整的C55x匯編程序,其功能計(jì)算:y=x0+x3+x1+x2。通過(guò)該例程可以加深對(duì)C55x匯編程序的了解,熟悉C55x的尋址方式和開發(fā)調(diào)試方法。(1)鏈接器命令文件

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論