版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1偽指令偽指令 TMS320C2000/C5X的匯編偽指令可以實現(xiàn)以下功能:的匯編偽指令可以實現(xiàn)以下功能: 匯編代碼和數(shù)據(jù)到指定的段;匯編代碼和數(shù)據(jù)到指定的段; 為未定義的變量保存空間;為未定義的變量保存空間; 控制列表文件;控制列表文件; 分配存儲器;分配存儲器; 匯編條件塊;匯編條件塊; 定義全局變量;定義全局變量; 指定匯編器能得到的宏;指定匯編器能得到的宏; 檢查符號調試信息。檢查符號調試信息。7. 1 偽指令偽指令分為分為8類:類: 段定義偽指令:段定義偽指令:把匯編語句程序的各部分與適當?shù)亩温?lián)系起來。把匯編語句程序的各部分與適當?shù)亩温?lián)系起來。 .bes, .bss, .data,
2、.text, .sect, .usect,.sblock。初始化常數(shù)偽指令:初始化常數(shù)偽指令:為當前段匯編數(shù)值。為當前段匯編數(shù)值。 .space, .byte, .field, .float, .xfloat, .int, .word, .long, .xlong, .pstring,string。段程序計數(shù)器排列偽指令:段程序計數(shù)器排列偽指令: 使段程序計數(shù)器使段程序計數(shù)器SPC指向預定的位置。指向預定的位置。 align, .even。 輸出列表格式偽指令:輸出列表格式偽指令:控制列表文件的格式??刂屏斜砦募母袷?。 .drlist, .drnolist, .fclist, .fcnoli
3、st, .length, .width,.list,.nolist, .mlist, .mnolist, .option, .page, .sslist, .ssnolist, .tab, .title。引用其他文件偽指令:引用其他文件偽指令:為文件提供信息或提供這些文件的信息。為文件提供信息或提供這些文件的信息。. .copy, .include, .global, .def, .ref, .mlib。條件匯編偽指令:條件匯編偽指令:使匯編器根據(jù)表達式求值結果的真或假來匯編代碼的某些段。使匯編器根據(jù)表達式求值結果的真或假來匯編代碼的某些段。 .if, .elseif, .else, .end
4、if, .loop, .break, .endloop。匯編時的符號偽指令:匯編時的符號偽指令:使定義的符號名等同于常數(shù)值或字符串。使定義的符號名等同于常數(shù)值或字符串。 .asg, .eval, .set, .equ, .struct, .endstruct,.label 。 匯編模式偽指令:匯編模式偽指令:定義在定義在C28x 或認可或認可C2xLP模式。模式。.c28_amode, .lp_amode。其他偽指令:其他偽指令:具有其他功能和特性的偽指令。具有其他功能和特性的偽指令。 .end, .mmregs, .newblock, .port, .sblock, .version, .e
5、msg, .wmsg。7. 2 宏指令宏指令 將頻繁出現(xiàn)的程序段定義為宏指令,將頻繁出現(xiàn)的程序段定義為宏指令, 當程序中需要執(zhí)行該程序段時,只需用一條宏調用語句。當程序中需要執(zhí)行該程序段時,只需用一條宏調用語句。 縮短源程序的長度,使源程序易讀,減少了書寫錯誤??s短源程序的長度,使源程序易讀,減少了書寫錯誤。1)定義宏:)定義宏:用戶在使用宏之前必須先定義宏。在程序的任何地方都可以定義一用戶在使用宏之前必須先定義宏。在程序的任何地方都可以定義一 個宏??稍谠次募_始處或者在個宏??稍谠次募_始處或者在.include/.copy文件中或者在宏庫中定義。文件中或者在宏庫中定義。格式:格式: 宏名
6、宏名 .macro 形式參數(shù)形式參數(shù)1,形式參數(shù),形式參數(shù)2,形式參數(shù),形式參數(shù)n 宏體宏體 .mexit .endm宏名宏名 用通常規(guī)定的字符串格式書寫。用通常規(guī)定的字符串格式書寫。.mexit 相當于相當于“goto .endm”,用于條件判斷后的轉移,可缺省。,用于條件判斷后的轉移,可缺省。形式參數(shù)形式參數(shù) 或稱為替代符號。同樣按通常規(guī)定的字符串格式書寫。替代符或稱為替代符號。同樣按通常規(guī)定的字符串格式書寫。替代符 號作為宏參數(shù)僅在被定義的宏中有效。號作為宏參數(shù)僅在被定義的宏中有效。 每個宏最多可以用每個宏最多可以用32個宏參數(shù)。個宏參數(shù)。 宏可以嵌套,但宏的所有元素都應在同一個文件中定
7、義。宏可以嵌套,但宏的所有元素都應在同一個文件中定義。7. 2 宏指令宏指令(2)調用宏:)調用宏:在定義了宏以后,就可以在源程序中將宏的名字作為操作碼來調用。在定義了宏以后,就可以在源程序中將宏的名字作為操作碼來調用。 格式:格式: 宏名宏名 實參數(shù)實參數(shù)1,實參數(shù),實參數(shù)2,實參數(shù),實參數(shù)n,7 . 2 宏指令宏指令(3)展開宏:)展開宏:匯編器在對源文件進行匯編時,對調用的宏進行展開。在展開匯編器在對源文件進行匯編時,對調用的宏進行展開。在展開過程中,匯編器用宏體取代宏調用語句,宏體中的形式參數(shù)實際參數(shù)代替。過程中,匯編器用宏體取代宏調用語句,宏體中的形式參數(shù)實際參數(shù)代替。 如果某個形式
8、參數(shù)沒有對應的實參數(shù)為其賦值,該形式參數(shù)將被空串如果某個形式參數(shù)沒有對應的實參數(shù)為其賦值,該形式參數(shù)將被空串 (“ ”)代替。)代替。 如果實參數(shù)的個數(shù)多于形式參數(shù),則余下的實參數(shù)將賦給最后一個形式如果實參數(shù)的個數(shù)多于形式參數(shù),則余下的實參數(shù)將賦給最后一個形式 參數(shù)(用逗號隔開)。參數(shù)(用逗號隔開)。 如果要把一串變量賦給一個形式參數(shù),或者把一個逗號(或分號)傳如果要把一串變量賦給一個形式參數(shù),或者把一個逗號(或分號)傳 給一個形式參數(shù),就必須用引號將它們引起來。給一個形式參數(shù),就必須用引號將它們引起來。 匯編時,匯編器先用實參數(shù)代替形式參數(shù)并展開宏,然后把源語句匯編匯編時,匯編器先用實參數(shù)代
9、替形式參數(shù)并展開宏,然后把源語句匯編 為目標代碼,并輸出到列表文件中。為目標代碼,并輸出到列表文件中。,7 . 2 宏指令宏指令例例6.23 宏定義:宏定義: parms .macro x,y,za=xb=yc=z.endm 調用宏:調用宏: 匯編時展開宏:匯編時展開宏: parms 100,200 ;a=100 ;b=200 ;c=“ ” parms“100,200,300”,55,66,77 ;a=“100,200,300” ;b=55 ;c=66,77 .C C源文件源文件 .ASM 匯編文件匯編文件 .CMD 命令文件命令文件 .H 頭文件頭文件 .PRJ 工程文件工程文件 .LST
10、列表文件列表文件 .MAP 映射文件映射文件 .OBJ目標文件目標文件 .OUT 可執(zhí)行文件可執(zhí)行文件 7 .4 目標文件鏈接目標文件鏈接DSP系統(tǒng)中常用的文件后系統(tǒng)中常用的文件后綴綴 COFF目標文件總是包括目標文件總是包括3個默認的段個默認的段 : 文本段:文本段:用用.text定義,通常包括可執(zhí)行代碼。定義,通常包括可執(zhí)行代碼。 數(shù)據(jù)段:數(shù)據(jù)段:用用.data定義,通常包括已定義,通常包括已初始化的初始化的數(shù)據(jù)。數(shù)據(jù)。 預留段:預留段:用用.bss定義,通常定義,通常保留保留用于用于未初始化變量的空間未初始化變量的空間。段段 7.4 目標文件鏈接目標文件鏈接目目標文件的最小單位被稱為標文
11、件的最小單位被稱為段段,它是在存儲器中占有連,它是在存儲器中占有連續(xù)空間的續(xù)空間的代碼塊或數(shù)據(jù)塊代碼塊或數(shù)據(jù)塊。u 匯匯編器在匯編過程中建立這些段,鏈接器把段編器在匯編過程中建立這些段,鏈接器把段重定位重定位到目標存儲器中到目標存儲器中u 所有的段都是獨立的、可定位的所有的段都是獨立的、可定位的u 相同的段將按相同的段將按先后先后次序定位在連續(xù)的區(qū)域內次序定位在連續(xù)的區(qū)域內u 未初始化段未初始化段被定位到被定位到RAM內;內;初始化段初始化段可單獨定位在可單獨定位在RAM或或ROM內,內, 并且在鏈接并且在鏈接時時,還還可引用其他段內定義的符號可引用其他段內定義的符號 匯編器為每個匯編器為每個
12、段段設置了一個設置了一個獨立的獨立的程序計數(shù)器,這些計數(shù)器稱為程序計數(shù)器,這些計數(shù)器稱為段程序段程序計數(shù)器計數(shù)器(SPC,Section Program Counters)。)。 可以用段程序計數(shù)器可以用段程序計數(shù)器排列排列偽指令偽指令.align或或.even,強迫,強迫SPC指向預定的位置。指向預定的位置。段段 段程序計數(shù)器段程序計數(shù)器 7.4 目標文件鏈接目標文件鏈接 鏈接器鏈接器通過鏈接通過鏈接COFF目標文件建立可目標文件建立可 執(zhí)行文件,執(zhí)行文件, 目標文件中的目標文件中的段段是鏈接時的重要依據(jù)。是鏈接時的重要依據(jù)。 鏈接器可把鏈接器可把段段定位到用戶系定位到用戶系 統(tǒng)已配置的存儲
13、器中。統(tǒng)已配置的存儲器中。 鏈接器命令文件(鏈接器命令文件(.cmd)則給出鏈接器在鏈接時的有關信息則給出鏈接器在鏈接時的有關信息 DSP芯片的存儲器配置隨應用的不同而不同芯片的存儲器配置隨應用的不同而不同.用鏈接器偽指令用鏈接器偽指令 MEMORY(存儲器偽指令)可以確定目標系統(tǒng)的各種內存配置。(存儲器偽指令)可以確定目標系統(tǒng)的各種內存配置。 當當MEMORY決定了存儲器模式后,可以用鏈接器偽指令決定了存儲器模式后,可以用鏈接器偽指令SECTIONS (段偽指令)確定鏈接器組合輸入段的方法和輸出段在存儲器中的位置。(段偽指令)確定鏈接器組合輸入段的方法和輸出段在存儲器中的位置。 如果不使用這
14、兩條偽指令,鏈接器則用默認存儲器的定位方式來組合段,如果不使用這兩條偽指令,鏈接器則用默認存儲器的定位方式來組合段, 并把它們定位到存儲器中。并把它們定位到存儲器中。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件鏈接器命令文件和和鏈接器偽指令鏈接器偽指令鏈接時給符號賦值鏈接時給符號賦值 賦值語句的語法:賦值語句的語法:鏈接器中賦值語句的語法類似于鏈接器中賦值語句的語法類似于C語言中賦值語句語言中賦值語句語法。語法。 符號符號 = 表達式表達式 ;把表達式的值賦予符號;把表達式的值賦予符號 符號符號 += 表達式表達式 ;把表達式的值加到符號上;把表達式的值加到符號上 符號符號 -= 表達式表達
15、式 ;從符號減去表達式的值;從符號減去表達式的值 符號符號 *= 表達式表達式;符號乘以表達式;符號乘以表達式 符號符號 /= 表達式表達式;符號除以表達式;符號除以表達式 把把SPC賦予符號賦予符號“.”:“.”表示定位期間表示定位期間SPC的當前值。的當前值?!?”符號符號僅僅可用可用在在 SECTIONS偽指令內的賦值語句中,用來表示段的當前運行地址。偽指令內的賦值語句中,用來表示段的當前運行地址。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 賦值表達式:鏈接器表達式必須遵循以下規(guī)則:賦值表達式:鏈接器表達式必須遵循以下規(guī)則: 表達式可包含全局
16、符號、常數(shù),以及表達式可包含全局符號、常數(shù),以及表表7-3-1所列的所列的C語言運算符。語言運算符。 所有數(shù)被當做長整數(shù)(所有數(shù)被當做長整數(shù)(32位)處理。位)處理。 鏈接器用和匯編器相同的方式識別常數(shù)鏈接器用和匯編器相同的方式識別常數(shù)。見見表表7-3-2. 表表達式中的符號只具有符號的地址值,不進行類型檢查。達式中的符號只具有符號的地址值,不進行類型檢查。 鏈接器表達式可以是絕對的或可重定位的。鏈接器表達式可以是絕對的或可重定位的。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 MEMORY偽指令偽指令 確定在目標系統(tǒng)中具有確定在目標系統(tǒng)中具有物理位
17、置物理位置,且且可被程序使用的可被程序使用的存儲器范圍存儲器范圍。MEMORY偽指令的一般語句形式為:偽指令的一般語句形式為:MEMORY PAGE 0: 存儲器名存儲器名1(屬性)(屬性):ORIGIN=常數(shù)常數(shù), LENGTH=常數(shù)常數(shù) PAGE n: 存儲器名存儲器名n(屬性)(屬性): ORIGIN=常數(shù)常數(shù),LENGTH=常數(shù)常數(shù) 7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令PAGE: 定義一個存儲器空間,用戶可以定義多達定義一個存儲器空間,用戶可以定義多達255頁。頁。 PAGE0定義定義程序存儲器程序存儲器,PAGE1定義定義數(shù)據(jù)存儲器
18、數(shù)據(jù)存儲器, 2812只有只有這兩個頁這兩個頁。如果用戶沒有使用如果用戶沒有使用PAGE選項,那么鏈接器把段定位到選項,那么鏈接器把段定位到PAGE0。每個每個PAGE代表一個完全獨立的地址空間。代表一個完全獨立的地址空間。在在PAGE0上已配置的存儲器可以和在上已配置的存儲器可以和在PAGE1上已配置的存儲器重疊。上已配置的存儲器重疊。存儲器名:存儲器名: 命名存儲器范圍。由命名存儲器范圍。由18個字符組成。個字符組成。名字對于鏈接器沒有特殊的意義,僅指明存儲器的區(qū)域。名字對于鏈接器沒有特殊的意義,僅指明存儲器的區(qū)域。在不同頁上存儲器范圍可以有相同的名字,在不同頁上存儲器范圍可以有相同的名字
19、,在同一頁,所有的存儲器范圍在同一頁,所有的存儲器范圍不能不能有有相同相同的名字,且的名字,且不能重疊不能重疊。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令屬性:屬性:可選項,當被使用時,必須用括號括起來。屬性把輸出段的定位限制在某可選項,當被使用時,必須用括號括起來。屬性把輸出段的定位限制在某 些存儲器范圍內。些存儲器范圍內。如果如果用戶不使用任何屬性,用戶不使用任何屬性,則則輸出段即可以輸出段即可以定位到定位到任何任何 范圍內。有效的屬性包括:范圍內。有效的屬性包括:R存儲器可讀;存儲器可讀; W存儲器可寫;存儲器可寫; X儲器可以包含可執(zhí)行代碼
20、;儲器可以包含可執(zhí)行代碼; I存儲器可被初始化。存儲器可被初始化。ORIGIN:指定存儲器的起始地址,也可以寫成指定存儲器的起始地址,也可以寫成org或或o。這個值是以字節(jié)規(guī)定。這個值是以字節(jié)規(guī)定 的的16位常數(shù),也可以是十進制、八進制或十六進制。位常數(shù),也可以是十進制、八進制或十六進制。 LENGTH:指定存儲器的長度指定存儲器的長度,也可以寫成也可以寫成len或或l。數(shù)值的表示與。數(shù)值的表示與origin相同相同 當用戶使用當用戶使用MEMORY偽指令時偽指令時,要確信已指定了所有可要確信已指定了所有可 用于裝載代碼的存儲器范圍。用于裝載代碼的存儲器范圍。 鏈接器鏈接器不不把程序把程序放到
21、放到未配置的存儲器中。未配置的存儲器中。注意:注意:7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令例例6.24 MEMORY指令舉例指令舉例 / * Sample Command file with MEMORY directive * /file1.obj file2.obj -o prog.out MEMORY PAGE0: ROM: ORIGIN=0C00h ,LENGTH=1000h PAGE1: SCRATCH: ORIGIN =60h, LENGTH =20h RAM: ORIGIN =200h, LENGTH =200h 該例定義了一個存
22、儲器系統(tǒng):具有程序存儲器中地址為該例定義了一個存儲器系統(tǒng):具有程序存儲器中地址為0C00h,長度為,長度為4K字字的的ROM;數(shù)據(jù)存儲器中地址為;數(shù)據(jù)存儲器中地址為60h,長度為,長度為32字字的的RAM;數(shù)據(jù)存儲器;數(shù)據(jù)存儲器中地址為中地址為200h,長度為長度為512字字的的RAM。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 SECTIONS偽指令偽指令 描述描述輸入段怎樣被輸入段怎樣被組合到組合到輸出段內;定義在執(zhí)行程序中的輸出段;輸出段內;定義在執(zhí)行程序中的輸出段; 規(guī)定輸出段規(guī)定輸出段在存儲器中在存儲器中的位置;允許重新命名輸出段。的位置
23、;允許重新命名輸出段。SECTIONS偽指令的一般語法形式是:偽指令的一般語法形式是:SECTIONS 段名段名1:特性特性1,特性,特性2, 段名段名2:特性特性1,特性,特性2, 指令中的每一行從段名開始定義輸出段,輸出段是輸出文件內的段。指令中的每一行從段名開始定義輸出段,輸出段是輸出文件內的段。在段名之后是特性列表(以在段名之后是特性列表(以逗號逗號隔開)隔開),定義段的內容以及它是怎樣被分配的。定義段的內容以及它是怎樣被分配的。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令特性列表的選項(段所具備的特性)有以下幾種。特性列表的選項(段所具備的
24、特性)有以下幾種。 裝載地址:裝載地址:規(guī)定段將被裝載在存儲器中的位置。規(guī)定段將被裝載在存儲器中的位置。 語法:語法:load = allocation 或或 allocation 或或 allocation allocation是是MEMORY偽指令所定義的范圍內地址。偽指令所定義的范圍內地址。 運行地址:運行地址:定義段在存儲器內運行的位置。定義段在存儲器內運行的位置。 語法:語法:run = allocation 或或 run allocation 如果在一個段中如果在一個段中 load 和和 run 的地址相同,的地址相同, run 可以省略??梢允÷?。 鏈接器為每個輸出段分配兩個目標
25、存儲器地址:裝載地址和運行地址。鏈接器為每個輸出段分配兩個目標存儲器地址:裝載地址和運行地址。通通常這兩個地址是相同的常這兩個地址是相同的。但有時用戶可能把代碼裝入存儲器的一個區(qū)域卻在另。但有時用戶可能把代碼裝入存儲器的一個區(qū)域卻在另一個區(qū)域運行它。例如在引導加載程序,用一個區(qū)域運行它。例如在引導加載程序,用load設置它的裝載地址,用設置它的裝載地址,用run設置設置它的運行地址。它的運行地址。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 調準地址:調準地址:規(guī)定段應在規(guī)定段應在地址邊界地址邊界上開始。調準可以使鏈接器把輸出段放在位上開始。調準可以
26、使鏈接器把輸出段放在位 于于n字邊界的地址,其中字邊界的地址,其中n是是2的冪。的冪。 語法:語法:align=n 或或align=(n) 如如 .text align=128, 即將即將.text段定位于頁邊界。段定位于頁邊界。 塊地址:塊地址:規(guī)定段必須裝在兩個地址邊界之間規(guī)定段必須裝在兩個地址邊界之間,它把段定位在大小為它把段定位在大小為n的塊內的塊內 任何地方,如果段大于塊,那么段將從該邊界開任何地方,如果段大于塊,那么段將從該邊界開 始。和調準一始。和調準一 樣,樣,n必須是必須是2的冪。的冪。 語法:語法:block=n 或或 block(n) 如如 .bss load=block
27、(0 x80)。 定位定位.bss段使其包含在單個段使其包含在單個128字的頁內或者從新頁開始。用戶可以單獨使用字的頁內或者從新頁開始。用戶可以單獨使用調準或塊,也可以和裝入地址、運行地址結合在一起使用,但是調準或塊,也可以和裝入地址、運行地址結合在一起使用,但是調準和塊不能一調準和塊不能一起使用。起使用。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 輸入段:輸入段:定義組成輸出段的輸入段。定義組成輸出段的輸入段。 語法:語法: input_sections 輸入文件中的段組合起來形成輸出段,鏈接器按照所列出的輸入段的次序輸入文件中的段組合起來形成輸
28、出段,鏈接器按照所列出的輸入段的次序鏈接并組合它們。輸出段的大小是組成它的輸入段的大小之和。鏈接并組合它們。輸出段的大小是組成它的輸入段的大小之和。 通用類型的段的規(guī)格說明中沒有輸入段。通用類型的段的規(guī)格說明中沒有輸入段。 如如 :SECTIONS .text: .data: .bss : 此時鏈接器從輸入文件取出所有此時鏈接器從輸入文件取出所有.text段并把它們組合到段并把它們組合到.text輸出段內。鏈接器輸出段內。鏈接器按照它在輸入文件中遇到的次序鏈接按照它在輸入文件中遇到的次序鏈接.text輸入段,對輸入段,對.data和和.bss段的操作與段的操作與.text相相同。同。 用戶也可
29、以明確規(guī)定組成輸出段的輸入段用戶也可以明確規(guī)定組成輸出段的輸入段,每個輸入段用它的文件名和段名來每個輸入段用它的文件名和段名來標志。標志。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令例例6.25 SECTIONS .text f1.obj(.text) f2.obj(sec1) f3.obj f3.obj(.text,sec2) 輸入段不必相互同名也不必和輸出段同名。如果列舉輸入文件時不帶段,輸入段不必相互同名也不必和輸出段同名。如果列舉輸入文件時不帶段,那么它所有的段將被包含在輸出段之內。那么它所有的段將被包含在輸出段之內。7.4 目標文件鏈接目標
30、文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 段類型:段類型:定義特殊段類型的標志。定義特殊段類型的標志。 語法:語法:type=COPY 或或 type=DSECT 或或 type=NOLOAD 用戶可以把這用戶可以把這3種特殊的類型賦予輸出段。用種特殊的類型賦予輸出段。用COPY和和DSECT創(chuàng)建的段是一創(chuàng)建的段是一個虛段個虛段,它不包括在輸出段存儲器分配內,也不占據(jù)存儲器空間,不包括在存儲,它不包括在輸出段存儲器分配內,也不占據(jù)存儲器空間,不包括在存儲器映象列表中。但在虛段中定義的全局符號可以被其他輸入段引用,器映象列表中。但在虛段中定義的全局符號可以被其他輸入段引用
31、,COPY段可段可以將段的內容、重定位信息及行號信息放在輸出模塊中,而以將段的內容、重定位信息及行號信息放在輸出模塊中,而DSECT段則不放置。段則不放置。 NOLOAD創(chuàng)建的段不將段的內容、重定位信息及行號信息放在輸出模塊中,創(chuàng)建的段不將段的內容、重定位信息及行號信息放在輸出模塊中,但鏈接器為其分配空間并包括在存儲器映象列表中。但鏈接器為其分配空間并包括在存儲器映象列表中。 7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 填充值:填充值:定義用于填充初始化空位的數(shù)值。定義用于填充初始化空位的數(shù)值。 語法:語法:file=value 或或name: =
32、value 當初始化輸出段內有空位存在時,鏈接器必須提供原始數(shù)據(jù)以填充它。鏈接當初始化輸出段內有空位存在時,鏈接器必須提供原始數(shù)據(jù)以填充它。鏈接器用器用16位數(shù)值填充空位,該數(shù)值在存儲器內復制直至它填滿空位為止。位數(shù)值填充空位,該數(shù)值在存儲器內復制直至它填滿空位為止。7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令例例6.26 SETIONS偽指令的使用偽指令的使用file1.obj file2.obj -o prog.out SECTIONS .text: load=ROM run=0800h .const: load=ROM .bss: load=R
33、AM vectors: load=0FF80h t1.obj (.intvec1) t2.obj(.intvec2) endvec= . .data : align=16 7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 鏈接器舉例鏈接器舉例 例例6.27是一個名為是一個名為demo.cmd的鏈接器命令文件,它鏈接了的鏈接器命令文件,它鏈接了3個目標文件:個目標文件:demo.obj,fft.obj和和tables.obj,并創(chuàng)建了一個名為,并創(chuàng)建了一個名為demo.out的可執(zhí)行程序。假的可執(zhí)行程序。假設目標存儲器具有下列配置。設目標存儲器具有下列配置
34、。程序存儲器:程序存儲器:地址范圍地址范圍 內容內容 0 x3F0000 0 x3FFFBF 片內片內ROM 0 x3FFFC0 0 x3FFFFF 中斷向量表中斷向量表數(shù)據(jù)存儲器:數(shù)據(jù)存儲器:地址范圍地址范圍 內容內容 0 x000040 0 x0001FF 堆棧堆棧 0 x000200 0 x0007FF RAM_1 0 x3ED000 0 x3EFFFF RAM_27.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令例例6.27 命令文件命令文件exmp.cmd /* 定義鏈接器選項定義鏈接器選項*/ -e SETUP /* 定義程序入口定義程序入口
35、*/-o demo.out /* 命名輸出文件命名輸出文件 */-m demo.map /* 創(chuàng)建一個輸出列表文件創(chuàng)建一個輸出列表文件*/ /* 定義輸入文件定義輸入文件 */demo.obj /* 鏈接三個目標文件鏈接三個目標文件 */fft.objtables.obj /*定義存儲器配置定義存儲器配置 */MEMORYPAGE 0:ROM (R):ORIGIN = 3F0000h, LENGTH =0FFC0h VECTORS (R): ORIGIN = 3FFFC0h,LENGTH = 0040h PAGE 1:STACK (RW):ORIGIN = 000040h, LENGTH =
36、01C0h RAM_2 (RW) : ORIGIN = 000200h, LENGTH = 0600h RAM_1 (RW) : ORIGIN = 3ED000h, LENGTH = 3000h SECTIONS vectors:VECTORS, PAGE=0 .text: load = ROM, PAGE=0 .data:file=07A1Ch, load=RAM_1,PAGE=1 tables.obj(.data) fft.obj(.data) +=100h ; /*創(chuàng)建一個長度為創(chuàng)建一個長度為100的空間,用的空間,用07A1Ch填充填充*/ var_defs: RAM_2 page=1
37、 /*包含在包含在dmo.obj文件中文件中var_defs段的變量鏈接到數(shù)段的變量鏈接到數(shù) 據(jù)塊據(jù)塊RAM_2中中* .bss: RAM_1, page=1, fill=0FFFFh /* .bss的填充和鏈接的填充和鏈接*/ 7.4 目標文件鏈接目標文件鏈接鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 TMS320C228x器件的默認定位器件的默認定位MEMORY PAGE 0:PROG: ORIGIN = 0 x000040H, LENGTH = 0 x3FFFC0H PAGE 1: DATA: ORIGIN = 0 x
38、000000H, LENGTH = 0 x010000H PAGE 1: DATA1:ORIGIN = 0 x010000H, LENGTH = 0 x3F0000H SECTIONS .text: PAGE = 0 .data:PAGE = 0 .cinit: PAGE = 0 /*僅在僅在C程序中使用程序中使用* .bss: PAGE = 1 用戶沒有使用用戶沒有使用MEMORY和和SECTIONS的情況下,存儲器使用該默認定位的情況下,存儲器使用該默認定位7.4 目標文件鏈接目標文件鏈接7.4 程序舉例程序舉例 公用文件公用文件 程序設計時,需在多個模塊中使用相同設置和中斷處理程序設計時,需在多個模塊中使用相同設置和中斷處理: 將芯片中映射至將芯片中映射至I/O空間的寄存器地址及標號、預置變量空間的寄存器地址及標號、預置變量和常數(shù)的空間等設置語句集中在一個文件中,稱為和常數(shù)的空間等設置語句集中在一個文件中,稱為I/O寄存器寄存器頭文件(如頭文件(如init.h);); 將轉移中斷矢量地址的指令集中在一個文件中,稱為將轉移中斷矢量地址的指令集中在一個文件中,稱為中中斷矢量頭文件(如斷矢量頭文件(如vector.h);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度金融衍生品抵押合同模板及范本3篇
- 2024年度冷鏈運輸合同模板:冷鏈物流解決方案3篇
- 2024年度無房產(chǎn)證房屋抵押貸款擔保合同3篇
- 2024年度物業(yè)服務企業(yè)社區(qū)文化活動合作協(xié)議3篇
- 2024年度全國連鎖品牌招商代理委托服務協(xié)議書3篇
- 2024年度生鮮配送委托協(xié)議及食品安全管理合同2篇
- 2024年度高速公路橋梁工程橋架供應與安裝合同3篇
- 2024年新能源汽車制造技術許可合同標的及屬性
- 2024五人合伙共同開發(fā)智慧城市項目合同3篇
- 2024年度職工食堂節(jié)能降耗改造與維護服務合同3篇
- 瀝青路面養(yǎng)護銑刨施工技術規(guī)范.文檔
- 萬科物業(yè)服務工作手冊
- 蘇教版科學六年級上冊期末測試卷含完整答案(各地真題)
- 市場法評估企業(yè)價值
- 大學生助農直播創(chuàng)業(yè)計劃書
- 中央空調采購安裝投標方案(技術方案)
- 網(wǎng)絡畫板智慧樹知到期末考試答案章節(jié)答案2024年成都師范學院
- 心理學基礎智慧樹知到期末考試答案章節(jié)答案2024年杭州師范大學
- OptiXOSN3500產(chǎn)品培訓課件
- 崗位工作指導手冊
- 新能源汽車保險與理賠
評論
0/150
提交評論