程序編寫和調(diào)試環(huán)境簡介_第1頁
程序編寫和調(diào)試環(huán)境簡介_第2頁
程序編寫和調(diào)試環(huán)境簡介_第3頁
程序編寫和調(diào)試環(huán)境簡介_第4頁
程序編寫和調(diào)試環(huán)境簡介_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1主要內(nèi)容主要內(nèi)容第四章第四章 程序編寫和調(diào)試環(huán)境簡介程序編寫和調(diào)試環(huán)境簡介24 41.1. 匯編語言匯編語言 匯編語言包括匯編指令、偽指令和宏指令。由匯編語言匯編語言包括匯編指令、偽指令和宏指令。由匯編語言編寫的編寫的匯編語言源程序匯編語言源程序經(jīng)過匯編器匯編成經(jīng)過匯編器匯編成機器語言目標(biāo)程序機器語言目標(biāo)程序,再由鏈接器將多個目標(biāo)程序連接成一個單一的再由鏈接器將多個目標(biāo)程序連接成一個單一的可執(zhí)行程序可執(zhí)行程序。1.1.匯編指令:即指令系統(tǒng),該類指令在匯編時將產(chǎn)生一一對匯編指令:即指令系統(tǒng),該類指令在匯編時將產(chǎn)生一一對應(yīng)的目標(biāo)代碼。應(yīng)的目標(biāo)代碼。2.2.偽指令:在匯編和鏈接時提供控制信息和數(shù)據(jù)

2、,但不產(chǎn)生偽指令:在匯編和鏈接時提供控制信息和數(shù)據(jù),但不產(chǎn)生目標(biāo)代碼。目標(biāo)代碼。3.3.宏指令:是用戶自己創(chuàng)建的宏指令:是用戶自己創(chuàng)建的“指令指令”,在匯編時將其展開,在匯編時將其展開并匯編成對應(yīng)的目標(biāo)代碼。并匯編成對應(yīng)的目標(biāo)代碼。 (定義宏、調(diào)用宏、展開宏)(定義宏、調(diào)用宏、展開宏)4 41 1 程序的編寫程序的編寫3匯編語言格式:匯編語言格式: 標(biāo)號標(biāo)號: 助記符助記符 操作數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2,;注釋;注釋 (1 1)標(biāo)號區(qū)標(biāo)號區(qū):供本程序的其他部分或其他程序調(diào)用。標(biāo)號是任:供本程序的其他部分或其他程序調(diào)用。標(biāo)號是任選項,標(biāo)號后可以加也可不加選項,標(biāo)號后可以加也可不加“:

3、”。標(biāo)號必須從第。標(biāo)號必須從第1 1列寫起,列寫起,最多最多3232個字符,但第一個字母不能以數(shù)字開頭。個字符,但第一個字母不能以數(shù)字開頭。(2 2)助記符助記符:可以是匯編語言指令、匯編偽指令、宏指令,一:可以是匯編語言指令、匯編偽指令、宏指令,一般大寫;匯編偽指令和宏指令,以英文句號般大寫;匯編偽指令和宏指令,以英文句號“.”“.”開始,且為小開始,且為小寫。寫。注:指令和匯編命令不能寫在第注:指令和匯編命令不能寫在第1 1列,否則會被認為是標(biāo)號。列,否則會被認為是標(biāo)號。(3 3)操作數(shù)操作數(shù):指令中的操作數(shù)或匯編偽指令中定義的內(nèi)容。操:指令中的操作數(shù)或匯編偽指令中定義的內(nèi)容。操作數(shù)之間必

4、須用逗號作數(shù)之間必須用逗號“,”分開。分開。(4 4)注釋注釋:注釋從分號:注釋從分號“;”開始。注釋是任選項,如果注釋開始。注釋是任選項,如果注釋從第從第1 1列開始,也可以用列開始,也可以用“* *”開始。開始。4開發(fā)工具名稱及功能開發(fā)工具名稱及功能: : 1.1.匯編器匯編器(Assembler)(Assembler):將匯編語言源文件轉(zhuǎn)換成機器語言:將匯編語言源文件轉(zhuǎn)換成機器語言COFFCOFF目標(biāo)文件。目標(biāo)文件。 (. .OBJOBJ)2.2.鏈接器(鏈接器(LinkerLinker):將匯編產(chǎn)生的、可重新定位的):將匯編產(chǎn)生的、可重新定位的COFFCOFF目目標(biāo)文件結(jié)合成一個可執(zhí)行

5、的目標(biāo)模塊。標(biāo)文件結(jié)合成一個可執(zhí)行的目標(biāo)模塊。(.(.OUT)OUT)3.C3.C編譯器(編譯器(C CompilerC Compiler):將):將C/C+C/C+源程序轉(zhuǎn)換成源程序轉(zhuǎn)換成24X24X的匯的匯編語言源程序。編語言源程序。54 41.1. 幾個常用匯編偽指令介紹幾個常用匯編偽指令介紹 匯編偽指令可以實現(xiàn)以下功能匯編偽指令可以實現(xiàn)以下功能:匯編代碼和數(shù)據(jù)到指定的段;匯編代碼和數(shù)據(jù)到指定的段;為未定義的變量保存空間;為未定義的變量保存空間;控制列表文件;控制列表文件;匯編條件塊;匯編條件塊;定義全局變量;定義全局變量;指定匯編器能得到的宏;指定匯編器能得到的宏;檢查符號調(diào)試信息。檢

