DSP精講匯編語(yǔ)言程序開(kāi)發(fā)工具課件_第1頁(yè)
DSP精講匯編語(yǔ)言程序開(kāi)發(fā)工具課件_第2頁(yè)
DSP精講匯編語(yǔ)言程序開(kāi)發(fā)工具課件_第3頁(yè)
DSP精講匯編語(yǔ)言程序開(kāi)發(fā)工具課件_第4頁(yè)
DSP精講匯編語(yǔ)言程序開(kāi)發(fā)工具課件_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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)介

1、2022年8月4日DSP原理及應(yīng)用1第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.1 TMS320C54x軟件開(kāi)發(fā)過(guò)程 C54x的應(yīng)用軟件開(kāi)發(fā)主要完成以下工作:(1) 選擇編程語(yǔ)言編寫(xiě)源程序 C54x提供2種編程語(yǔ)言,即匯編語(yǔ)言和C/C+語(yǔ)言。 對(duì)于完成一般功能的代碼,這兩種語(yǔ)言都可使用,但對(duì)于一些運(yùn)算量很大的關(guān)鍵代碼,最好采用匯編語(yǔ)言來(lái)完成,以提高程序的運(yùn)算效率。(2) 選擇開(kāi)發(fā)工具和環(huán)境 C54x提供了兩種開(kāi)發(fā)環(huán)境。即非集成開(kāi)發(fā)環(huán)境和集成開(kāi)發(fā)環(huán)境CCS。 第1頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用2第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.2 匯編語(yǔ)言程序的編輯、匯編和鏈接過(guò)程 示意圖匯編器調(diào)試程序鏈接

2、器文本編輯器.asm源文件.obj目標(biāo)文件.out輸出文件. cmd鏈接命令文件. lst列表文件. map存儲(chǔ)器映像文件十六進(jìn)制轉(zhuǎn)換程序HEX500- o- m- l第2頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用3第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.3 COFF的一般概念 匯編器和鏈接器生成的目標(biāo)文件,是一個(gè)可以由C54x器件執(zhí)行的文件。這些目標(biāo)文件的格式稱之為公共目標(biāo)文件格式(COFF)。 在編寫(xiě)匯編語(yǔ)言程序時(shí),COFF采用代碼段和數(shù)據(jù)段的形式,以便于模塊化的編程,使編程和管理變得更加方便。 這些代碼段和數(shù)據(jù)段簡(jiǎn)稱為段。匯編器和鏈接器提供一些偽指令來(lái)建立和管理各種各樣的段。 第3頁(yè),共3

3、0頁(yè)。2022年8月4日DSP原理及應(yīng)用4第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.1 COFF文件的基本單元 1. 段(sections) 段是存儲(chǔ)器中占據(jù)相鄰空間的代碼或數(shù)據(jù)塊。一個(gè)目標(biāo)文件中的每個(gè)段都是分開(kāi)的和各不相同的。 COFF目標(biāo)文件都包含以下3種形式的段: .text 段(文本段),通常包含可執(zhí)行代碼; .data 段(數(shù)據(jù)段),通常包含初始化數(shù)據(jù); .bss 段(保留空間段),通常為未初始化變量保留存儲(chǔ)空間。第4頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用5第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.1 COFF文件的基本單元 2. 段的基本類型 COFF目標(biāo)文件中的段有兩種基本類型。

4、初始化段 未初始化段(1) 初始化段 初始化段中包含有數(shù)據(jù)或程序代碼。主要有: .text段已初始化段; .data段已初始化段; .sect段已初始化段,由匯編器偽指令建立 的自定義段。 第5頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用6第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.1 COFF文件的基本單元 2. 段的基本類型 (2) 未初始化段 在存儲(chǔ)空間中,為未初始化數(shù)據(jù)保留存儲(chǔ)空間。它包括: .bss段未初始化段; .usect段未初始化段,由匯編命令建立的命 名段(自定義段)。第6頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用7第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具3. 段與目標(biāo)存儲(chǔ)器的對(duì)應(yīng)關(guān)系

5、目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器之間的關(guān)系 目標(biāo)文件目標(biāo)存儲(chǔ)器.bss.data.textRAME2PROMROM第7頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用8第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具(1) .bss偽指令1. 未初始化段 用于在bss段中保留若干個(gè)空間。 格式: .bss 符號(hào), 字?jǐn)?shù)符號(hào)對(duì)應(yīng)于保留的存儲(chǔ)空間第一個(gè)字的變量名稱。 可以讓其他段引用,也可以用.global命令定義為全 局符號(hào)。 字?jǐn)?shù)表示在bss段或標(biāo)有名字的段中保留若干個(gè)存儲(chǔ)單元。 第8頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用9第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具1. 未初始化段 (2) .usect偽指令 用于為指定的

