版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、DSP匯編偽指令集講解,一 相關(guān)的概念:,1.偽指令宏指令匯編指令 偽指令: 是在匯編和連接的時候提供控制信息和數(shù)據(jù),并不產(chǎn)生目標(biāo)代碼。 宏指令: 用戶自己創(chuàng)建的指令,在匯編時將其展開并匯編為對應(yīng)的目標(biāo)代碼。 匯編指令: 在匯編時將產(chǎn)生一一對應(yīng)的目標(biāo)代碼。,2.段頁 段:目標(biāo)文件的最小單位稱為段,它是在存儲器中占有連續(xù)空間的代碼塊或數(shù)據(jù)塊。 頁:64K的數(shù)據(jù)存儲器可以分為512個數(shù)據(jù)頁,每頁的大小是128字。 3. 輸出段: 在SECTIONS偽指令描述的輸出文件中定義的段,這些段被定義好了內(nèi)容以及怎么被分配。 4.源列表文件: 將源文件進行匯編,在產(chǎn)生目標(biāo)文件的同時,還可以產(chǎn)生源列表文件。它
2、是在匯編器對源程序進行匯編后產(chǎn)生的目標(biāo)代碼和源語句的列表文件。可以優(yōu)化編譯器輸出。,5. 宏定義與子程序的區(qū)別: 宏定義 為了簡化匯編語言源程序的書寫,通常把一些出現(xiàn)較為頻繁的程序段定義為宏指令,當(dāng)程序需要被執(zhí)行時,只需要一條宏調(diào)用語句。使用宏指令的優(yōu)點在于可以有效的縮短源程序的長度,節(jié)省代碼占用內(nèi)存空間,使得代碼易讀,同時減少了重復(fù)書寫引起的錯誤。 子程序 是一個程序段,在程序中通過跳轉(zhuǎn)指令調(diào)用,在每次調(diào)用的時候,都需要把整個子程序復(fù)制到內(nèi)存中運行,占用更多的內(nèi)存空間。 6. SPC介紹: 匯編器為每個段保留一個獨立的程序計數(shù)器(SPC),匯編器從0地址開始處理每一個段,同一個段均按順序存放
3、。連接器根據(jù)每個段在內(nèi)存圖的最后位置進行再定位。,二. DSP匯編的工作原理:,1. 匯編編譯連接:結(jié)合圖進行講述,2. COFF文件格式:Common Object File Format 使用匯編器可以將匯編語言源程序匯編成為目標(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):通常保留用于未初始化變量的空間。,三. 偽指令的功能,偽指令的功
4、能包括: 1.把代碼和數(shù)據(jù)匯編到指定的段。 2.為未定義的變量保存空間。 3.控制列表文件。 4.分配存儲器。 5.匯編條件塊。 6.定義全局變量。 7.指定匯編器能得到的宏。 8.檢查符號調(diào)試信息。,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.段程序計數(shù)器排列偽指令:使段程序計數(shù)器
5、SPC指向預(yù)定的位置(例如頁邊界)。 .align, .even; 4.輸出列表格式偽指令:控制列表文件的格式。 .drlist, .drnolist, .list, .fcnolist, .length, .width,.list, .nolist, .mlist, .mnolist, .opinion, .page, .sslist, .ssnolist, .tab, .title,四. 偽指令的分類,5.引用其他文件偽指令:提供或者獲取文件的信息。 .copy, .include, .global, .def, .ref, .mlib; 6.條件匯編偽指令: .if, .elseif,
6、.else, .endif, .loop, .break, .endloop; 7.匯編時的符號偽指令:把自定義的符號等同于常數(shù)值或者字符串; .asg, .eval, .set, .equ, .struct, .endstruct, .newblock 8.其他偽指令:.end, .label, .mmregs, .port, .sblock, .version, .emsg, .wmsg;,五. 常用的偽指令的講解:,1 .align 用途:.align偽指令重置短程序計數(shù)器(SPC),使其指向下一個頁邊界,以保證后面的代碼從一個數(shù)據(jù)頁開始。匯編器將原頁中間的未用空間用含NOP指令的字填充
7、,一直填到該頁邊界。 例5.1 00000004.byte4 ;0頁:00000079H 0080 .align ;從下一頁00080H開始 00804572.string“Error” ; “Er” 0081726F ; “ro” 00827200 ; “r” 0100.align ;從下一頁00100H開始 01000006.byte6,新的一頁,2 .bes 在當(dāng)前段中保留一個指定數(shù)目的位數(shù),并用0填充。用位數(shù)(n*16)可以保留n個字單元。 例5.2 00070100.word 100h, 200h 00080200 0009 Res_1.space 17 000B000F.word
8、15 000C Res_2.bes 20 000E00BA.byte 0BAh 000F Res_3.space 7*16,3 .bss 用法: .bss 符號,字長, 塊標(biāo)志 .bss 該指令表示在RAM中保留空間。 (1)符號是一個必要參數(shù),它指向.bss保留空間的第一個地址。字長也是必需參數(shù),它是一個絕對表達(dá)式,表示匯編在.bss段內(nèi)分配多個字。 (2)字長也是必需參數(shù),它是一個絕對表達(dá)式,表示匯編器在.bss段內(nèi)分配多個字。 (3)塊標(biāo)志是可選參數(shù),如果不指定塊標(biāo)志或指定為0,則匯編器在當(dāng)前.bss段SPC處分配空間;如果塊標(biāo)志為1,則匯編器將檢查當(dāng)前SPC和頁邊界之間是否有足夠的空間
9、為變量分配,若有就連續(xù)分配,若無就從下頁開始分配。,4 .copy, .include .copy, .include告訴編譯器從其他文件中讀入源語句。區(qū)別在于:.copy讀入的源語句將在列表文件中列出,而.include偽指令讀入的不在列表文件中列出。 當(dāng)匯編器遇到.copy和 .include偽指令時,將停止匯編當(dāng)前的源文件語句,而去編譯.copy和 .include文件中的語句,然后繼續(xù)匯編.copy和 .include后開始的源文件語句。 5 .data , .text .data是數(shù)據(jù)段定義偽指令。它告訴匯編器把源代碼匯編到.data段中,且.data成為當(dāng)前段。該段通常用來存放數(shù)據(jù)
10、表或初始化前的變量。 .text:定義.text段中的代碼部分,該部分為可執(zhí)行代碼。.text段是默認(rèn)段,若匯編開始不指定其他段,就自動匯編到該段。,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)前模
11、塊中定義且可以在其他模塊中使用的符號。匯編器將該符號引入符號表。 .ref指定一個或多個在當(dāng)前模塊中使用但在其他模塊中定義的符號。一般與.def定義的符號對應(yīng)。匯編器將該符號標(biāo)記為未定義的外部符號放入目標(biāo)符號表,由連接器在連接時處理該符號的定義。 .global同時具備.def , .ref的功能,需要時可代替它們。,8 .sect , .usect - 8.1 .usect用法: 符號名 .usect “段名”,字長, 塊邊界 .usect為一個未命名段中的變量保留空間。類似.bss偽指令(都為保留空間,但.usect可以在內(nèi)存中任意定義,而.bss則是獨立的)。 (1)符號名指向.usec
12、t指定的第一個單元,它代表所預(yù)留空間的變量名。 (2)段名告訴編譯器從哪一個命名段開始保留空間。段名放在雙引號內(nèi),前8個字符有效。 (3)字長定義了該段保留的字?jǐn)?shù)空間,可以用表達(dá)式表示。 (4)塊邊界為可選項,如果為非0,則改段為分塊段。表示在進行地址分配時,盡量不超過一頁,若超過一頁時,則從另一頁的邊界開始。 用.usect對同一段名重復(fù)定義,可以將連續(xù)存放在存儲器的若干變量定義在同一個段內(nèi)。,本例中用.usect偽指令定義兩個未初始化的命名段var1和var2。符號ptr和array分別指向var1段和var2段的第一個字。 dflag指向var1段中50個字塊中的第一個字。 SPC 目標(biāo)
13、代碼源程序 0000.text ;匯編到.text段 0000 2003 LACC03h 0000ptr .usect“var1”,1 ;在var1段保留一個字 0001array .usect“var1”,100 ;在var1段保留100個字 0001 0037ADD037h 0065dflag.usect“var1”,50 0002 0065ADD dflag ;還在.text段 0000vec.usect“var2”,100 ; 在var2段保留100個字 00030000ADDvec ;還在.text段 .globalarray ;將array定義為外部符號名,.usect執(zhí)行之后的存
14、儲器分布示意圖,8.2 .sect用法: .sect“段名” 定義初始化命名段。段名必須用引號引起。該段中可包括代碼或者數(shù)據(jù),類似于.text和.data。 9.set偽指令: 用法: 符號 .set 數(shù)值 .set定義的符號在符號表中,不能重復(fù)定義。在數(shù)值表達(dá)式中的符號必需事先定義。用.def或.global可以使用由.set定義的符號被其他模塊調(diào)用。 例: IMR .set 0004h ; Interrupt Mask Register IFR .set 0006h ; Interrupt Flag Register 10 .byte, .float , .bfloat, .int , .
15、word, .long , .blong, .string, .field 10.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個字符。例如: 0000.space 100h*16 0100strx.byte”ab”,”c” 0101 后面幾個指令用法也基本類似,但數(shù)據(jù)類型不同。,六.簡單的程序設(shè)計過程:,在程序設(shè)計時,一般來說需要進行規(guī)范的文件管理,使得源代碼組織清晰易
16、讀,有利于交流和加快開發(fā)的進度。 1.如果需要在多個模塊中使用相同的設(shè)置和中斷處理,通常將芯片映射到I/O空間的寄存器地址及標(biāo)號、預(yù)置變量和常數(shù)的空間等設(shè)置語句集中在一個文件中,稱為I/O寄存器頭文件(如init.h)。 2.將轉(zhuǎn)移中斷矢量地址的指令集中在一個文件中,稱為中斷矢量頭文件(如vector.h)。 3.將定義程序,數(shù)據(jù)和I/O空間地址塊大小和位置的偽指令集中在一個文件稱為命令文件(如F2407.cmd)。 以上三個合稱為公用文件。,4. 當(dāng)編寫具體的應(yīng)用程序的時候,用.copy或.include偽指令將I/O寄存器頭文件合中斷矢量頭文件復(fù)制到應(yīng)用程序中,形成一個匯編源程序(如del
17、ay.asm),再由匯編器進行匯編后生成一個目標(biāo)文件(如delay.obj),最后連接器把該目標(biāo)文件和命令文件相連接,生成可執(zhí)行文件(如delay.out).,5. 命令文件*.cmd文件的介紹: TMS320系列芯片的存儲器配置隨應(yīng)用的不同而不同。用連接器偽指令MEMORY可以確定目標(biāo)系統(tǒng)的各種內(nèi)存配置。當(dāng)MEMORY決定了存儲器模式后,可以用連接器偽指令SECTIONS確定連接器組合輸入段的方法和輸出段在存儲器中的位置。,3.1 MEMORY偽指令 確定在目標(biāo)系統(tǒng)中具有物理位置并且可以被程序使用的存儲器范圍,該指令并不對存儲器進行邏輯配置。 TMS320器件具有獨立的程序存儲器,數(shù)據(jù)存儲器
18、和I/O存儲器空間,連接器允許用戶使用MEMORY偽指令的PAGE選項單獨配置這些地址空間。,(1)MEMORY的一般格式: MEMORY PAGE0: 存儲器名1(屬性): ORIGIN = 常數(shù),LENGTH= 常數(shù) . . . PAGEn: 存儲器名 n(屬性):ORIGIN = 常數(shù),LENGTH= 常數(shù) ,說明: 1.PAGE定義一個存儲空間,用戶可以定義多達(dá)255頁。通常默認(rèn)PAGE0定義程序存儲器,PAGE1定義數(shù)據(jù)存儲器。每個PAGE代表一個完全獨立的地址空間。在PAGE0上以配置的存儲器可以和在PAGE1上已配置的存儲器重疊。在同一頁中的存儲器名不能有相同的名字,且不能重疊。
19、 2. ORIGIN指定存儲器區(qū)域的起始地址,可以是16位常數(shù)、十進制,八進制或者十六進制常數(shù)。LENGTH指定存儲器的長度。,3.2 SECTIONS偽指令:SECTIONS功能: 1 描述輸入段怎樣被組合到輸出段內(nèi); 2 定義在執(zhí)行程序中的輸出段; 3 規(guī)定輸出段在存儲器中的位置; 4 允許重新命名輸出段; 格式: SECTIONS 段名1:特性1,特性2, 段名1:特性1,特性2, ,特性列表,3.2.1 SECTIONS偽指令中的特性列表選項有以下幾種: (1)裝載地址:規(guī)定段將被裝載在存儲器中的位置。 LOAD = allocation 或 allocation 注:allocati
20、on 是MEMORY偽指令所定義的范圍 內(nèi)地址,包括ROM,RAM,實際地址值(16位常數(shù))等. (2)運行地址:定義段在存儲器內(nèi)運行的位置。 RUN = allocation 或 RUN allocation,對上述兩個屬性的說明: 裝載地址和運行地址通常是相同的,此時每個段只具有單個地址。但也有例外,如在基于ROM的系統(tǒng)中,若有性能要求嚴(yán)格的代碼必須裝入ROM,但是它在RAM中運行的速度會更快。這就需要設(shè)置兩個地址,用LOAD設(shè)置它的裝載地址,用RUN設(shè)置它的運行地址。,(3)調(diào)準(zhǔn)地址:規(guī)定段應(yīng)在地址邊界上開始。 (4)塊地址:規(guī)定段必須裝載兩個地址邊界之間,它把段定位在大小為n(2的冪)
21、的塊內(nèi)任何地方。如果段大于塊,那么段將從該邊界開始。 (5)輸入段:定義組成輸出段的輸入段。 輸入文件中的段組合起來形成輸出段,連接器按照所列出的輸入段的次序連接并結(jié)合它們。如果沒有輸入段說明,連接器將從輸入文件中所有的.text , .data, .text段一起組合到對應(yīng)的默認(rèn)的輸出段中。,(6)段類型:定義特殊段類型的標(biāo)志。type = COPY 或type = DSECT 或type =NOLOAD COPY和DSECT創(chuàng)建的是一個虛段,它不包括在輸出段存儲器分配內(nèi),也不占據(jù)存儲器空間,不包括在存儲器映象列表中。但虛段中定義的全局符號可以被其他輸出段引用。 NOLOAD創(chuàng)建的段不將段的
22、內(nèi)容,重定位信息及行號信息放在輸出模塊中。但連接器為其分配空間并包括在存儲器映象列表中。 (7)填充值:定義用于填充初始化空位的數(shù)值。用.field偽指令填充數(shù)據(jù)。,一個*.cmd文件的例子,例:F2407.cmd MEMORY PAGE 0: /* PROGRAM MEMORY */ VECS:ORIGIN=0000H,LENGTH=0044H PM:ORIGIN=00100H,LENGTH=7000H PAGE 1: /* DATA MEMORY */ BLK_B2 :ORIGIN=0060H, LENGTH=20H/* Block B2 */ BLK_B0 :ORIGIN=0200H, L
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 價格策略與定價技巧
- 2025年度家用電梯定制設(shè)計與安裝合同范本2篇
- 2025年度25噸汽車吊車租賃與施工現(xiàn)場衛(wèi)生管理合同3篇
- 二零二五年度上市公司股權(quán)激勵股權(quán)轉(zhuǎn)讓及代持協(xié)議3篇
- 生產(chǎn)車間消防知識培訓(xùn)
- 二零二五年度停車場保險服務(wù)合同6篇
- 二零二五年度打包機租賃與安裝調(diào)試服務(wù)合同2篇
- 二零二五年度市場推廣合同標(biāo)的營銷方案與推廣渠道
- 重慶市2024-2025學(xué)年高一上學(xué)期期末聯(lián)合檢測語文試卷(含答案)
- 二零二五年度婚慶活動參與者權(quán)益保障合同樣本3篇
- 提優(yōu)精練08-2023-2024學(xué)年九年級英語上學(xué)期完形填空與閱讀理解提優(yōu)精練(原卷版)
- 中央2025年全國人大機關(guān)直屬事業(yè)單位招聘18人筆試歷年典型考點(頻考版試卷)附帶答案詳解
- 2024年度美團平臺商家入駐服務(wù)框架協(xié)議
- 2024至2030年四氯苯醌項目投資價值分析報告
- DB4511T 0002-2023 瓶裝液化石油氣充裝、配送安全管理規(guī)范
- 《肝衰竭診治指南(2024版)》解讀
- 2025年集體經(jīng)濟發(fā)展計劃
- 房地產(chǎn)銷售主管崗位招聘筆試題及解答(某大型央企)2024年
- 足球D級教練員培訓(xùn)匯報
- 巖溶區(qū)水文地質(zhì)參數(shù)研究-洞察分析
- 大學(xué)體育與健康 教案全套 體育舞蹈 第1-16周
評論
0/150
提交評論