6、查符號調(diào)試信息。6偽指令分為偽指令分為8 8類:類:1.1.定義段的偽指令定義段的偽指令2.2.初始化常數(shù)偽指令初始化常數(shù)偽指令3.3.調(diào)準(zhǔn)段程序計數(shù)器的偽指令調(diào)準(zhǔn)段程序計數(shù)器的偽指令4.4.引用其他文件的偽指令引用其他文件的偽指令5.5.條件匯編偽指令條件匯編偽指令6.6.匯編時符號偽指令匯編時符號偽指令7.7.輸出列表偽指令輸出列表偽指令8.8.其他偽指令其他偽指令71.1.定義段的偽指令定義段的偽指令:把匯編語言程序的各部分與適當(dāng)?shù)亩温?lián)系:把匯編語言程序的各部分與適當(dāng)?shù)亩温?lián)系起來。包括起來。包括.bss, .data, .text, .sect, .usect.bss, .data, .

7、text, .sect, .usect,.asect.asect?;締卧締卧味危核^段(所謂段(sectionssections)是指連續(xù)占有存儲空間的一個數(shù)據(jù)或代碼)是指連續(xù)占有存儲空間的一個數(shù)據(jù)或代碼塊。編寫匯編源程序時,程序按段組織,每行匯編語言都從屬塊。編寫匯編源程序時,程序按段組織,每行匯編語言都從屬一個段,并由段匯編偽指令標(biāo)明該段的屬性。一個段,并由段匯編偽指令標(biāo)明該段的屬性。源程序按代碼塊、數(shù)據(jù)塊格式編寫,通常包含以下源程序按代碼塊、數(shù)據(jù)塊格式編寫,通常包含以下3 3個默認段:個默認段:l.text.text段(文本段):通常包含可執(zhí)行代碼;段(文本段):通常包含可執(zhí)行代

8、碼;l.data.data段(數(shù)據(jù)段):通常包含初始化的數(shù)據(jù);段(數(shù)據(jù)段):通常包含初始化的數(shù)據(jù);l.bss.bss(保留空間段):通常為沒有初始化的變量保留空間。(保留空間段):通常為沒有初始化的變量保留空間。此外,還可建立自定義段,如此外,還可建立自定義段,如.sect.sect段,段,.usect.usect段。段。8有兩種基本類型的段:有兩種基本類型的段:(1 1)初始化段:包含數(shù)據(jù)或代碼,包括段)初始化段:包含數(shù)據(jù)或代碼,包括段.text.text、段、段.data.data以以及由及由.sect.sect產(chǎn)生的自定義段。產(chǎn)生的自定義段。(2 2)未初始化段:為沒有初始化的數(shù)據(jù)保留存

9、儲空間,包)未初始化段:為沒有初始化的數(shù)據(jù)保留存儲空間,包括括.bss.bss段和段和.usect.usect產(chǎn)生的自定義段。產(chǎn)生的自定義段。段:指在存儲器中占有連續(xù)空間的代碼塊和數(shù)據(jù)塊,它是目標(biāo)段:指在存儲器中占有連續(xù)空間的代碼塊和數(shù)據(jù)塊,它是目標(biāo) 文件中的最小單位。文件中的最小單位。9(1 1)定義初始化命名段偽指令)定義初始化命名段偽指令.sect.sect句法:句法:.sect “.sect “段名段名”說明:說明: .sect.sect偽指令定義初始化命名段。段名必須用引號引偽指令定義初始化命名段。段名必須用引號引起。起。 .sect.sect段中可包括代碼或數(shù)據(jù),類似于段中可包括代

10、碼或數(shù)據(jù),類似于.text.text和和.data.data偽偽指令的命名段。指令的命名段。(2 2)在存儲器中為變量保留空間偽指令)在存儲器中為變量保留空間偽指令.bss.bss句法:句法: .bss .bss 符號,字長符號,字長 ,塊標(biāo)志,塊標(biāo)志 說明:該指令為沒有初始化的變量保留空間,通常是在說明:該指令為沒有初始化的變量保留空間,通常是在RAMRAM中中保留空間。保留空間。10(3 3)定義代碼段偽指令)定義代碼段偽指令.text.text句法:句法:.text.text說明:說明: 該偽指令定義該偽指令定義.text.text段中的代碼部分。該部分為可執(zhí)段中的代碼部分。該部分為可執(zhí)

11、行代碼。行代碼。 .text.text段是默認段,如果沒有使用任何段偽指令,段是默認段,如果沒有使用任何段偽指令,則匯編器將把所有內(nèi)容都匯編進則匯編器將把所有內(nèi)容都匯編進.text.text段。段。(4 4)為未命名段中的變量保留空間偽指令)為未命名段中的變量保留空間偽指令.usect.usect句法:符號名句法:符號名 .usect “.usect “段名段名”,字長,字長 ,塊邊界,塊邊界 說明:說明: .usect.usect偽指令為一個未命名段中的變量保留空間。類偽指令為一個未命名段中的變量保留空間。類似于似于.bss.bss偽指令,但是它允許用戶與段偽指令,但是它允許用戶與段.bss

12、.bss分開保留空間。分開保留空間。112.2.初始化常數(shù)的偽指令初始化常數(shù)的偽指令:該類指令為當(dāng)前段匯編數(shù)值。包:該類指令為當(dāng)前段匯編數(shù)值。包括括.bes, .space, .byte, .field, .float.bes, .space, .byte, .field, .float,.bfloat.bfloat,. t,.word, .long.word, .long,.blong.blong,.string.string。(1 1)預(yù)留存儲器位偽指令)預(yù)留存儲器位偽指令.bes.bes和和.space.space句法:句法:.bes .bes 位數(shù)位數(shù) .space .sp