6、命名段保留若干個(gè)空間。 格式: 符號(hào) .usect “段名”, 字?jǐn)?shù)段名程序員為未初始化的命名段定義的名字。 第9頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用10第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具 已初始化命令的句法: 2. 已初始化段 .text 段起點(diǎn) .data 段起點(diǎn) .sect “段名”,段起點(diǎn)段起點(diǎn)是任選項(xiàng)。 若選用,它為段程序計(jì)數(shù)器SPC定義一個(gè)起始值。 若默認(rèn),則SPC從0開(kāi)始。 第10頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用11第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.2 匯編器對(duì)段的處理 命名段由用戶指定,與默認(rèn)的.text,.data和.bss段的使用相同,但它們被分開(kāi)匯

7、編。 可用.usect和.sect兩個(gè)偽指令產(chǎn)生命名段。3. 命名段(自定義段) 第11頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用12第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具 .usect偽指令產(chǎn)生類似.bss的段,為變量在RAM中保留存儲(chǔ)空間。 .sect偽指令產(chǎn)生類似.text和.data的段,可以包含代碼或數(shù)據(jù)。.sect偽指令產(chǎn)生可重新定位地址的命名段。3. 命名段 產(chǎn)生命名段偽指令格式: 符號(hào) .usect “段名”,字?jǐn)?shù) .sect “段名” 可以產(chǎn)生多達(dá)32767個(gè)不同的命名段。段名可長(zhǎng)達(dá)200個(gè)字符。 第12頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用13第4章 匯編語(yǔ)言程序開(kāi)發(fā)

8、工具經(jīng)匯編后,得列表文件(部分): 2 *3 * 匯編一個(gè)初始化表到.data段 *4 *5 0000 .data6 0000 0044 coeff .word 044h,055h,066h 0001 0055 0002 00667 *8 * 在.bss段中為變量保留空間 *9 *10 0000 .bss buffer,811 *12 * 仍然在.data 段中 *13 *14 0003 0456 prt .word 0456h目標(biāo)代碼段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088 沒(méi)

9、有數(shù)據(jù)保留10個(gè)字5 0000 .data6 0000 0044 coeff .word 044h,055h,066h10 0000 .bss buffer,814 0003 0456 prt .word 0456h.data 004400550066.bss 沒(méi)有數(shù)據(jù)保留8個(gè)字0456第13頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用14第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具15 *16 * 匯編代碼到.text段 *17 *18 0000 .text19 0000 100d add: LD 0Dh,A20 0001 f010 aloop: SUB #1, A 0002 0001 21 0003

10、f842 BC aloop,AGEQ 0004 0001 22 *23 * 匯編另一個(gè)初始化表到.data 段 * 24 *25 0004 .data 26 0004 00cc ivals .word 0CCh,0DDh,0EEh 0005 00dd 0006 00ee27 *28 * 為更多的變量定義另一個(gè)段 *29 *30 0000 var2 .usect “newvars”,2 31 0001 inbuf .usect “newvars”,8 目標(biāo)代碼段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00e

11、e.data00440088 沒(méi)有數(shù)據(jù)保留8個(gè)字.bss沒(méi)有數(shù)據(jù)保留10個(gè)字.text 18 0000 .text19 0000 100d add: LD 0Dh,A100d20 0001 f010 aloop: SUB #1, Af010000121 0003 f842 BC aloop,AGEQf842000125 0004 .data26 0004 00cc ivals .word 0CCh,0DDh,0EEh.data 00cc00dd00ee30 0000 var2 .usect “newvars”,2newvars 保留2個(gè)字31 0001 inbuf .usect “newvar

12、s”,8保留8個(gè)字第14頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用15第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具32 *33 * 匯編更多代碼到.text段 *34 *35 0005 .text 36 0005 110a mpy: LD 0Ah,B 37 0006 f166 mloop MPY #0Ah,B 0007 000a 38 0008 f868 BC mloop,BNOV 0009 0006 39 *40 * 為中斷向量.vectors定義一個(gè)自定義段 * 41 *42 0000 .sect “vectors” 43 0000 0044 .word 044h,088h 0001 0088 目標(biāo)

13、代碼段名100df0100001f8420001110af166000aF8680006.text004400550066045600cc00dd00ee.data00440088 沒(méi)有數(shù)據(jù)保留8個(gè)字.bss沒(méi)有數(shù)據(jù)保留10個(gè)字newvars35 0005 .text.text 36 0005 110a mpy: LD 0Ah,B 110a37 0006 f166 mloop MPY #0Ah,Bf168000a38 0008 f868 BC mloop,BNOVf868000642 0000 .sect “vectors”vectors 43 0000 0044 .word 044h,088

