TMS320C55x匯編語言編程A
例4-17,無效定義的表達式。 .global Y ; 定義Y為全局外部符號 badsym1.set Y ; Y在當前文件中未定義 badsym2.set 50h + Y ; 無效的表達式 badsym3.set 50h + Z ; 無效的表達式,Z還未定義 Z .set 60h; 定義Z,但應在表達式使用之前 表4-9 匯編源程序表達式中的運算符 序號 符 號 運算操作 求值順序 1 + - ~ ! 取正、取負、按位求補、邏輯負 從右至左 2 * / % 乘法、除法、求模 從左至右 3 + - 加法、減法 從左至右 4 << >> 左移、右移 從左至右 5 < <= 小于、小于等于 從左至右 6 > >= 大于、大于等于 從左至右 7 != = 不等于、等于 從左至右 8 & 按位與運算 從左至右 9 ∧ 按位異或運算 從左至右 10 | 按位或運算 從左至右 4.5.5 內建數學函數 匯編器支持如表4-10所示的內建數學函數 函數中的表達式必須為常數 表4-10 匯編器內建數學函數 4.6 TMS320C55x鏈接器 鏈接器的運行 鏈接器命令文件的編寫與使用 MEMORY指令 SECTIONS指令 4.6.1 概述 TMS320C55x鏈接器有兩個功能強大的指令,即MEMORY和SECTIONS。 MEMORY指令允許用戶定義一個目標系統的存儲器映射,可以命名存儲器的各個部分,并且指定開始地址和大小。 SECTIONS指令告訴鏈接器合成輸入段為輸出段,并且告訴鏈接器把這些輸出段放在存儲器的某個位置。 4.6.2 鏈接器的運行 鍵入命令:lnk55 鍵入命令: lnk55 a.obj b.obj -o link.out 鍵入命令:lnk55 linker.cmd 1、C55x鏈接器的三種運行方法: 鏈接器會提示如下信息: Command files:(要求鍵入一個或多個命令文件) Object files [.obj]:(要求鍵入一個或多個需要鏈接的目標文件) Output Files [a.out]:(要求鍵入一個鏈接器所生成的輸出文件名) Options:(要求附加一個鏈接選項) 在命令行中指定選項和文件名: 目標文件: a.obj、b.obj 命令選項: -o 輸出文件: link.out linker.cmd: 鏈接命令文件。 在執行上述命令之前,需將鏈接的目標文件、鏈接命令選項以及存儲器配置要求等編寫到鏈接命令文件linker.cmd中 例4-18,鏈接器命令文件舉例。 將兩個目標文件a.obj和b.obj進行鏈接,生成一個映像文件prog.map和一個可執行的輸出文件prog.out。 a.obj /* 第一個輸入文件 */ b.obj /*第二個輸入文件*/ –o prog.out /* 產生.out文件選項 */ –m prog.map /*產生.map文件選項 */ 2.鏈接命令選項 選 項 含 義 -a 生成一個絕對地址的、可執行的輸出模塊。如果既不用-a選項,也不用-r選項,鏈接器就像規定-a選項那樣處理。 -ar 生成一個可重新定位、可執行的目標模塊。這里采用了-a和-r兩個選項(可以分開寫成-a -r,也可以連在一起 寫作-ar),與-a選項相比,-ar選項還在輸出文件中保留有重新定位信息。 -c 使用TMS320C55x C/C++編譯器的ROM自動初始化模型所定義的鏈接約定 -cr 使用TMS320C55x C/C++編譯器的RAM自動初始化模型所定義的鏈接約定 -e global_symbol 定義一個全局符號,該符號指定輸出模塊的入口地址 -f fill_vale 對輸出模塊各段之間的空單元設置一個16位數值(fill_value),如果不用-f選項,則這些空單元都置0。 -h 使所有全局符號均為靜態的 選 項 含 義 -help 或? 顯示鏈接器所有命令行選項列表 –heap size 設置存儲器heap塊的大小(用于C/C++程序中動態存儲器分配),缺省值為2000字節 -i dir 更改搜索文檔庫算法,先到dir(目錄)中搜索。此選項必須出現在-l選項之前。 -l filename 命名一個文檔庫文件作為鏈接器的輸入文件;filename為文檔庫的某個文件名。此選項必須出現在-i選項之后。 -m filename 生成一個.map映像文件,filename是映像文件的文件名。.map文件中說明存儲器配置、輸入、輸出段布局以及外部符號重定位之后的地址等。 -o