13、ace 位數(shù)位數(shù)說明:說明: 這兩條指令在當(dāng)前段內(nèi)保留一個指定數(shù)目的位數(shù),并這兩條指令在當(dāng)前段內(nèi)保留一個指定數(shù)目的位數(shù),并用用0 0填充。用位數(shù)(填充。用位數(shù)(n n* *1616)可以保留)可以保留n n個字單元。個字單元。當(dāng)用當(dāng)用.bes.bes定義時,相應(yīng)的標(biāo)號指向保留位的最后定義時,相應(yīng)的標(biāo)號指向保留位的最后1 1個字;個字;當(dāng)用當(dāng)用.space.space定義時,相應(yīng)的標(biāo)號指向保留位的第定義時,相應(yīng)的標(biāo)號指向保留位的第1 1個字。個字。12(2 2)存儲)存儲8 8位值偽指令位值偽指令.byte.byte句法:句法: 標(biāo)號標(biāo)號 .byte .byte 數(shù)值數(shù)值11,數(shù)值,數(shù)值2 2,

14、數(shù)值,數(shù)值nn說明:說明: .byte.byte指令將一個或多個指令將一個或多個8 8位的值置入當(dāng)前段的連續(xù)字位的值置入當(dāng)前段的連續(xù)字中。該指令類似于中。該指令類似于.word.word偽指令,區(qū)別在于每個值寬度是偽指令,區(qū)別在于每個值寬度是8 8位。位。(3 3)給當(dāng)前字賦值偽指令)給當(dāng)前字賦值偽指令.field.field句法:句法: .field .field 數(shù)值數(shù)值 ,位長度,位長度 說明:說明: .field.field偽指令將一個數(shù)值置入當(dāng)前字中,該值占據(jù)的偽指令將一個數(shù)值置入當(dāng)前字中,該值占據(jù)的位由位由“位長度位長度”指定。指定。位長度是一個可選參數(shù),它指定位長度是一個可選參數(shù)

15、,它指定1-161-16位的數(shù)字,用以說明數(shù)值位的數(shù)字,用以說明數(shù)值在區(qū)域中的位數(shù)。若缺省,默認為在區(qū)域中的位數(shù)。若缺省,默認為1616位。若數(shù)值表示的位超出位。若數(shù)值表示的位超出位長度,則截斷高位,并提出警告。位長度,則截斷高位,并提出警告。13(4 4)存儲)存儲3232位浮點數(shù)偽指令位浮點數(shù)偽指令.float.float和和.bfloat.bfloat句法:句法: .float .float 數(shù)值數(shù)值 .bfloat .bfloat 數(shù)值數(shù)值說明:說明: .float.float和和.bfloat.bfloat偽指令將一個單精度偽指令將一個單精度3232位位IEEEIEEE浮點浮點數(shù)存儲

16、在當(dāng)前段的兩個連續(xù)的字中,先存儲低字,后存儲高數(shù)存儲在當(dāng)前段的兩個連續(xù)的字中,先存儲低字,后存儲高字。字。 .bfloat.bfloat保證定義的浮點數(shù)不跨越頁邊界。保證定義的浮點數(shù)不跨越頁邊界。(5 5)存儲)存儲1616位字偽指令位字偽指令.和和.word.word句法:句法: .int .int 數(shù)值數(shù)值11,,數(shù)值數(shù)值nn .word .word 數(shù)值數(shù)值11,,數(shù)值數(shù)值nn說明:說明: .和和.word.word偽指令將一個和多個偽指令將一個和多個1616位數(shù)值或表達式置位數(shù)值或表達式置入當(dāng)前段的連續(xù)字中。入當(dāng)前段的連續(xù)字中。14(6 6)存儲)存儲323

17、2位字偽指令位字偽指令.long.long和和.blong.blong句法:句法: .long .long 數(shù)值數(shù)值11,,數(shù)值數(shù)值nn .blong .blong 數(shù)值數(shù)值11,,數(shù)值數(shù)值nn說明:說明: .long.long和和.blong.blong將一個或多個將一個或多個3232位的數(shù)值置入當(dāng)前段中位的數(shù)值置入當(dāng)前段中的連續(xù)兩個字中(的連續(xù)兩個字中( 先存放低位字,后存放高位字)。先存放低位字,后存放高位字)。 .blong.blong保證使目標(biāo)不跨越頁邊界。保證使目標(biāo)不跨越頁邊界。(7 7)存放字符串偽指令)存放字符串偽指令.string.string句法:句法: .string “

18、.string “字符串字符串1”1”,,“,“字符串字符串n”n”說明:說明: .string.string偽指令把字符串中的字符放入當(dāng)前段中,除了偽指令把字符串中的字符放入當(dāng)前段中,除了把兩個字符組裝入每一個字外,這個偽指令類似于把兩個字符組裝入每一個字外,這個偽指令類似于.byte.byte。153.3.調(diào)準(zhǔn)段程序計數(shù)器的偽指令調(diào)準(zhǔn)段程序計數(shù)器的偽指令:該類指令可使段程:該類指令可使段程序計數(shù)器序計數(shù)器SPCSPC指向預(yù)定的位置。包括指向預(yù)定的位置。包括.align, .even.align, .even。段程序計數(shù)器(段程序計數(shù)器(SPCSPC):匯編器為每個段設(shè)置了一個匯編器為每個段

19、設(shè)置了一個獨立的程序計數(shù)器。獨立的程序計數(shù)器。SPCSPC代表代碼或數(shù)據(jù)段內(nèi)的當(dāng)前代表代碼或數(shù)據(jù)段內(nèi)的當(dāng)前地址。起始時匯編器把每個地址。起始時匯編器把每個SPCSPC設(shè)置為設(shè)置為0 0,即每個段,即每個段地址從地址從0 0開始,當(dāng)匯編器用代碼或數(shù)據(jù)填充段時,會開始,當(dāng)匯編器用代碼或數(shù)據(jù)填充段時,會使相應(yīng)的使相應(yīng)的SPCSPC增加。增加。16(1 1)重置)重置SPCSPC偽指令偽指令.align.align句法:句法:.align.align說明:說明: .align.align重置段程序計數(shù)器(重置段程序計數(shù)器(SPCSPC),使其指向下一個),使其指向下一個頁邊界,以確保后面的代碼從一個數(shù)

