




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
會計(jì)學(xué)1dsp程序編寫和調(diào)試環(huán)境4.1偽指令及相關(guān)概念1.偽指令\宏指令\匯編指令偽指令(Directives)是在匯編和連接的時候提供控制信息和數(shù)據(jù),并不產(chǎn)生目標(biāo)代碼。宏指令(MacroDirectives)用戶自己創(chuàng)建的指令,在匯編時將其展開并匯編為對應(yīng)的目標(biāo)代碼。如看門狗。匯編指令(AssemblerDirectives)在匯編時將產(chǎn)生一一對應(yīng)的目標(biāo)代碼。一.相關(guān)概念第1頁/共35頁2.段\頁段:目標(biāo)文件的最小單位稱為段,它是在存儲器中占有連續(xù)空間的代碼塊或數(shù)據(jù)塊。頁:64K的數(shù)據(jù)存儲器可以分為512個數(shù)據(jù)頁,每頁的大小是128字。3.輸出段在SECTIONS偽指令描述的輸出文件中定義的段,這些段被定義好了內(nèi)容以及怎么被分配。4.源列表文件將源文件進(jìn)行匯編,在產(chǎn)生目標(biāo)文件的同時,還可以產(chǎn)生源列表文件。它是在匯編器對源程序進(jìn)行匯編后產(chǎn)生的目標(biāo)代碼和源語句的列表文件??梢詢?yōu)化編譯器輸出。第2頁/共35頁5.宏定義與子程序的區(qū)別宏定義
為了簡化匯編語言源程序的書寫,通常把一些出現(xiàn)較為頻繁的程序段定義為宏指令,當(dāng)程序需要被執(zhí)行時,只需要一條宏調(diào)用語句。使用宏指令的優(yōu)點(diǎn)在于可以有效的縮短源程序的長度,節(jié)省代碼占用內(nèi)存空間,使得代碼易讀,同時減少了重復(fù)書寫引起的錯誤。子程序
是一個程序段,在程序中通過跳轉(zhuǎn)指令調(diào)用,在每次調(diào)用的時候,都需要把整個子程序復(fù)制到內(nèi)存中運(yùn)行,占用更多的內(nèi)存空間。6.SPC(SectionProgramCounters)匯編器為每個段保留一個獨(dú)立的程序計(jì)數(shù)器(SPC),匯編器從0地址開始處理每一個段,同一個段均按順序存放。連接器根據(jù)每個段在內(nèi)存圖的最后位置進(jìn)行再定位。第3頁/共35頁二.偽指令的功能偽指令的功能包括:1.把代碼和數(shù)據(jù)匯編到指定的段。2.為未定義的變量保存空間。3.控制列表(LIST)文件。4.分配存儲器。5.匯編條件塊。6.定義全局變量。7.指定匯編器能得到的宏。8.檢查符號調(diào)試信息。第4頁/共35頁三.偽指令的分類1.段定義偽指令:把匯編程序的各個部分與適當(dāng)?shù)亩危〝?shù)據(jù)塊或程序塊)聯(lián)系起來。.bss,.data,.text,.sect,.usect;2.初始化常數(shù)偽指令:在當(dāng)前段中匯編數(shù)值。.bes,.space,.byte,.field,.float,.bfloat,.int.word,.long,.blong,.string;3.段程序計(jì)數(shù)器排列偽指令:使段程序計(jì)數(shù)器SPC指向預(yù)定的位置(例如頁邊界)。.align,.even;第5頁/共35頁4.引用其他文件偽指令:提供或者獲取文件的信息。.copy,.include,.global,.def,.ref,.mlib;5.條件匯編偽指令:.if,.elseif,.else,.endif,.loop,.break,.endloop;6.匯編時的符號偽指令:把自定義的符號等同于常數(shù)值或者字符串;.asg,.eval,.set,.equ,.struct,.endstruct,.newblock7.其他偽指令:.end,.label,.mmregs,.port,.sblock,.version,.emsg,.wmsg;第6頁/共35頁四.常用的偽指令的講解1.align用途:.align偽指令重置短程序計(jì)數(shù)器(SPC),使其指向下一個頁邊界,以保證后面的代碼從一個數(shù)據(jù)頁開始。匯編器將原頁中間的未用空間用含NOP指令的字填充,一直填到該頁邊界。例5.10000 SPLK#0,AX ;0頁:0000~0079H0080 .align ;從下一頁00080H開始0080 … 0081 … 0082 … 0100 .align ;從下一頁00100H開始0100 SPLK#0,BX新的一頁第7頁/共35頁2
.word,.int把一個或多個16位的值存儲在當(dāng)前段連續(xù)的字中。例:
.word0FFFFH.word0FFFFH.word0FFFFH
第8頁/共35頁3.bss
用法:
.bss符號,字長[,塊標(biāo)志].bss
該指令表示在RAM中保留空間。(1)符號是一個必要參數(shù),它指向.bss保留空間的第一個地址。(2)字長也是必需參數(shù),它是一個絕對表達(dá)式,表示匯編器在.bss段內(nèi)分配多個字。(3)塊標(biāo)志是可選參數(shù),如果不指定塊標(biāo)志或指定為0,則匯編器在當(dāng)前.bss段SPC處分配空間;如果塊標(biāo)志為1,則匯編器將檢查當(dāng)前SPC和頁邊界之間是否有足夠的空間為變量分配,若有就連續(xù)分配,若無就從下頁開始分配。第9頁/共35頁4.copy,.include
當(dāng)匯編器遇到.copy和.include偽指令時,將停止匯編當(dāng)前的源文件語句,而去編譯.copy和.include文件中的語句,然后繼續(xù)匯編.copy和.include后開始的源文件語句。
.copy,.include告訴編譯器從其他文件中讀入源語句。區(qū)別在于:.copy讀入的源語句將在列表文件中列出,而.include偽指令讀入的不在列表文件中列出。5.data,.text .data:是數(shù)據(jù)段定義偽指令。它告訴匯編器把源代碼匯編到.data段中,且.data成為當(dāng)前段。該段通常用來存放數(shù)據(jù)表或初始化前的變量。
.text:定義.text段中的代碼部分,該部分為可執(zhí)行代碼。.text段是默認(rèn)段,若匯編開始不指定其他段,就自動匯編到該段。第10頁/共35頁6.title用法:.title“字符串” 該偽指令為每一頁輸出列表文件打印標(biāo)題(字符串的內(nèi)容)。字符串不能超過65個字符,匯編器在隨后的頁面中打印出標(biāo)題。其作用是生成標(biāo)志符號,方便通過用反匯編器結(jié)合.title所定義字符串來觀察生成的*.out文件的代碼。7.def,.ref,.global .def,.ref,.global偽指令所指定的符號為全局符號,這些全局符號可以在外部定義或在外部被引用。
.def指定在當(dāng)前模塊中定義且可以在其他模塊中使用的符號。匯編器將該符號引入符號表。
.ref指定一個或多個在當(dāng)前模塊中使用但在其他模塊中定義的符號。一般與.def定義的符號對應(yīng)。匯編器將該符號標(biāo)記為未定義的外部符號放入目標(biāo)符號表,由連接器在連接時處理該符號的定義。
.global同時具備.def,.ref的功能,需要時可代替它們。第11頁/共35頁8.usect .sect,8.1
.usect用法: 符號名
.usect“段名”,字長[,塊邊界] .usect為一個未命名段中的變量保留空間。類似.bss偽指令(都為保留空間,但.usect可以在內(nèi)存中任意定義,而.bss則是獨(dú)立的)。(1)符號名指向.usect指定的第一個單元,它代表所預(yù)留空間的變量名。(2)段名告訴編譯器從哪一個命名段開始保留空間。段名放在雙引號內(nèi),前8個字符有效。(3)字長定義了該段保留的字?jǐn)?shù)空間,可以用表達(dá)式表示。(4)塊邊界為可選項(xiàng),如果為非0,則改段為分塊段。表示在進(jìn)行地址分配時,盡量不超過一頁,若超過一頁時,則從另一頁的邊界開始。用.usect對同一段名重復(fù)定義,可以將連續(xù)存放在存儲器的若干變量定義在同一個段內(nèi)。第12頁/共35頁本例中用.usect偽指令定義兩個未初始化的命名段var1和var2。符號ptr和array分別指向var1段內(nèi)1個字和100個字的第一個字。dflag指向var1段中50個字塊中的第一個字。
vec指向var2段中50個字塊中的第一個字。.usect執(zhí)行之后的存儲器分布示意圖第13頁/共35頁8.2.sect用法:.sect “段名”定義初始化命名段。段名必須用引號引起。該段中可包括代碼或者數(shù)據(jù),類似于.text和.data。9.set偽指令: 用法:符號.set數(shù)值.set定義的符號在符號表中,不能重復(fù)定義。在數(shù)值表達(dá)式中的符號必需事先定義。用.def或.global可以使用由.set定義的符號被其他模塊調(diào)用。例: IMR.set0004h;InterruptMaskRegister
IFR.set0006h;InterruptFlagRegister 第14頁/共35頁10.byte,.float,.bfloat,.int,.word,.long,.blong,.string,.field10.1.byte用法:[標(biāo)號].byte數(shù)值1[,數(shù)值2,……].byte指令將一個或者多個8位的值植入當(dāng)前段的連續(xù)字中。數(shù)值可以是常數(shù),表達(dá)式,字符串。使用標(biāo)號的時候,匯編器指向第一個.byte位置。每個.byte指令可以定義100個設(shè)置,若有字符串,則總數(shù)值長度不超過200個字符。例如:
0100 strx .byte ”ab” 0101 …后面幾個指令用法也基本類似,但數(shù)據(jù)類型不同。第15頁/共35頁五.DSP匯編的工作原理1.匯編編譯連接:結(jié)合圖進(jìn)行講述第16頁/共35頁編寫C語言源程序優(yōu)化ANSIC編譯器匯編語言匯編器生成目標(biāo)文件鏈接器生成TMS320匯編文件編寫TMS320匯編源程序宏匯編源文件文檔管理器宏匯編庫輸出執(zhí)行文件調(diào)試器TMS320目標(biāo)系統(tǒng)寫EEPROM軟件仿真軟件開發(fā)系統(tǒng)評測模塊EVM系統(tǒng)仿真XDS軟件系統(tǒng)設(shè)計(jì)框圖第17頁/共35頁2.COFF文件格式:CommonObjectFileFormat
使用匯編器可以將匯編語言源程序匯編成為目標(biāo)文件,用連接器將若干個目標(biāo)文件連接成一個可以被TMS320C1X/C2000/C5X芯片執(zhí)行的可執(zhí)行文件。這些目標(biāo)文件的格式稱為通用目標(biāo)文件格式COFF。
COFF文件總包括3個默認(rèn)的段: 文本段(.text):通常包括可執(zhí)行代碼。 數(shù)據(jù)段(.data):通常包括已初始化的數(shù)據(jù)。 預(yù)留段(.bss):通常保留用于未初始化變量的空間。第18頁/共35頁目標(biāo)文件(.obj)中段Section與目標(biāo)內(nèi)存之間的關(guān)系第19頁/共35頁4.2簡單的程序設(shè)計(jì)過程在程序設(shè)計(jì)時,一般來說需要進(jìn)行規(guī)范的文件管理,使得源代碼組織清晰易讀,有利于交流和加快開發(fā)的進(jìn)度。1.如果需要在多個模塊中使用相同的設(shè)置和中斷處理,通常將芯片映射到數(shù)據(jù)空間的寄存器地址及標(biāo)號、預(yù)置變量和常數(shù)的空間等設(shè)置語句集中在一個文件中,稱為I/O寄存器頭文件(如F2407REG.h)。2.將定義程序、數(shù)據(jù)和I/O空間地址塊大小和位置的偽指令集中在一個文件稱為命令文件(如F2407.cmd)。
[以上兩個合稱為公用文件。]第20頁/共35頁3.應(yīng)用程序采用.copy或.include偽指令將I/O寄存器頭文件復(fù)制到應(yīng)用程序中,形成一個匯編源程序(如delay.asm)。再由匯編器進(jìn)行匯編后生成一個目標(biāo)文件(如delay.obj),最后連接器把該目標(biāo)文件和命令文件相連接,生成可執(zhí)行文件(如delay.out).第21頁/共35頁4.命令文件*.cmd文件的介紹:
TMS320系列芯片的存儲器配置隨應(yīng)用的不同而不同。用鏈接器偽指令MEMORY可以確定目標(biāo)系統(tǒng)的各種內(nèi)存配置。當(dāng)MEMORY決定了存儲器模式后,可以用鏈接器偽指令SECTIONS確定連接器組合輸入段的方法和輸出段在存儲器中的位置。第22頁/共35頁VECTBLK_B1PMBLK_B2myVARBLK_B0BUFFERSARAM_DCACHEEX2_DMPACKET第23頁/共35頁5.1MEMORY偽指令確定在目標(biāo)系統(tǒng)中具有物理位置并且可以被程序使用的存儲器范圍,該指令并不對存儲器進(jìn)行邏輯配置。TMS320器件具有獨(dú)立的程序存儲器,數(shù)據(jù)存儲器和I/O存儲器空間,連接器允許用戶使用MEMORY偽指令的PAGE選項(xiàng)單獨(dú)配置這些地址空間。第24頁/共35頁(1)MEMORY的一般格式:
MEMORY { PAGE0:存儲器名1[(屬性)]:ORIGIN=常數(shù),LENGTH=常數(shù)
. . . PAGEn:存儲器名n[(屬性)]:ORIGIN=常數(shù),LENGTH=常數(shù)
}第25頁/共35頁說明:1.PAGE:定義一個存儲空間,用戶可以定義多達(dá)255頁。PAGE0定義程序存儲器,PAGE1定義數(shù)據(jù)存儲器。每個PAGE代表一個完全獨(dú)立的地址空間。在PAGE0上以配置的存儲器可以和在PAGE1上已配置的存儲器重疊。在同一頁中的存儲器名不能有相同的名字,且不能重疊。2.ORIGIN:指定存儲器區(qū)域的起始地址,可以是16位常數(shù)、十進(jìn)制,八進(jìn)制或者十六進(jìn)制常數(shù)。LENGTH指定存儲器的長度。第26頁/共35頁5.2SECTIONS偽指令:SECTIONS功能:1描述輸入段怎樣被組合到輸出段內(nèi);2定義在執(zhí)行程序中的輸出段;3規(guī)定輸出段在存儲器中的位置;4允許重新命名輸出段;格式:SECTIONS{ 段名1:[特性1,特性2,…]段名1:[特性1,特性2,…] ……}特性列表第27頁/共35頁5.2.1SECTIONS偽指令中的特性列表選項(xiàng)有以下幾種:裝載地址:規(guī)定段將被裝載在存儲器中的位置。句法如下:
load
>allocation
或load
{}>allocation
注:allocation是MEMORY偽指令所定義的給輸出段分配存儲單元。具體寫法有很多種:
.text:{}>PMPAGE0.text:>PMPAGE0第28頁/共35頁*.cmd文件的例子例:F2407.cmdMEMORY{PAGE0: /*PROGRAMMEMORY*/ VECS :ORIGIN=0000H, LENGTH=0044H PM :ORIGIN=00100H,LENGTH=7000HPAGE1: /*DATAMEMORY*/ BLK_B2 :ORIGIN=0060H, LENGTH=20H /*BlockB2*/ BLK_B0 :ORIGIN=0200H,LENGTH=100H /*BlockB0*/ BLK_B1 :ORIGIN=0300H,LENGTH=100H /*BlockB1*/ SARAM_D :ORIGIN=0800H,LENGTH=0800H /*2KSARAMindataspace*/ EX2_DM :ORIGIN=8000H,LENGTH=8000H /*ExternaldataRAM*/
}第29頁/共35頁SECTIONS { vector :{}>VECSPAGE0 /*ASVECTOR
/*ISINCLUDE /*INMAINPROGRAM*//*ItCAN'TBEALLOCATEINCMDFILE*/ .text :{}>PM PAGE0.bss :{}>BLK_B0 PAGE1.data :{}>BLK_B1 PAGE1
myVAR :{}>BLK_B2 PAGE
1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙江省建筑安全員《B證》考試題庫
- 《公共政策學(xué)》題庫及答案 2
- 西安信息職業(yè)大學(xué)《商業(yè)倫理》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年山東省聊城市高唐縣第二中學(xué)高三上學(xué)期12月月考?xì)v史試卷
- 武漢船舶職業(yè)技術(shù)學(xué)院《R語言與數(shù)據(jù)可視化》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南財(cái)經(jīng)工業(yè)職業(yè)技術(shù)學(xué)院《斜視弱視學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025青海省安全員《C證》考試題庫
- 濰坊理工學(xué)院《經(jīng)濟(jì)統(tǒng)計(jì)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 臨夏現(xiàn)代職業(yè)學(xué)院《數(shù)字信號處理A》2023-2024學(xué)年第二學(xué)期期末試卷
- 平頂山學(xué)院《安全類專業(yè)寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 統(tǒng)編版小學(xué)語文一年級下冊全冊教學(xué)課件(2024年春季版)
- GB/T 17758-2023單元式空氣調(diào)節(jié)機(jī)
- 2023新能源場站一次調(diào)頻控制系統(tǒng)技術(shù)規(guī)范
- 醫(yī)療器械經(jīng)營質(zhì)量管理制度范本
- 北京匯文中學(xué)新初一均衡分班語文試卷
- 主管護(hù)師-護(hù)理學(xué)專業(yè)知識-外科護(hù)理學(xué)-第四十五章骨與關(guān)節(jié)損傷病人的護(hù)理
- 模塊1 緒論《地下鐵道施工技術(shù)》教學(xué)課件
- 部門職能界定與劃分
- 泡沫鉆井技術(shù)
- 特殊特性關(guān)鍵工序重要特性區(qū)別教學(xué)課件
- 實(shí)驗(yàn)診斷-腦脊液常規(guī)及生化檢查(診斷學(xué)課件)
評論
0/150
提交評論