14、h00440088第15頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用16第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.3.3 鏈接器對(duì)段的處理 鏈接器有2條偽指令支持上述任務(wù): MEMORY偽指令用來(lái)定義目標(biāo)系統(tǒng)的存儲(chǔ)器配置空間,包括對(duì)存儲(chǔ)器各部分命名,以及規(guī)定它們的起始地址和長(zhǎng)度。 SECTIONS偽指令用來(lái)指定鏈接器將輸入段組合成輸出段方式,以及輸出段在存儲(chǔ)器中的位置,也可用于指定子段。 若未使用偽指令,則鏈接器將使用目標(biāo)處理器默認(rèn)的方法將段放入存儲(chǔ)空間。 第16頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用17第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具 默認(rèn)的存儲(chǔ)器分配過(guò)程:File1.obj.text1.d

15、ata1.bss1table_1 (初始化的命名段)u_vars1 (未初始化的命名段)File2.obj.text2.data2.bss2table_2 (初始化的命名段)u_vars2 (未初始化的命名段)FFT(初始化的命名段)程序存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器.text.text1.text2.data.data1.data2 .bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT沒(méi)有使用沒(méi)有配置沒(méi)有配置沒(méi)有使用第17頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用18第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.4.3 匯編偽指令 1定義段的偽指

16、令 用于定義相應(yīng)的匯編語(yǔ)言程序的段。 助記符及語(yǔ)法格式 說(shuō) 明 .bss symbol, size in words ,blocking , alignment 為未初始化的數(shù)據(jù)段.bss保留存儲(chǔ)空間。 .data 指定.data后面的代碼為數(shù)據(jù)段,通常包含初始化的數(shù)據(jù)。 .sect “section name” 定義初始化的命名段,可以包含可執(zhí)行代碼或數(shù)據(jù)。 .text 指定.text后面的代碼為文本段,通常包含可執(zhí)行的代碼。 symbol .usect “section name”, size in words ,blocking ,alignment flag 為未初始化的命名段保留空間

17、。類似.bss偽指令,但允許保留與.bss段不同的空間。 第18頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用19第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.4.2】 段偽指令的使用。 1 * 2 * 開(kāi)始匯編到.text段 * 3 * 4 000000 .text 5 000000 0001 .word 1,2 000001 0002 6 000002 0003 .word 3,4 000003 0004 7 1定義段的偽指令 ;定義文本段 ;初始化值為1,2 ;初始化值為3,4第19頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用20第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.4.2】 段偽指令的使用。

18、 8 * 9 * 開(kāi)始匯編到.data段 * 10 * 11 000000 .data 12 000000 0009 .word 9,10 000001 000A 13 000002 000B .word 11,12 000003 000C 14 1定義段的偽指令 ;定義數(shù)據(jù)段 ;初始化值為9,10 ;初始化值為11,12第20頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用21第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.4.2】 段偽指令的使用。 15 * 16 * 開(kāi)始匯編到命名的初始化段 * 17 * var_defs * 18 * 19 000000 .sect “var_defs” 20 0

19、00000 0011 .word 17,18 000001 0012 21 1定義段的偽指令 ;定義命名段 ;初始化值為17,18第21頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用22第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.4.2】 段偽指令的使用。 22 * 23 * 再繼續(xù)匯編到.data段 * 24 * 25 000004 .data 26 000004 000D .word 13,14 000005 000E 27 000000 .bss sym,1928 000006 000F .word 15,16 000007 001029 1定義段的偽指令 ;繼續(xù)匯編數(shù)據(jù)段 ;初始化值為13,

20、14 ;定義未初始化段,保留19個(gè)空間 ;仍然在.data段中 ;初始化值為15,16第22頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用23第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.4.2】 段偽指令的使用。 30 * 31 * 再繼續(xù)匯編到.text段 * 32 * 33 000004 .text 34 000004 0005 .word 5,6 000005 0006 35 000000 usym .usect “xy”,2036 000006 0007 .word 7,8 000007 0008 1定義段的偽指令 ;繼續(xù)匯編文本段 ;初始化值為5,6 ;定義xy段,保留20個(gè)空間 ;仍然在