20、據(jù)頁開始。匯編器將未頁邊界,以確保后面的代碼從一個數(shù)據(jù)頁開始。匯編器將未用的空間用含用的空間用含NOPNOP指令的字填滿,直至頁邊界。指令的字填滿,直至頁邊界。(2 2)對)對SPCSPC進行排列偽指令進行排列偽指令.even.even句法:句法:.even.even說明:說明: .even.even偽指令對偽指令對SPCSPC進行排列,使其指向完整的字。進行排列,使其指向完整的字。用過用過.field.field偽指令后應(yīng)該用偽指令后應(yīng)該用.even.even偽指令,如果偽指令,如果.field.field沒有填沒有填滿一個字,滿一個字, .even.even將用將用0 0填充未填滿的位,然

21、后填充未填滿的位,然后SPCSPC增加,指增加,指向下一個地址。向下一個地址。174.4.引用其他文件的偽指令引用其他文件的偽指令:該類指令為文件提供信息或提供:該類指令為文件提供信息或提供這些文件的信息。包括這些文件的信息。包括.copy, .include,.global,.copy, .include,.global,.def,.ref,.mlib.def,.ref,.mlib。(1 1)復(fù)制文件偽指令)復(fù)制文件偽指令.copy.copy和和.include.include句法:句法:.copy “ .copy “ 文件名文件名” .include “ .include “ 文件名文件名

22、”說明:說明: .copy.copy和和.include .include 偽指令告訴匯編器從其他文件中讀偽指令告訴匯編器從其他文件中讀入源語句。從入源語句。從.copy.copy偽指令讀入的源語句將在列表文件中列出,偽指令讀入的源語句將在列表文件中列出,從從.include.include偽指令中讀入的源語句不在列表文件中列出。偽指令中讀入的源語句不在列表文件中列出。18(2 2)定義全局符號偽指令)定義全局符號偽指令.global,.def.global,.def和和.ref.ref句法:句法: .global .global 符號符號11,符號,符號nn .def .def 符號符號11

23、,符號,符號nn .ref .ref 符號符號11,符號,符號nn說明:說明: .global,.def .global,.def和和.ref.ref偽指令所指定的符號為全局符號,偽指令所指定的符號為全局符號,這些全局符號可以在外部定義或在外部被引用。這些全局符號可以在外部定義或在外部被引用。.def.def指定在當(dāng)前模塊中定義且可以在其他模塊中使用的符號。指定在當(dāng)前模塊中定義且可以在其他模塊中使用的符號。.ref.ref指定一個或多個在當(dāng)前模塊中使用但在其他模塊中定義的符指定一個或多個在當(dāng)前模塊中使用但在其他模塊中定義的符號。號。.global.global同時具備同時具備.def.def和

24、和.ref.ref的功能,需要時可代替這兩條指令。的功能,需要時可代替這兩條指令。195.5.條件匯編偽指令條件匯編偽指令:該類指令使匯編器根據(jù)表達式求值結(jié)果的:該類指令使匯編器根據(jù)表達式求值結(jié)果的真或假來匯編代碼的某些段。包括真或假來匯編代碼的某些段。包括.if, .elseif,.else,.if, .elseif,.else,.endif,.loop,.break,.endloop.endif,.loop,.break,.endloop。(1 1)條件匯編偽指令)條件匯編偽指令.if,.elseif,.else.if,.elseif,.else和和.endif.endif.if expr

25、ession .if expression 標(biāo)志條件塊的開始,如果標(biāo)志條件塊的開始,如果.if.if條件為條件為 真,那么匯編該表達式后面的代碼塊。真,那么匯編該表達式后面的代碼塊。.elseif expression .elseif expression 如果如果.if.if條件為假且條件為假且.elseif.elseif為真,為真, 那么匯編那么匯編.elseif.elseif表達式后面的代碼塊。表達式后面的代碼塊。.else .else 如果如果.if.if為假,那么匯編此代碼塊。為假,那么匯編此代碼塊。.endif .endif 標(biāo)志條件匯編塊的末尾并結(jié)束該塊。標(biāo)志條件匯編塊的末尾并結(jié)

26、束該塊。 20(2 2)重復(fù)匯編偽指令)重復(fù)匯編偽指令.loop,.break.loop,.break和和.endloop.endloop.1oop expression .1oop expression 標(biāo)志可重復(fù)代碼塊的開始。標(biāo)志可重復(fù)代碼塊的開始。.break expression .break expression 告訴匯編器當(dāng)告訴匯編器當(dāng).break.break表達式為假時表達式為假時 繼續(xù)重復(fù)匯編;如果表達式為真,繼續(xù)重復(fù)匯編;如果表達式為真, 那么轉(zhuǎn)移到緊接在那么轉(zhuǎn)移到緊接在.endloop.endloop之后的之后的 代碼。代碼。.endloop .endloop 標(biāo)志可重復(fù)代

27、碼塊的末尾。標(biāo)志可重復(fù)代碼塊的末尾。 216.6.匯編時符號偽指令匯編時符號偽指令:該類指令使定義的符號名等同于常數(shù)值:該類指令使定義的符號名等同于常數(shù)值或字符串。包括或字符串。包括.asg.asg,.eval.eval,.set.set,.equ.equ,.struct.struct,.endstruck.endstruck,.newblock.newblock。(1 1)賦字符串指令)賦字符串指令.asg.asg句法:句法: .asg “ .asg “ 字符串字符串 ”,替代符號,替代符號說明:說明: .asg.asg偽指令將字符串賦給替代符號,該指令與偽指令將字符串賦給替代符號,該指令與

28、.set.set指指令相似。不同的是令相似。不同的是.set.set指令將一個常數(shù)賦給一個字符(且不能指令將一個常數(shù)賦給一個字符(且不能重復(fù)定義),而重復(fù)定義),而.asg.asg將字符串賦給一個字符(可以重復(fù)定義)。將字符串賦給一個字符(可以重復(fù)定義)。22(2 2)賦值指令)賦值指令.set.set和和.equ.equ句法:句法: 符號符號 .set .set 數(shù)值數(shù)值 符號符號 .equ .equ 數(shù)值數(shù)值說明:說明: .set.set或或.equ.equ偽指令為一個符號定義一個常數(shù)值,兩偽指令為一個符號定義一個常數(shù)值,兩條指令功能相同。條指令功能相同。(3 3)定義數(shù)據(jù)結(jié)構(gòu)元素偽指令)

29、定義數(shù)據(jù)結(jié)構(gòu)元素偽指令.struct,.tag.struct,.tag和和.endstruct.endstruct說明:說明: .struct.struct和和.endstruct.endstruct偽指令類似偽指令類似C C語言的結(jié)構(gòu)定義,語言的結(jié)構(gòu)定義,用這種方法使用戶能把類似的元素組合在一起,然后把元用這種方法使用戶能把類似的元素組合在一起,然后把元素偏移量的計算留給匯編器。素偏移量的計算留給匯編器。.tag.tag偽指令將結(jié)構(gòu)的特征賦給一個標(biāo)號,從而簡化了結(jié)構(gòu)偽指令將結(jié)構(gòu)的特征賦給一個標(biāo)號,從而簡化了結(jié)構(gòu)的符號描述,并提供了一種定義結(jié)構(gòu)的能力。的符號描述,并提供了一種定義結(jié)構(gòu)的能力。2

30、3(4 4)賦表達式結(jié)果偽指令)賦表達式結(jié)果偽指令.eval.eval句法:句法: .eval .eval 明確的表達式,替代符號明確的表達式,替代符號說明:說明: .eval.eval指令對表達式求值把結(jié)果轉(zhuǎn)化為字符,并把指令對表達式求值把結(jié)果轉(zhuǎn)化為字符,并把字符賦給替代符號。字符賦給替代符號。247.7.其他偽指令其他偽指令:具有其他功能和特性的偽指令。包:具有其他功能和特性的偽指令。包括括.end, .label.end, .label,.mmregs.mmregs,.port.port,.sblock.sblock,.version.version,.emsg.emsg,.wmsg.w

31、msg。(1 1)終止源程序匯編偽指令)終止源程序匯編偽指令.end.end說明:說明: .end.end偽指令終止源程序匯編,它是一個程序的最后一偽指令終止源程序匯編,它是一個程序的最后一條源語句。匯編器將條源語句。匯編器將.end.end后面的所有源語句都忽略掉。后面的所有源語句都忽略掉。(2 2)定義段裝入地址的符號偽指令)定義段裝入地址的符號偽指令.label.label說明:說明: .label.label偽指令定義特定的標(biāo)號,它表示當(dāng)前段內(nèi)裝載偽指令定義特定的標(biāo)號,它表示當(dāng)前段內(nèi)裝載時的地址。時的地址。(3 3)定義匯編代碼偽指令)定義匯編代碼偽指令.version.version

32、說明:說明: .version.version告訴匯編器該代碼適用于哪一種處理器。有告訴匯編器該代碼適用于哪一種處理器。有效的器件號是效的器件號是1010,1616,2020,2525,和,和5050。.version.version偽指令必須出偽指令必須出現(xiàn)在指令之前,否則將出錯。現(xiàn)在指令之前,否則將出錯。 254 41.3 31.3 3種基本的文件種基本的文件 1.1.匯編語言文件:后綴為匯編語言文件:后綴為.ASM ,.ASM ,書寫該文件所用指令為書寫該文件所用指令為LF2407LF2407支持的匯編語言指令。在該程序中實現(xiàn)支持的匯編語言指令。在該程序中實現(xiàn)DSPDSP要完成的功要完成

33、的功能。能。 2. 2. 頭文件:后綴為頭文件:后綴為.H.H,定義,定義DSPDSP系統(tǒng)用到的一些寄存器映射系統(tǒng)用到的一些寄存器映射地址,用戶用到的常量和用戶自定義的寄存器都在該文件中地址,用戶用到的常量和用戶自定義的寄存器都在該文件中定義。格式為定義。格式為.include “.include “文件名文件名.H”.H”。3. 3. 命令文件:后綴為命令文件:后綴為.CMD.CMD,該文件實現(xiàn)對程序存儲器空間和,該文件實現(xiàn)對程序存儲器空間和數(shù)據(jù)存儲器空間的分配。該文件常用到的偽指令有數(shù)據(jù)存儲器空間的分配。該文件常用到的偽指令有MEMORYMEMORY偽偽指令和指令和SECTIONSSECT