21、.text段中 ;初始化值為7,8第23頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用24第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.4.3 匯編偽指令 2初始化常數(shù)的偽指令 用于為當(dāng)前的段匯編常數(shù)值。 助記符及語(yǔ)法格式 說(shuō) 明 .byte value , value 初始化當(dāng)前段里的一個(gè)或多個(gè)連續(xù)字。每個(gè)值的寬度被限制為8位。 即把8位的值放入當(dāng)前段的連續(xù)字。 .char value , value 初始化當(dāng)前段里的一個(gè)或多個(gè)連續(xù)字。每個(gè)值的寬度被限制為8位。 即把8位的值放入當(dāng)前段的連續(xù)字。 .field value ,size in bits 初始化一個(gè)可變長(zhǎng)度的域。將單個(gè)值放入當(dāng)前字的指定位域中

22、。 .float value , value 初始化一個(gè)或多個(gè)IEEE的單精度(32位) 浮點(diǎn)數(shù),即計(jì)算浮點(diǎn)數(shù)的 單精度(32位)IEEE浮 .xfloat value , value 初始化一個(gè)或多個(gè)IEEE的單精度(32位) 浮點(diǎn)數(shù),即計(jì)算浮點(diǎn)數(shù)的 單精度(32位)IEEE浮點(diǎn)表示,并將它保存在當(dāng)前段的兩個(gè)連續(xù)的 字中。不自動(dòng)對(duì)準(zhǔn)最接近的長(zhǎng)字邊界。 第24頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用25第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具2初始化常數(shù)的偽指令 助記符及語(yǔ)法格式 說(shuō) 明 .int value ,value 初始化一個(gè)或多個(gè)16位整數(shù)。 即把16位的值放到當(dāng)前段的 連續(xù)的字中。 .

23、short value ,value 初始化一個(gè)或多個(gè)16位整數(shù)。 即把16位的值放到當(dāng)前段的連續(xù)的字中。 .word value ,value 初始化一個(gè)或多個(gè)16位整數(shù)。 即把16位的值放到當(dāng)前段的連續(xù)的字中。 .double value ,value 初始化一個(gè)或多個(gè)雙精度(64位) 浮點(diǎn)數(shù)。 即計(jì)算浮點(diǎn)數(shù)的單精度(32位) 浮點(diǎn)表示, 并將它存儲(chǔ)在當(dāng)前段的2個(gè)連續(xù)的字中。 該偽指令自動(dòng)對(duì)準(zhǔn)長(zhǎng)字邊界。 .long value ,value 初始化一個(gè)或多個(gè)32位整數(shù)。 即把32位的值放到當(dāng)前段的2個(gè)連續(xù)的字中。 .string “string ,“string” 初始化一個(gè)或多個(gè)字符串。

24、 把8位字符從一個(gè)或多個(gè)字符串放進(jìn)當(dāng)前段。 第25頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用26第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具【例4.4.3】比較.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ù)字中。word 15 0 15 00,1

25、 0 0 A A 0 0 B B .word:將一個(gè)或多個(gè)16位值放入當(dāng)前段的連續(xù)字中。2 0 C C C .xlong:將32位值放入當(dāng)前段的2個(gè)連續(xù)的字中,先存最高有效位。3,4 0 E E E E F F F .long:將32位值放入當(dāng)前段的2個(gè)連續(xù)的字中,先存最高有效位。6,7 E E E E F F F F .int:將一個(gè)或多個(gè)16位值放入當(dāng)前段的連續(xù)的字中。8 D D D D .xfloat:初始化單精度(32位) 浮點(diǎn)數(shù),并保存在當(dāng)前段的兩個(gè)連續(xù)的字中。9,A 3 F F F F F A C .float:初始化單精度(32位) 浮點(diǎn)數(shù),并保存在當(dāng)前段的兩個(gè)連續(xù)的字中。C,D

26、 3 F F F F F A C .string:將一個(gè)或多個(gè)字符串中的8位字符放入當(dāng)前段中。heE,F 0 0 6 8 0 0 6 5lp10,11 0 0 6 C 0 0 7 0第26頁(yè),共30頁(yè)。2022年8月4日DSP原理及應(yīng)用27第4章 匯編語(yǔ)言程序開(kāi)發(fā)工具4.4.4 宏定義和宏調(diào)用 C54x匯編器支持宏指令語(yǔ)言。如果程序中有一段程序需要執(zhí)行多次,就可以把這一段程序定義(宏定義)為一條宏指令,然后在需要重復(fù)執(zhí)行這段程序的地方調(diào)用這條宏指令(宏調(diào)用)。利用宏指令,可以使源程序變得簡(jiǎn)短。 宏的使用分以下3個(gè)步驟: 定義宏 在調(diào)用宏時(shí),必須首先定義宏; 調(diào)用宏 在定義宏之后,可在源程序中調(diào)用宏; 擴(kuò)展宏 在源

溫馨提示

  • 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)論