34、IONS偽指令。偽指令。 26偽指令偽指令MEMORYMEMORY和和SECTIONSSECTIONS:1.MEMORY1.MEMORY偽指令:用來標(biāo)示實際存在目標(biāo)系統(tǒng)中且可被使用的存?zhèn)沃噶睿河脕順?biāo)示實際存在目標(biāo)系統(tǒng)中且可被使用的存儲器范圍,每個存儲器范圍具有名字,起始地址和長度。儲器范圍,每個存儲器范圍具有名字,起始地址和長度。MEMORYMEMORY偽指令的一般語法為:偽指令的一般語法為: MEMORY MEMORY PAGEOPAGEO:namel(attr)namel(attr):origin=constantorigin=constant,length=constantlength=

35、constant PAGEn PAGEn:namen(attr)namen(attr):origin=constantorigin=constant,length=constantlength=constant 27PAGEPAGE:標(biāo)示存儲器空間,每一個:標(biāo)示存儲器空間,每一個PAGEPAGE代表一個完全獨立的代表一個完全獨立的地址空間。用戶規(guī)定可以多達地址空間。用戶規(guī)定可以多達255255頁,通常頁,通常PAGE0PAGE0規(guī)定程序規(guī)定程序存儲器,存儲器,PAGElPAGEl規(guī)定數(shù)據(jù)存儲器。規(guī)定數(shù)據(jù)存儲器。namename:命名存儲器。存儲器名可以是:命名存儲器。存儲器名可以是1 18 8

36、個字符。在不同個字符。在不同頁上的存儲器名可以具有相同的名字,但是在一頁之內(nèi)所頁上的存儲器名可以具有相同的名字,但是在一頁之內(nèi)所有的存儲器名必須具有惟一的名字且必須不重疊。有的存儲器名必須具有惟一的名字且必須不重疊。attrattr:這是一個任選項,為命名區(qū)規(guī)定這是一個任選項,為命名區(qū)規(guī)定1 14 4個屬性。未規(guī)個屬性。未規(guī)定屬性的存儲器具有所有定屬性的存儲器具有所有4 4個屬性。個屬性。originorigin:規(guī)定存儲器范圍的起始地址。:規(guī)定存儲器范圍的起始地址。lengthlength:規(guī)定存儲器范圍的長度。:規(guī)定存儲器范圍的長度。 PAGEnPAGEn:namen(attr)namen

37、(attr):origin=constantorigin=constant,length=constantlength=constant28偽指令偽指令MEMORYMEMORY和和SECTIONSSECTIONS:2.2.SECTIONSECTION偽指令:描述輸入段怎樣被組合到輸出段內(nèi);在可執(zhí)偽指令:描述輸入段怎樣被組合到輸出段內(nèi);在可執(zhí)行程序內(nèi)定義輸出段;規(guī)定在存儲器內(nèi)何處放置輸出段;允許重行程序內(nèi)定義輸出段;規(guī)定在存儲器內(nèi)何處放置輸出段;允許重命名輸出段。命名輸出段。 SECTIONSSECTIONS偽指令的一般語法是:偽指令的一般語法是:SECTIONSSECTIONS name na

38、me:propertyproperty,property,propertyproperty,property, name name:propertyproperty,propertyproperty,propertyproperty, name name:propertyproperty,propertyproperty,property property , 29name(name(段名段名) ):說明定義了一個輸出段。:說明定義了一個輸出段。在段名之后是在段名之后是特性列表特性列表,定義段的內(nèi)容以及它們是怎樣被分,定義段的內(nèi)容以及它們是怎樣被分配的。配的。裝載位置,規(guī)定段將被裝載在存儲器內(nèi)

39、何處;裝載位置,規(guī)定段將被裝載在存儲器內(nèi)何處;運行位置,定義段將在存儲器內(nèi)何處運行;運行位置,定義段將在存儲器內(nèi)何處運行;輸入段,定義組成輸出段的輸入段;輸入段,定義組成輸出段的輸入段;段類型,定義特定段類型的標(biāo)志;段類型,定義特定段類型的標(biāo)志;填充值,定義用于填充未初始化空位的數(shù)值。填充值,定義用于填充未初始化空位的數(shù)值。 namename:propertyproperty,property,propertyproperty,property,注:有了這注:有了這3 3種基本文件之后,就可在調(diào)試環(huán)境里將匯編源程種基本文件之后,就可在調(diào)試環(huán)境里將匯編源程序編譯、鏈接最后生成可執(zhí)行文件進行仿真調(diào)

40、試。序編譯、鏈接最后生成可執(zhí)行文件進行仿真調(diào)試。304 42 2 調(diào)試環(huán)境代碼編譯器調(diào)試環(huán)境代碼編譯器CCCC簡介簡介 寫好匯編語言程序之后,調(diào)試程序需要連接調(diào)試環(huán)境。在寫好匯編語言程序之后,調(diào)試程序需要連接調(diào)試環(huán)境。在系統(tǒng)上安裝好代碼編譯器軟件系統(tǒng)上安裝好代碼編譯器軟件CC4CC41010之后,在桌面上出現(xiàn)之后,在桌面上出現(xiàn)兩個快捷方式,一個是兩個快捷方式,一個是“Setup CCC2000Setup CCC2000,另一個是,另一個是“CC CC C2000”C2000”。1.1.“Setup CCC2000”“Setup CCC2000”用來對該編譯器的運行環(huán)境進行配用來對該編譯器的運行

41、環(huán)境進行配置。在保證仿真器和實驗板之間連接正確后,給實驗板供電,置。在保證仿真器和實驗板之間連接正確后,給實驗板供電, 雙擊快捷鍵雙擊快捷鍵“SetupCCC2000”SetupCCC2000”之后出現(xiàn)界面如圖之后出現(xiàn)界面如圖4-14-1所示。所示。本實驗板采用的是本實驗板采用的是C24x XDS510C24x XDS510硬件仿真器。選擇該仿真器硬件仿真器。選擇該仿真器并將其添加到系統(tǒng)配置中,其他選項使用缺省設(shè)置后,保存并將其添加到系統(tǒng)配置中,其他選項使用缺省設(shè)置后,保存后就可退出該程序。后就可退出該程序。 31322.“2.“CC C2000CC C2000”為程序調(diào)試仿真環(huán)境。完成對系統(tǒng)

42、的配置之為程序調(diào)試仿真環(huán)境。完成對系統(tǒng)的配置之后,在給實驗板供電的情況下,雙擊快捷鍵后,在給實驗板供電的情況下,雙擊快捷鍵“CCC2000”“CCC2000”,就可進入圖就可進入圖 4 42 2所示的集成調(diào)試環(huán)境。所示的集成調(diào)試環(huán)境。 圖圖4 42 2所示的集成調(diào)試環(huán)境由所示的集成調(diào)試環(huán)境由3 3部分組成:部分組成:1.1.頂部為集成調(diào)試環(huán)境的標(biāo)題欄頂部為集成調(diào)試環(huán)境的標(biāo)題欄(C24xEmulat(C24xEmulator(Texas or(Texas Instruments)Instruments)CPU_1-C2XX Code Composer)CPU_1-C2XX Code Compos

43、er),2.2.第第2 2行為菜單欄行為菜單欄(File(File、EditEdit、ProProject)ject);3.3.下面部分為工作窗口區(qū)下面部分為工作窗口區(qū)(Files(Files、DisDis-Assembly-Assembly、CPU)CPU)33344 42 21 1 主要菜單及功能介紹主要菜單及功能介紹 1 1Project(Project(工程工程) )菜單菜單ProjectProjectNewNew:新建一個工程,將該工程保存至新建工程的:新建一個工程,將該工程保存至新建工程的文件夾里面。文件夾里面。ProjectProjectOpenOpen:打開一個已有的工程。:打

44、開一個已有的工程。ProjectProjectAdd Files to ProjectAdd Files to Project:將文件添加到該工程中。:將文件添加到該工程中。添入工程的文件擴展名可以有:添入工程的文件擴展名可以有:* *.C.C,* *.ASM.ASM,* *.OBJ.OBJ或或* *.LIB.LIB,* *.CMD.CMD。ProjProjectectCloseClose:將一個已打開的工程關(guān)閉。:將一個已打開的工程關(guān)閉。 35ProjectProjectCompile FilesCompile Files:對工程中的文件進行編譯。:對工程中的文件進行編譯。ProjectPr

45、ojectBuildBuild:對工程進行編譯、匯編和連接,生成可執(zhí):對工程進行編譯、匯編和連接,生成可執(zhí)行文件行文件OUTOUT。ProjectProjectRebuildRebuild:對工程進行再一次編譯、匯編和連接,:對工程進行再一次編譯、匯編和連接,生成可執(zhí)行文件生成可執(zhí)行文件.OUT.OUT。ProjectProjectStop BuildStop Build:停止對工程的編譯、匯編和連接。:停止對工程的編譯、匯編和連接。ProjectProjectShow DependenciesShow Dependencies:顯示該工程中用到的所有文:顯示該工程中用到的所有文件和所需的庫文

46、件。件和所需的庫文件。ProjectProjectScan All DependenciesScan All Dependencies:細看該工程中用到的所:細看該工程中用到的所有文件和所需的庫文件。有文件和所需的庫文件。ProjectProjectOptionsOptions:對:對BuildBuild過程中的一些選項進行配置;通過程中的一些選項進行配置;通常在常在BuildBuild時采用默認設(shè)置。時采用默認設(shè)置。ProjectProjectRecent Project FilesRecent Project Files:顯示最近打開過的工程。:顯示最近打開過的工程。 362 2View(

47、View(觀察觀察) )菜單欄菜單欄ViewViewDis-AssemblyDis-Assembly:觀察匯編程序窗口;可在此窗口中:觀察匯編程序窗口;可在此窗口中對匯編程序進行修改。對匯編程序進行修改。ViewViewMemoryMemory:觀察存儲器窗口;可選擇觀察的存儲器類:觀察存儲器窗口;可選擇觀察的存儲器類型型( (程序存儲器、數(shù)據(jù)存儲器和程序存儲器、數(shù)據(jù)存儲器和I IO O空間空間) )和存儲器的起始和存儲器的起始地址。地址。ViewViewCPU RegistersCPU Registers:觀察調(diào)試過程中:觀察調(diào)試過程中CPUCPU寄存器的和各寄存器的和各個狀態(tài)位的變化情況。

48、個狀態(tài)位的變化情況。ViewViewWatch WindowWatch Window:觀察調(diào)試過程中的變量,:觀察調(diào)試過程中的變量,C C表達式,表達式,地址和寄存器的值。地址和寄存器的值。ViewViewMixed Source and ASMMixed Source and ASM:在調(diào)試過程中即觀察:在調(diào)試過程中即觀察C C程序程序又觀察匯編程序。又觀察匯編程序。 373 3Debug(Debug(調(diào)試調(diào)試) )菜單欄菜單欄DebugDebugBreakpointsBreakpoints:將光標(biāo)放在要設(shè)置斷點的程序處,選擇:將光標(biāo)放在要設(shè)置斷點的程序處,選擇DebugDebugBreak

49、pointsBreakpoints可在程序中設(shè)置斷點;程序運行到斷點處可在程序中設(shè)置斷點;程序運行到斷點處自動停止。自動停止。DebugDebugProbe PointsProbe Points:在程序中設(shè)置探測點。:在程序中設(shè)置探測點。DebugDebugStepIntoStepInto:單步執(zhí)行程序并進人調(diào)用的子程序。:單步執(zhí)行程序并進人調(diào)用的子程序。DebugDebugStepOverStepOver:單步執(zhí)行程序,但不進入調(diào)用的程序:單步執(zhí)行程序,但不進入調(diào)用的程序( (子程子程序、中斷服務(wù)程序序、中斷服務(wù)程序) ),即該命令一步執(zhí)行完被調(diào)用的程序。,即該命令一步執(zhí)行完被調(diào)用的程序。D

50、ebugDebugStepOutStepOut:跳出子程序。:跳出子程序。DebugDebugRunRun:執(zhí)行程序到斷點、探測點或用戶中斷:執(zhí)行程序到斷點、探測點或用戶中斷(ESC)(ESC)。 DebugDebugHaltHalt:當(dāng)執(zhí)行:當(dāng)執(zhí)行RunRun時,用時,用HaltHalt來停止程序的執(zhí)行。來停止程序的執(zhí)行。DebugDebugReset DSPReset DSP:對處理器進行復(fù)位。:對處理器進行復(fù)位。DebugDebugRestartRestart:將程序指針指向程序的起始地址,從程序最:將程序指針指向程序的起始地址,從程序最開始處執(zhí)行程序。開始處執(zhí)行程序。 38 4 42

51、22 2 工作窗口區(qū)工作窗口區(qū)在在CCCC集成環(huán)境中,常用工作窗口有集成環(huán)境中,常用工作窗口有Files(Files(文件文件) )窗口、窗口、Dis-Dis-Assembly(Assembly(匯編文件匯編文件) )窗口、窗口、CPUCPU窗口、窗口、Memory(Memory(存儲器存儲器) )窗口以窗口以及及Watch(Watch(觀察觀察) )窗口等。窗口等。1 1Files(Files(文件文件) )窗口窗口 該程序包括當(dāng)前系統(tǒng)用到的該程序包括當(dāng)前系統(tǒng)用到的GElGEl文件和工程。通常在文件和工程。通常在GELGEL文件里包括缺省的文件里包括缺省的initinitgelgel文件。在

52、工程里包括用戶用到文件。在工程里包括用戶用到的頭文件,用的頭文件,用includeinclude定義的引用文件和用戶在建立工程或定義的引用文件和用戶在建立工程或后來添加到工程中的后來添加到工程中的C C源文件源文件* *C C,匯編源文件,匯編源文件* *ASMASM, ,,目,目標(biāo)或庫文件標(biāo)或庫文件* *OBJOBJ,* *.LIB.LIB和鏈接命令文件和鏈接命令文件* *CMDCMD。 392 2Dis-Assembly(Dis-Assembly(反匯編程序反匯編程序) )窗口窗口該窗口用來顯示匯編程序和程序存儲器的內(nèi)容。在這些程序中,該窗口用來顯示匯編程序和程序存儲器的內(nèi)容。在這些程序中

53、,用一橫條來表示當(dāng)前指針。同時可用鼠標(biāo)點擊匯編語句的方法用一橫條來表示當(dāng)前指針。同時可用鼠標(biāo)點擊匯編語句的方法來設(shè)置斷點,再點擊一次,取消斷點。來設(shè)置斷點,再點擊一次,取消斷點。3 3CPUCPU寄存器窗口寄存器窗口該窗口顯示在程序調(diào)試過程中該窗口顯示在程序調(diào)試過程中CPUCPU寄存器的內(nèi)容,它包括:程寄存器的內(nèi)容,它包括:程序指針序指針PCPC、累加器、累加器ACCACC、乘積寄存器、乘積寄存器PREGPREG、臨時寄存器、臨時寄存器TREGTREG、狀態(tài)寄存器狀態(tài)寄存器ST0ST0和和STlSTl、重復(fù)計數(shù)器、重復(fù)計數(shù)器RPTCRPTC、堆棧指針、堆棧指針TOSTOS、輔助、輔助寄存器寄存

54、器AROAROAR7AR7、中斷屏蔽寄存器、中斷屏蔽寄存器IMRIMR和中斷標(biāo)志寄存器和中斷標(biāo)志寄存器IFRIFR以以及全局數(shù)據(jù)存儲器配置寄存器及全局數(shù)據(jù)存儲器配置寄存器GREGGREG。用戶可通過。用戶可通過CPUCPU寄存器窗寄存器窗口來監(jiān)視程序的執(zhí)行過程。改變寄存器內(nèi)容,可用鼠標(biāo)點擊需口來監(jiān)視程序的執(zhí)行過程。改變寄存器內(nèi)容,可用鼠標(biāo)點擊需改變的寄存器,輸入值后回車即可。改變的寄存器,輸入值后回車即可。 404 4狀態(tài)寄存器窗口狀態(tài)寄存器窗口該窗口將狀態(tài)寄存器中的各個狀態(tài)位該窗口將狀態(tài)寄存器中的各個狀態(tài)位ARPARP、OVOV、OVMOVM、INTMINTM、DPDP、ARBARB、CNFCNF、TCTC、SXMSXM、C C、SXFSXF和和PMPM位單獨顯示,通過該窗口用戶位單獨顯示,通過該窗口用戶可以很清楚的看到程序執(zhí)行過程中各狀態(tài)位的變化情況。改變可以很清楚的看到程序執(zhí)行過程中各狀態(tài)位的變化情況。改變狀態(tài)位內(nèi)容,可用鼠標(biāo)

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論